Three.js에서 놀기 -OrbitControls로 카메라를 움직이자 -
오늘도 카메라를 사용하여 움직입니다.
1. 완성판
See the Pen OrbitControls by hiroya iizuka ( @ 히로야 요시즈카 )
on CodePen .
2. 참고문헌
SterField
ICS MEDIA
처음 Three.js
CodeGrid
3. 분해해 본다
지난번 , 마우스 좌표를 가져오고 mousemove 이벤트를 설정했습니다.
Three.js에는 카메라의 움직임을 돕는 많은 유용한 라이브러리가 있습니다.
오라일리 책에 따르면
· FirstPersonControls : 1인칭 시점의 슈팅 게임과 같은 동작을 하는 컨트롤.
· FlyControls : 비행 시뮬레이터와 같은 컨트롤.
· TrackBallControls : 마우스(또는 트랙볼)를 사용하여 장면 내를 이동할 수 있는 컨트롤.
· OrbitControls : 특정 장면을 돌아다니는 궤도 위성을 시뮬레이션하는 컨트롤.
등 등 이외에도 많이 있습니다.
이번에는 OrbitControl.js를 사용합시다.
사용법
사용법은 매우 간단하며 주로 두 단계로 나뉩니다.
❶. OrbitControls 로드
GitHub OrbitControls.js 의 약 1000행에 걸친 소스 코드를 복사합니다.
js 디렉토리를 만들고 OrbitControls.js 파일을 만들고 그 안에 방금 복사한 내용을 붙여넣습니다.
가능하면 index.html 에 script 파일에서 이 파일을 불러 봅시다.
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/102/three.min.js"></script>
//下記を追加
<script src="js/OrbitControls.js"></script>
</head>
여기서 사용할 준비가 되었습니다.
❷. 카메라 컨트롤러 만들기
OrbitControls 생성자는 아래와 같이 인수에 camera 객체를 취합니다.
const controls = new THREE.OrbitControls(camera)
See the Pen OrbitControls (experimental) by hiroya iizuka ( @ 히로야 요시즈카 )
on CodePen .
<script async=""src="https://static.codepen.io/assets/embed/ei.js"/>
이것으로 완성입니다.
이렇게 간단하게, OrbitControls 를 사용할 수 있다니, 선인의 분들에게는 머리가 오르지 않습니다.
❸. 옵션을 붙인다.
enableDamping
와 autoRotate
, autoRotateSpeed
를 붙이자.
enableDamping은 설정하여 드래그할 때 애니메이션을 부드럽게 합니다.
autoRotate는 자동으로 회전을 추가할 수 있습니다.
이것들을 설정할 때는, 애니메이션의 함수내에서, controls.update()를 쓸 필요가 있으므로, 주의해 주세요.
const controls = new THREE.OrbitControls(camera);
controls.enableDamping = true;
controls.autoRotate = true;
controls.autoRotateSpeed = 1;
function renderScene() {
requestAnimationFrame(renderScene);
controls.update();
renderer.render(scene, camera);
}
See the Pen OrbitControls by hiroya iizuka ( @ 히로야 요시즈카 )
on CodePen .
<script async=""src="https://static.codepen.io/assets/embed/ei.js"/>
좋은 느낌입니다!
그 밖에도, 여러가지 프로퍼티가 있으므로, 공식 를 참고에 적절히 만져 주세요.
최종 코드
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/102/three.min.js"></script>
<script src="js/OrbitControls.js"></script>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<canvas class="stage"></canvas>
<script>
function init() {
//レンダラーを作成
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector(".stage")
});
renderer.setSize(window.innerWidth, window.innerHeight);
//シーンを作成
const scene = new THREE.Scene();
starNight();
function starNight() {
// 形状データを作成
const geometry = new THREE.Geometry();
for (let i = 0; i < 1000; i++) {
const star = new THREE.Vector3();
star.x = THREE.Math.randFloatSpread(3000);
star.y = THREE.Math.randFloatSpread(3000);
star.z = THREE.Math.randFloatSpread(3000);
geometry.vertices.push(star);
}
// マテリアルを作成
const material = new THREE.PointsMaterial({
size: 10,
color: 0xffffff
});
// 物体を作成
const star = new THREE.Points(geometry, material);
scene.add(star);
}
//カメラを作成
const camera = new THREE.PerspectiveCamera(
50,
window.innerWidth / window.innerHeight,
0.1,
2000
);
const controls = new THREE.OrbitControls(camera);
controls.enableDamping = true;
controls.autoRotate = true;
controls.autoRotateSpeed = 1;
camera.position.set(0, 0, 1000);
//球を作成
const geometry = new THREE.SphereGeometry(100, 32, 32);
const material = new THREE.MeshNormalMaterial();
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
renderScene();
//アニメーション
function renderScene() {
requestAnimationFrame(renderScene);
controls.update();
renderer.render(scene, camera);
}
}
window.addEventListener("load", init);
</script>
</body>
</html>
OrbitControls는 선인의 지혜가 담긴 훌륭한 라이브러리였습니다.
그럼 또 내일~
Reference
이 문제에 관하여(Three.js에서 놀기 -OrbitControls로 카메라를 움직이자 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/duka/items/784dbdae89a8ea48ce4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)