three.js - 如何在三个 JS 中更改多个视图的相机位置
问题描述
我尝试在按钮单击中更改相机视图(例如:前视图、左视图、右视图、后视图、底视图和顶视图)。我通过更改每个视图的相机位置来实现,我担心如果相机位置或网格位置发生变化会怎样。我已将网格位置指定给初始视图中的相机位置,并且网格从场景中消失了。
那么是否有任何替代方法可以在不硬编码相机位置的情况下实现这一目标。
请帮我解决这个问题。
这是小提琴https://jsfiddle.net/8L10qkzt/1/和我的一段代码
var camera, scene, renderer;
var views;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
camera.position.z = 1;
scene = new THREE.Scene();
var geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2);
var material = new THREE.MeshNormalMaterial();
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
setTimeout(() => {
controls.enableDamping = false;
controls.reset();
}, 5000);
document.querySelector('#frontView').addEventListener('click', () => {
console.log("frontview");
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = 1;
scene.add(mesh);
controls.update();
render();
});
document.querySelector('#sideView').addEventListener('click', () => {
console.log("Side View");
camera.position.x = 1;
camera.position.y = 1;
camera.position.z = 1;
scene.add(mesh);
controls.update();
render();
});
document.querySelector('#backView').addEventListener('click', () => {
console.log("Back View");
});
}
function render() {
for (var ii = 0; ii < views; ++ii) {
var view = views[ii];
var camera = view.camera;
view.updateCamera(camera, scene, mouseX, mouseY);
var left = Math.floor(windowWidth * view.left);
var top = Math.floor(windowHeight * view.top);
var width = Math.floor(windowWidth * view.width);
var height = Math.floor(windowHeight * view.height);
renderer.setViewport(left, top, width, height);
renderer.setScissor(left, top, width, height);
renderer.setScissorTest(true);
renderer.setClearColor(view.background);
camera.aspect = width / height;
camera.updateProjectionMatrix();
renderer.render(scene, camera);
}
}
function animate() {
render();
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
解决方案
推荐阅读
- c++ - 将 BMP 文件读入数组
- java - Dynamo DB ORM 映射与 Spring DataJPA
- pyspark - 展平 Json 键,Pyspark 中的值
- pkcs#11 - 如何使用 IAIK PKCS#11 Wrapper 执行 ECDH
- sorting - 具有可编辑列的 Vuetify 数据表 - 禁用排序
- html - Sticky Header 的问题,其下方的内容未显示(React,Ant Design)
- python-3.x - 在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误
- typescript - Firebase 存储没有名为 useStorageEmulator 的导出
- python - 在 networkx 图中查找孤岛
- javascript - 有没有简单的方法来获取 cookie 的“值”并使用 python 将其保存在 .txt 文件中?