THREE.js OBJMTLLoader-请求简单示例文件

THREE.js OBJMTLLoader-请求简单示例文件,three.js,.obj,Three.js,.obj,如a中所述,我已经学习了如何使用THREE.js OBJMTLLoader,方法是使用中使用的相同对象和材质 该示例使用了带有DDSLoader的for me复杂模型 我想加载更简单的OBJ+MTL模型,并且已经尝试了从web获得的几个免费模型。我通过进一步应用THREE.js代码(例如定义法线)成功加载了OBJ文件,但从MTL文件加载材质纹理时出现了问题 下面是我的代码的一个简单示例 //...DolphinB var posX = -3445; var posY = 750; var pos

如a中所述,我已经学习了如何使用THREE.js OBJMTLLoader,方法是使用中使用的相同对象和材质

该示例使用了带有DDSLoader的for me复杂模型

我想加载更简单的OBJ+MTL模型,并且已经尝试了从web获得的几个免费模型。我通过进一步应用THREE.js代码(例如定义法线)成功加载了OBJ文件,但从MTL文件加载材质纹理时出现了问题

下面是我的代码的一个简单示例

//...DolphinB
var posX = -3445; var posY = 750; var posZ = -100; 
var common_scale = 100;

var loader = new THREE.OBJMTLLoader();
loader.load(
   'TRI_VP_files/models/dolphin/DOLPHIN_B.obj', 
   'TRI_VP_files/models/dolphin/DOLPHIN_B.mtl', 
    function(object) 
    {
    object.position.set( posX, posY, posZ );
    scene222.add( object );
    object.scale.set(common_scale, common_scale, common_scale);
     } );
这是MTL代码

# Wavefront material library
# Tue Aug 03 07:47:56 1999
# Created with Viewpoint Interchange www.viewpoint.com

newmtl dl_body
  Ka 0 0 0
  Kd 0 0.8 0.9
  Ks 0 0 0
  illum 1
  map_Kd DOLPHIN2.JPG
我的问题


请有人告诉我一些简单的OBJ+MTL文件,这些文件已知可以通过OBJMTLLoader加载。

您可以使用以下由Mohammad Alizadeh创建的免费供私人使用的文件集。谢谢您Mohammad

它使用单个.JPG图像文件作为材质纹理的源

它使用单一材料

以下是.MTL文件的内容

# Blender MTL File: 'Hand.blend'
# Material Count: 1    
newmtl defaultMat
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
map_Kd hand_mapNew.jpg
您需要将.OBJ文件的前几行从

# Blender v2.74 (sub 0) OBJ File: 'Hand.blend'
# www.blender.org
mtllib Hand.mtl
o ZBrushPolyMesh3D
v 0.614360 0.281365 -0.675872
v 0.684894 0.445729 -0.634615

子处理

对于手动文件集,.OBJ文件中有顶点法线vn。但由于某些原因,未应用平滑。应用以下代码将产生平滑和调整光泽度,并为对象拾取设置根对象参照:-

object.traverse (  function (child)
{
    if (child instanceof THREE.Mesh) 
    {           
        child.material.shininess = 10;//range 0.1 to 30 (default) to 1000 or more, applies to Phong materials.    
        //child.userData.rootObject = object; //... see West Langley answer at http://stackoverflow.com/questions/22228203/picking-object3d-loaded-via-objmtlloader
        //... used for object picking so that, for further operations, we can select picked child object or child's rootObject.
        child.rootObject = object; //... avoids infinite loop if cloning 3D objects.    
        child.geometry.computeFaceNormals(); 
        child.geometry.computeVertexNormals();   
        //child.geometry.normalsNeedUpdate = true; //... only required if object has already been rendered.
    }
}; )
免责声明

这些技巧让我在这个特殊的场景中发挥了作用。我并不是说这是最好的做事方式。

1。反光性能可以任意大,比如1000。2.如果尚未渲染对象,则不需要normalsNeedUpdate=true。3.js r.72
usemtl defaultMat
object.traverse (  function (child)
{
    if (child instanceof THREE.Mesh) 
    {           
        child.material.shininess = 10;//range 0.1 to 30 (default) to 1000 or more, applies to Phong materials.    
        //child.userData.rootObject = object; //... see West Langley answer at http://stackoverflow.com/questions/22228203/picking-object3d-loaded-via-objmtlloader
        //... used for object picking so that, for further operations, we can select picked child object or child's rootObject.
        child.rootObject = object; //... avoids infinite loop if cloning 3D objects.    
        child.geometry.computeFaceNormals(); 
        child.geometry.computeVertexNormals();   
        //child.geometry.normalsNeedUpdate = true; //... only required if object has already been rendered.
    }
}; )