Javascript 旋转.obj文件objmtloader three.js
我对一个obj文件使用了OBJMTLLoader类,通过使用object.rotation.y-=0.5,旋转可以很好地围绕对象上的固定点进行。使用相同的代码减去更改相机位置,我将.obj文件替换为另一个文件,旋转现在以圆周运动进行,就像围绕相机一样,而不是停留在原地。知道为什么我用了同样的代码吗 谢谢 编辑:Javascript 旋转.obj文件objmtloader three.js,javascript,three.js,Javascript,Three.js,我对一个obj文件使用了OBJMTLLoader类,通过使用object.rotation.y-=0.5,旋转可以很好地围绕对象上的固定点进行。使用相同的代码减去更改相机位置,我将.obj文件替换为另一个文件,旋转现在以圆周运动进行,就像围绕相机一样,而不是停留在原地。知道为什么我用了同样的代码吗 谢谢 编辑: “摄影机和对象加载”部分用于加载的上一个对象。这很好,但未注释部分的工作方式不同。您加载的对象有一个来自model creater软件的轴心点。。。在使用three.js加载对象之前,需
“摄影机和对象加载”部分用于加载的上一个对象。这很好,但未注释部分的工作方式不同。您加载的对象有一个来自model creater软件的轴心点。。。在使用three.js加载对象之前,需要更改对象的轴心点 如果不能,您应该像我在loader callback中所做的那样:
var loader = new THREE.OBJMTLLoader();
loader.load('your_file.obj', 'your_file.mtl', function (object) {
object.traverse(function (child) {
child.centroid = new THREE.Vector3();
for (var i = 0, l = child.geometry.vertices.length; i < l; i++) {
child.centroid.add(child.geometry.vertices[i].clone());
}
child.centroid.divideScalar(child.geometry.vertices.length);
var offset = child.centroid.clone();
child.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-offset.x, -offset.y, -offset.z));
child.position.copy(child.centroid);
child.geometry.computeBoundingBox();
});
});
然后旋转对象…加载的对象有一个来自model creater软件的轴点。。。在使用three.js加载对象之前,需要更改对象的轴心点 如果不能,您应该像我在loader callback中所做的那样:
var loader = new THREE.OBJMTLLoader();
loader.load('your_file.obj', 'your_file.mtl', function (object) {
object.traverse(function (child) {
child.centroid = new THREE.Vector3();
for (var i = 0, l = child.geometry.vertices.length; i < l; i++) {
child.centroid.add(child.geometry.vertices[i].clone());
}
child.centroid.divideScalar(child.geometry.vertices.length);
var offset = child.centroid.clone();
child.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-offset.x, -offset.y, -offset.z));
child.position.copy(child.centroid);
child.geometry.computeBoundingBox();
});
});
然后旋转你的物体…你能分享更多的代码吗?在不知道上下文的情况下很难帮助。@mrdoob刚刚添加了它听起来像是您的对象几何体偏离了对象空间原点。比较边界框:var box=new THREE.Box3.setFromObject;阅读源代码,这样你就知道这个函数在做什么。@WestLangley我已经读了一遍,并检查了差异。第二个对象的框太远了。我试着将坐标设置为第一个对象的坐标,但没有成功。我以前也读过你们关于网格的答案,但我不知道如何解决这个问题。您给出的解决方案需要将网格的长方体转换为长方体的中心点。我正在尝试此操作,但对象仍在围绕某个对象旋转,而不是在旋转过程中保持不变。研究对象的层次结构,查看子对象或网格是否偏移。如果没有,那么你能发布一个简单的实例来演示这个问题吗?你能分享更多的代码吗?在不知道上下文的情况下很难帮助。@mrdoob刚刚添加了它听起来像是您的对象几何体偏离了对象空间原点。比较边界框:var box=new THREE.Box3.setFromObject;阅读源代码,这样你就知道这个函数在做什么。@WestLangley我已经读了一遍,并检查了差异。第二个对象的框太远了。我试着将坐标设置为第一个对象的坐标,但没有成功。我以前也读过你们关于网格的答案,但我不知道如何解决这个问题。您给出的解决方案需要将网格的长方体转换为长方体的中心点。我正在尝试此操作,但对象仍在围绕某个对象旋转,而不是在旋转过程中保持不变。研究对象的层次结构,查看子对象或网格是否偏移。如果没有,那么你能发布一个简单的实例来演示这个问题吗?Hi@Tezcan它说child.geometry是未定义的检查If geometry!==undefinedHi@Tezcan它说child.geometry是undefinedCheck for if geometry!==未定义