4

Blender からテクスチャのあるオブジェクトをエクスポートしようとしています。エクスポートされた JSON は次のようになります。

 {

    "metadata" :
    {
        "formatVersion" : 3.1,
        "generatedBy"   : "Blender 2.66 Exporter",
        "vertices"      : 8,
        "faces"         : 6,
        "normals"       : 8,
        "colors"        : 0,
        "uvs"           : [],
        "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.0, 0.0, 0.0],
        "depthTest" : true,
        "depthWrite" : true,
        "mapDiffuse" : "unicorn.jpg",
        "mapDiffuseWrap" : ["repeat", "repeat"],
        "shading" : "Lambert",
        "specularCoef" : 50,
        "transparency" : 1.0,
        "transparent" : false,
        "vertexColors" : false
    }],

    "vertices" : [1,-1,-1,1,-1,1,-1,-1,1,-0.999999,-1,-1,1,1,-0.999999,0.999999,1,1,-1,1,0.999999,-1,1,-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" : [],

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

    "bones" : [],

    "skinIndices" : [],

    "skinWeights" : [],

    "animation" : {}


}

私のJsonローダー:

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

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

    object.scale.set(1, 1, 1);
    scene.add(object)

});

ローダーは、「未定義のプロパティ 'uniforms' を読み取れません」という例外をスローします。エクスポートされた JSON を正しく動作させるには、他のユーザーが変更する必要があることがわかりました。「uniforms」プロパティが何に使用されているか知っている人はいますか? これを JSON で定義する必要がありますか?

ありがとう!

4

2 に答える 2

6

あなたのmaterial変数は使用されていません。これを行う:

object = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );

また、テクスチャを適用できるようにする場合は、ジオメトリに UV が必要になります。


編集: 新しいパターンがあります。マテリアルの配列がある場合、次のようにマテリアル配列をMeshコンストラクタに直接渡すことができます。

object = new THREE.Mesh( geometry, materials );

three.js r.87

于 2013-06-30T23:31:36.540 に答える