使用THREE.JS从blender导出JSON模型(包括纹理)

8
我正在使用mrdoob的Blender导出插件(io_mesh_threejs)导出至Three JS,但是导出的.js或.dae对象不包含任何对纹理贴图文件的引用。我需要以特殊的方式导出对象吗?或者,我需要以特殊的方式在Blender 2.65中应用贴图到对象中,以便导出器包含它。最后,如果没有其他方法,我能否在JS文件中手动添加纹理呢?

导出前的Blender

enter image description here


导出的JSON对象(没有引用纹理)

{

    "metadata" :
    {
        "formatVersion" : 3.1,
        "generatedBy"   : "Blender 2.65 Exporter",
        "vertices"      : 8,
        "faces"         : 6,
        "normals"       : 8,
        "colors"        : 0,
        "uvs"           : [4],
        "materials"     : 1,
        "morphTargets"  : 0,
        "bones"         : 0
    },

    "scale" : 1.000000,

    "materials" : [ {
        "DbgColor" : 15658734,
        "DbgIndex" : 0,
        "DbgName" : "Material",
        "blending" : "NormalBlending",
        "colorAmbient" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865],
        "colorDiffuse" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865],
        "colorSpecular" : [0.5, 0.5, 0.5],
        "depthTest" : true,
        "depthWrite" : true,
        "shading" : "Lambert",
        "specularCoef" : 50,
        "transparency" : 1.0,
        "transparent" : false,
        "vertexColors" : false
    }],

    "vertices" : [1,-0.988938,-1,1,-0.988938,1,-1,-0.988938,1,-1,-0.988938,-1,1,1.01106,-0.999999,0.999999,1.01106,1,-1,1.01106,1,-1,1.01106,-1],

    "morphTargets" : [],

    "normals" : [0.577349,-0.577349,-0.577349,0.577349,-0.577349,0.577349,-0.577349,-0.577349,0.577349,-0.577349,-0.577349,-0.577349,0.577349,0.577349,-0.577349,-0.577349,0.577349,-0.577349,-0.577349,0.577349,0.577349,0.577349,0.577349,0.577349],

    "colors" : [],

    "uvs" : [[1,-0,1,1,0,1,-0,0]],

    "faces" : [43,0,1,2,3,0,0,1,2,3,0,1,2,3,43,4,7,6,5,0,0,1,2,3,4,5,6,7,43,0,4,5,1,0,0,1,2,3,0,4,7,1,43,1,5,6,2,0,0,1,2,3,1,7,6,2,43,2,6,7,3,0,0,1,2,3,2,6,5,3,43,4,0,3,7,0,2,3,0,1,4,0,3,5],

    "bones" : [],

    "skinIndices" : [],

    "skinWeights" : [],

    "animation" : {}


}

加载JSON对象的代码

var object;
var loader = new THREE.JSONLoader();          

loader.load( "./quirk_logo.js", function(geometry, materials) {
     var material = new THREE.MeshFaceMaterial(materials);
     object = new THREE.Mesh(geometry, materials);

     object.scale.set(1, 1, 1);
     scene.add(object)
     render();
});
3个回答

2

我想在不安装Python的情况下运行脚本。 - Paul
1
如果您不想安装Python,可以尝试它的便携式版本(我正在使用这个版本)。下载页面 - Manhhailua

1

这与纹理有什么关系?他的问题是关于导出带有纹理的模型。 - Single Entity

1

可能与您的加载器代码有关,我正在将其与我的进行比较,我有以下代码:var modelLoader = new THREE.JSONLoader().load( "./quirk_logo.js", function ( geometry, materials ) { var material = materials[ 0 ]; var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); mesh.scale.set( 1, 1, 1 ); scene.add( mesh ); } );我唯一的猜测是您没有将材料数组设置为第一个元素,因此它会创建网格但不应用材料,如果您已经按照上面的教程操作了。如果在尝试后仍然无法解决问题,我会继续提供帮助。 - Yazuka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接