***更新***这必须是文件及其导出方式的问题,我只是不知道那是什么问题。我已经下载了更多示例模型,它们都可以很好地渲染。
加载.obj和.mtl文件时,Three.js出现问题。
我有一堆对象以及从3ds导出的相应材质文件。我不是导出这些文件的人,也不是3D建模者,但是如果事实证明文件有问题,我可以要求建模者再次导出它们。
我已经使用THREE.js几次,但从未遇到过此问题,我正在使用以下方法加载.mtl和.obj文件:
mtlLoader.load("stands/objects/Table&Chairs.mtl", function(materials){
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.load("stands/objects/Table&Chairs.obj", function(object){
scene.add(object);
object.position.set(-5, 0, 4);
});
});
我的问题是对象加载正常,没有错误,但是什么也没显示。没有将对象渲染到场景。
如果我从其他来源下载了一些示例资产并切换了要上传的文件,而没有进行任何其他更改,则该对象将呈现。
这使我相信这可能与文件导出方式有关。
显示正在渲染的.obj的屏幕
显示示例.obj的屏幕
对于可能导致此问题的任何帮助,将不胜感激。
我已经上传了对象和材料here。
我的是桌子和椅子,例子是Tent_Poles_01文件。
答案 0 :(得分:1)
.OBJ文件的伟大之处在于,您可以在您选择的文本编辑器中打开它们,然后查看其中的内容。这将使您大致了解位置和规模:
换句话说,第一个可疑对象是您的模型被渲染到可见视口之外的某个地方。
通常,当您与3D艺术家一起工作时,您需要事先讨论要使用的比例,然后让他们很好地将模型与原点对齐。
您可以(在某种程度上)在代码中对此进行更正,但这并不实际。
mesh.geometry.center()
将使几何图形重新围绕(0,0,0)... ,但请注意,这通常不是您想要的。例如,一张桌子将在其默认居中位置的一半位置穿过地板。
要将几何比例缩放到绝对大小,请使用(伪代码)
var currentSize = new THREE.Box3().setFromObject(model).getSize();
mesh.geometry.scale(
targetWidth / currentSize.X,
targetHeight / currentSize.Y,
targetDepth / currentSize.Z)