在Three.js中,相機(Camera)是用于定義視圖和渲染場景的一個關鍵組件。相機決定了你從哪個角度和位置觀察場景中的物體,以及如何呈現這些物體。Three.js 提供了幾種不同類型的相機,每種相機都有其特定的用途和特性。以下是Three.js中常用的相機類型及其特點:
常見的相機類型
PerspectiveCamera(透視相機):
模擬人類眼睛的視角,具有透視效果,遠處的物體顯得較小。
常用于3D場景中,以提供更真實的視覺體驗。
構造函數參數:PerspectiveCamera(fov, aspect, near, far)
fov(視野):垂直視野角度,以度為單位。
aspect(縱橫比):通常是畫布的寬高比。
near(近剪切面):攝像機到近剪切面的距離。
far(遠剪切面):攝像機到遠剪切面的距離。
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 5);
OrthographicCamera(正交相機):
不具有透視效果,平行投影,遠處的物體不會顯得較小。
常用于2D場景或需要精確測量的場景。
構造函數參數:OrthographicCamera(left, right, top, bottom, near, far)
left、right、top、bottom:定義視景體的邊界。
near(近剪切面):攝像機到近剪切面的距離。
far(遠剪切面):攝像機到遠剪切面的距離。
const aspect = window.innerWidth / window.innerHeight;
const camera = new THREE.OrthographicCamera(-aspect * 5, aspect * 5, 5, -5, 0.1, 1000);
camera.position.set(0, 0, 5);
相機的基本操作
設置位置:
使用 position 屬性設置相機的位置。
camera.position.set(x, y, z);
看向目標:
使用 lookAt 方法設置相機的朝向。
camera.lookAt(new THREE.Vector3(0, 0, 0));
更新投影矩陣:
在修改相機參數后,調用 updateProjectionMatrix 方法更新相機的投影矩陣。
camera.updateProjectionMatrix();
創建一個簡單的Three.js場景并使用透視相機
// 創建場景
const scene = new THREE.Scene();// 創建透視相機
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;// 創建渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);// 創建幾何體和材質
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });// 創建網格對象并添加到場景中
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);// 渲染循環
function animate() {requestAnimationFrame(animate);// 旋轉立方體cube.rotation.x += 0.01;cube.rotation.y += 0.01;// 渲染場景renderer.render(scene, camera);
}animate();