三个J,改变旋转点

时间:2015-02-18 17:19:12

标签: rotation three.js

我试图围绕一个点旋转一个物体(绿色)(蓝色) 在three.js

enter image description here

正如您在图像上看到的那样,绿色物体围绕红点(0,0,0)旋转

第一个问题:如何找到蓝点的坐标? 第二:如何围绕蓝点旋转绿色物体?

(在场景中,有3个不同的对象,第一个指向红点,第二个指向蓝色,第三个指向绿色。

loader.load("models/socle.obj", "models/socle.mtl", function(geometry) {
scene.add( geometry );
}, onProgress, onError); // Red OBJ

loader.load("models/motor1.obj", "models/motor1.mtl", function(geometry) {
scene.add( geometry );
}, onProgress, onError);

loader.load("models/motor12.obj", "models/motor12.mtl", function(geometry) {
scene.add( geometry );
}, onProgress, onError); // BLUE


loader.load("models/motor13.obj", "models/motor13.mtl", function(geometry) {
//geometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 0, 0 ) );

geometry.rotation.z = 0.17; // ~10 degrees
scene.add( geometry );
}, onProgress, onError); // RED

编辑: 我直接从搅拌机找到了蓝点的坐标:16,0,0 我试过了:

loader.load("models/motor12.obj", "models/motor12.mtl", function(mesh) {
mesh.applyMatrix( new THREE.Matrix4().makeTranslation(16, 0, 0 ));


mesh.rotation.z = 0.17;
scene.add( mesh );
}, onProgress, onError);

但结果并没有那么明显

提前致谢

1 个答案:

答案 0 :(得分:1)

首先是一个挑剔:我会像这样重写你的回调:

loader.load("models/motor12.obj", "models/motor12.mtl",     function(mesh) {
    scene.add( mesh );
}, onProgress, onError); // BLUE

加载程序不会提交THREE.geometry,它会提交THREE.Object3D,例如一个网格。你应该清楚两者之间的区别。

对于第一个问题,您可以通过查看其位置对象找到蓝色的位置(坐标)。即mesh.position.x mesh.position.y mesh.position.z。

对于第二个问题,有多种方法可以做到这一点。前段时间我写了一篇博客文章,详细说明了这些问题:在three.js中旋转几何和网格的各种选项和问题:http://rwoodley.org/?p=1073

最简单的选项可能是让绿色物体成为蓝点的子物并旋转蓝点。如果你不想旋转蓝点,只需将一个不可见的物体放在蓝点的位置,使绿色物体成为不可见物体的子物,并旋转不可见的物体。