正投影相机基础
const width = window.innerWidth;
const height = window.innerHeight;
const k = width / height;
const s = 600;
const camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 8000);
### 正投影相机和透视投影相机区别
一句话描述,正投影相机`OrthographicCamera`和透视投影相机`PerspectiveCamera`的区别就是,透视投影可以模拟人眼观察世界的视觉效果,正投影相机不会
Canvas尺寸变化
window.onresize = function () {
const width = window.innerWidth;
const height = window.innerHeight;
renderer.setSize(width, height);
const k = width / height;
camera.left = -s*k;
camera.right = s*k;
camera.updateProjectionMatrix();
};
包围盒Box3
const scale = new THREE.Vector3()
box3.getSize(scale)
console.log('模型包围盒尺寸', scale);
const center = new THREE.Vector3()
box3.getCenter(center)
console.log('模型中心坐标', center);
包围盒使用案例
注意如果使用了`OrbitControls`,需要设置`.target`和`.lookAt()`参数是相同坐标
const controls = new OrbitControls(camera, renderer.domElement);
controls.target.set(x, y, 0);
controls.update();
相机动画
let angle = 0;
const R = 100;
function render() {
angle += 0.01;
camera.position.x = R * Math.cos(angle);
camera.position.z = R * Math.sin(angle);
renderer.render(scene, camera);
requestAnimationFrame(render);
}
render();
function render() {
angle += 0.01;
camera.position.x = R * Math.cos(angle);
camera.position.z = R * Math.sin(angle);
camera.lookAt(0,0,0);
requestAnimationFrame(render);
}
render();