我是three.js 和计算机图形学的新手。所以我面临着非常简单的问题。我只想旋转立方体和轴设置为静态。如何实现它,因为现在立方体和轴正在旋转?也许我必须使用另一种类型的旋转?
我的代码:
<html>
<body>
<script type="text/javascript" src="../libs/three.js"></script>
<script type="text/javascript" src="../libs/TrackBallControls.js"></script>
<script>
var camera, controls, secene, render;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 500;
var debugaxis = function(axisLength){
//Shorten the vertex function
function v(x,y,z){
return new THREE.Vector3(x,y,z);
}
//Create axis (point1, point2, colour)
function createAxis(p1, p2, color){
var line, lineGeometry = new THREE.Geometry(),
lineMat = new THREE.LineBasicMaterial({color: color, lineWidth: 1});
lineGeometry.vertices.push(p1, p2);
line = new THREE.Line(lineGeometry, lineMat);
scene.add(line);
}
createAxis(v(-axisLength, 0, 0), v(axisLength, 0, 0), 0xFF0000);
createAxis(v(0, -axisLength, 0), v(0, axisLength, 0), 0x00FF00);
createAxis(v(0, 0, -axisLength), v(0, 0, axisLength), 0x0000FF);
};
controls = new THREE.TrackballControls(camera);
controls.addEventListener('change', render);
scene = new THREE.Scene();
debugaxis(200);
var geometry = new THREE.CubeGeometry(100,100,100);
var material = new THREE.MeshNormalMaterial({ wireFrame: false, transparent: true, opacity: 0.5});
var mesh = new THREE.Mesh( geometry, material);
scene.add(mesh);
for (var f = 0, fl = mesh.geometry.faces.length; f < fl; f++) {
var face = mesh.geometry.faces[f];
var centroid = new THREE.Vector3(0, 0, 0);
centroid.add(mesh.geometry.vertices[face.a]);
centroid.add(mesh.geometry.vertices[face.b]);
centroid.add(mesh.geometry.vertices[face.c]);
centroid.divideScalar(3);
var arrow = new THREE.ArrowHelper(
face.normal,
centroid,
25,
0x3333FF,
5,
5);
mesh.add(arrow);
}
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement);
}
function animate(){
requestAnimationFrame(animate);
controls.update();
}
function render(){
renderer.render(scene, camera);
}
</script>
</body>
</html>