2

プログラムでメッシュをロードするためのjsonファイルを生成しています。頂点と面は正常にレンダリングされますが、面に色を渡す方法もわかりません。

これが私が実験しているjsonファイルです:

{
    "metadata" : {
        "formatVersion" : 3
    },
    "materials" : [],
    "vertices" : [-10,10,0, -10,-10,0, 10,-10,0, 10,10,0, -10,10,10,  -10,-10,10,  10,-10,10,  10,10,10],
    "faces" : [4, 0, 1, 3, 0], //or with 0 as the first number for a plain triangle
    "normals": [],
    "colors": [0.5, 0.4, 0.3],
    "uvs": []
}

そして、そのようにロードします:

loader.load( "js/models/square.js", function(geometry) {
    var material = new THREE.MeshLambertMaterial( {
        faceColors : THREE.FaceColors,
    });
    material.side = THREE.DoubleSide;

    var mesh = new THREE.Mesh(geometry, material);
}

私の中心的な問題は、ビットマスクがどのように機能するかを見つけていることですが、ここのFACE_COLORビットhttps://github.com/mrdoob/three.js/wiki/JSON-Model-format-3.1は、それが機能するはずであることを示唆しています。助けていただければ幸いです...ありがとう!

4

1 に答える 1

5

まず、JSONファイルを正しく作成する必要があります。この最も単純な例は次のようなもので、顔の色で立方体を定義します。

{
    "metadata" : {
        "formatVersion" : 3
    },
    "materials" : [],
    "vertices" : [ -5,5,-5,  -5,-5,-5,  5,-5,-5,  5,5,-5,  -5,5,5,  -5,-5,5,  5,-5,5,  5,5,5 ],
    "faces" : [ 65,3,2,1,0,0,  65,4,5,6,7,1,  65,7,6,2,3,2,  65,0,1,5,4,3,  65,0,4,7,3,0,  65,6,5,1,2,1 ],
    "colors": [ 16711680, 65280, 255, 16776960 ],
    "normals": [],
    "uvs": []
}

この例では、各面に4つの面の色のいずれかが割り当てられています。色は10進形式で指定されます(例:0xff0000 = 16711680)。

各面のビットマスクコードは、64(面の色の場合)+ 1(クワッドの場合)=65です。

次に、頂点法線を指定していないので、必要なのはであると仮定しますMeshBasicMateral。また、「faceColors」プロパティはありません-それはvertexColorsです。また、メッシュをシーンに追加することを忘れないでください。

var loader = new THREE.JSONLoader();

loader.load( "cube.js", function( geometry ) {
    var material = new THREE.MeshBasicMaterial( {
        vertexColors : THREE.FaceColors,
    });

    var mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );
}

three.js r.53

于 2012-12-17T05:33:21.347 に答える