Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 旋转.obj文件objmtloader three.js_Javascript_Three.js - Fatal编程技术网

Javascript 旋转.obj文件objmtloader three.js

Javascript 旋转.obj文件objmtloader three.js,javascript,three.js,Javascript,Three.js,我对一个obj文件使用了OBJMTLLoader类,通过使用object.rotation.y-=0.5,旋转可以很好地围绕对象上的固定点进行。使用相同的代码减去更改相机位置,我将.obj文件替换为另一个文件,旋转现在以圆周运动进行,就像围绕相机一样,而不是停留在原地。知道为什么我用了同样的代码吗 谢谢 编辑: “摄影机和对象加载”部分用于加载的上一个对象。这很好,但未注释部分的工作方式不同。您加载的对象有一个来自model creater软件的轴心点。。。在使用three.js加载对象之前,需

我对一个obj文件使用了OBJMTLLoader类,通过使用object.rotation.y-=0.5,旋转可以很好地围绕对象上的固定点进行。使用相同的代码减去更改相机位置,我将.obj文件替换为另一个文件,旋转现在以圆周运动进行,就像围绕相机一样,而不是停留在原地。知道为什么我用了同样的代码吗

谢谢

编辑:


“摄影机和对象加载”部分用于加载的上一个对象。这很好,但未注释部分的工作方式不同。

您加载的对象有一个来自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!==未定义