我昨天询问了如何在浏览器中绘制 3D 对象,能够用鼠标操作它们,并确保它在每个浏览器中都能正常工作。现在我正在使用three.js,我很高兴,因为它确实有效。
我能够理解基本教程,绘制我的第一个场景并旋转第一个立方体等。
现在我希望能够用鼠标旋转整个场景,谷歌搜索并找到了这个链接。在示例中工作正常,我尝试复制示例。当前代码如下所示:
<html>
<head>
<title>My first Three.js app</title>
<style>canvas { width: 100%; height: 100% }</style>
</head>
<body>
<script src="three.min.js"></script>
<script src="TrackballControls.js"></script>
<script type="text/javascript">
// Variables
var scene, camera, controls, renderer;
var geometry, material, cube;
init();
animate();
render();
function init() {
// Scene, camera
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 500, window.innerWidth / window.innerHeight, 0.1, 1000 );
// Mouse controls
controls = new THREE.TrackballControls(camera);
controls.rotateSpeed = 1.0;
controls.zoomSpeed = 1.2;
controls.panSpeed = 0.8;
controls.noZoom = false;
controls.noPan = false;
controls.staticMoving = true;
controls.dynamicDampingFactor = 0.3;
controls.keys = [ 65, 83, 68 ];
controls.addEventListener('change',test,false);
// Renderer
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
// Basic cube to show
geometry = new THREE.CubeGeometry(10,10,10);
material = new THREE.MeshBasicMaterial({color:0x00ff00});
cube = new THREE.Mesh(geometry);
scene.add(cube);
camera.position.z = 10;
}
function test() {
alert("hi");
render();
}
function animate() {
requestAnimationFrame(render);
controls.update();
}
function render() {
renderer.render(scene, camera);
//cube.rotation.x += 0.1;
//cube.rotation.y += 0.1;
}
</script>
</body>
但它不起作用。测试输出“hi”只出现一次。使用鼠标时它应该经常出现。我试图完成的是 controls.addEventListener('change',test,false); 查看鼠标是否有任何变化(位置、按键等),然后调用新的渲染帧。在示例(示例)中,它以某种方式完成了我想要它做的事情。
我在这里做错了什么?我只想能够通过鼠标拖动来旋转相机。是的,我对此完全陌生。现在只需阅读 2 小时。
提前致谢。