three.js
Three.js의 카메라 컨트롤
수색…
소개
이 문서는 기존의 카메라 컨트롤을 씬에 쉽게 추가 할 수있는 방법과 커스텀 컨트롤 생성에 대한 지침을 제공합니다. 미리 만들어진 제어 스크립트는 라이브러리의
/examples/js/controls
폴더에서 찾을 수 있습니다.
궤도 제어
궤도 카메라는 사용자가 중심점을 중심으로 회전 할 수 있지만 특정 축을 잠근 채로 유지할 수있게하는 카메라입니다. 이것은 장면이 "벗어난"기울어 짐을 방지하기 때문에 매우 인기가 있습니다. 이 버전은 Y (수직) 축을 잠그고 사용자가 왼쪽, 가운데 및 오른쪽 마우스 버튼 (또는 특정 터치 이벤트)으로 궤도, 확대 / 축소 및 이동을 허용합니다.
index.html
<html>
<head>
<title>Three.js Orbit Controller Example</title>
<script src="/javascripts/three.js"></script>
<script src="/javascripts/OrbitControls.js"></script>
</head>
<body>
<script src="javascripts/scene.js"></script>
</body>
</html>
scene.js
var scene, renderer, camera;
var cube;
var controls;
init();
animate();
function init()
{
renderer = new THREE.WebGLRenderer( {antialias:true} );
var width = window.innerWidth;
var height = window.innerHeight;
renderer.setSize (width, height);
document.body.appendChild (renderer.domElement);
scene = new THREE.Scene();
var cubeGeometry = new THREE.BoxGeometry (10,10,10);
var cubeMaterial = new THREE.MeshBasicMaterial ({color: 0x1ec876});
cube = new THREE.Mesh (cubeGeometry, cubeMaterial);
cube.position.set (0, 0, 0);
scene.add (cube);
camera = new THREE.PerspectiveCamera (45, width/height, 1, 10000);
camera.position.y = 160;
camera.position.z = 400;
camera.lookAt (new THREE.Vector3(0,0,0));
controls = new THREE.OrbitControls (camera, renderer.domElement);
var gridXZ = new THREE.GridHelper(100, 10);
gridXZ.setColors( new THREE.Color(0xff0000), new THREE.Color(0xffffff) );
scene.add(gridXZ);
}
function animate()
{
controls.update();
requestAnimationFrame ( animate );
renderer.render (scene, camera);
}
OrbitControls 스크립트에는 수정할 수있는 몇 가지 설정이 있습니다. 이 코드는 잘 문서화되어 있으므로 OrbitControls.js 에서 그 코드를 확인하십시오. 예를 들어, 다음은 새로운 OrbitControls 객체에서 수정 된 코드 중 일부를 보여주는 코드 스 니펫입니다.
controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.enableDamping = true;
controls.dampingFactor = 0.25;
controls.enableZoom = true;
controls.autoRotate = true;
사용자 정의 카메라 제어 - 마우스 기반 슬라이딩
다음은 맞춤형 카메라 컨트롤러의 예입니다. 이것은 클라이언트 윈도우 내에서 마우스의 위치를 읽은 다음 윈도우에서 마우스를 따라 움직이는 것처럼 카메라를 슬라이드시킵니다.
index.html
<html>
<head>
<title>Three.js Custom Mouse Camera Control Example</title>
<script src="/javascripts/three.js"></script>
</head>
<body>
<script src="javascripts/scene.js"></script>
</body>
</html>
scene.js
var scene, renderer, camera;
var cube;
var cameraCenter = new THREE.Vector3();
var cameraHorzLimit = 50;
var cameraVertLimit = 50;
var mouse = new THREE.Vector2();
init();
animate();
function init()
{
renderer = new THREE.WebGLRenderer( {antialias:true} );
var width = window.innerWidth;
var height = window.innerHeight;
renderer.setSize (width, height);
document.body.appendChild (renderer.domElement);
scene = new THREE.Scene();
var cubeGeometry = new THREE.BoxGeometry (10,10,10);
var cubeMaterial = new THREE.MeshBasicMaterial ({color: 0x1ec876});
cube = new THREE.Mesh (cubeGeometry, cubeMaterial);
cube.position.set (0, 0, 0);
scene.add (cube);
camera = new THREE.PerspectiveCamera (45, width/height, 1, 10000);
camera.position.y = 160;
camera.position.z = 400;
camera.lookAt (new THREE.Vector3(0,0,0));
cameraCenter.x = camera.position.x;
cameraCenter.y = camera.position.y;
//set up mouse stuff
document.addEventListener('mousemove', onDocumentMouseMove, false);
window.addEventListener('resize', onWindowResize, false);
var gridXZ = new THREE.GridHelper(100, 10);
gridXZ.setColors( new THREE.Color(0xff0000), new THREE.Color(0xffffff) );
scene.add(gridXZ);
}
function onWindowResize ()
{
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize (window.innerWidth, window.innerHeight);
}
function animate()
{
updateCamera();
requestAnimationFrame ( animate );
renderer.render (scene, camera);
}
function updateCamera() {
//offset the camera x/y based on the mouse's position in the window
camera.position.x = cameraCenter.x + (cameraHorzLimit * mouse.x);
camera.position.y = cameraCenter.y + (cameraVertLimit * mouse.y);
}
function onDocumentMouseMove(event) {
event.preventDefault();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
보시다시피, 여기 장면의 모든 객체에 대해 할 수있는 것처럼 렌더링의 animate
단계에서 카메라 위치를 업데이트하는 것입니다. 이 경우 원래의 X 및 Y 좌표에서 오프셋 된 위치에 카메라의 위치를 다시 지정하기 만하면됩니다. 이것은 쉽게 X와 Z 좌표, 또는 경로상의 점 또는 마우스의 위치와 전혀 관련이없는 전혀 다른 점일 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow