我试图围绕一个点旋转一个物体(绿色)(蓝色) 在three.js
正如您在图像上看到的那样,绿色物体围绕红点(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);
但结果并没有那么明显
提前致谢
答案 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
最简单的选项可能是让绿色物体成为蓝点的子物并旋转蓝点。如果你不想旋转蓝点,只需将一个不可见的物体放在蓝点的位置,使绿色物体成为不可见物体的子物,并旋转不可见的物体。