0

実際の質問:

faceVertexUvs[0]メッシュ上のマテリアルをテクスチャリングする以上の設定が必要ですか? glDrawElementsエラーを取り除く方法がわかりません。MeshPhongMaterialやなどのさまざまなマテリアルを使用してみましMeshLambertMaterialたが、率直に言って違いがわかりません。また、基礎となるジオメトリに対してcomputeVertexNormals()andを呼び出してみました。computeTangents()消防ホースのアプローチはここでは機能していません..

前の説明

三角形でテッセレートされた平面として始まるジオメトリを使用して、実行時にメッシュを構築しています。頂点の z 座標を定期的に更新してメッシュを変形させます。これはすべて正常に動作しますが、DataTexture でマテリアルを使用すると問題が発生します。

次のエラーが表示されます。

glDrawElements: attempt to access out of range elements in attribute 0

このメッセージは、ジオメトリの UV レイヤーが見つからないことを意味していると思いますが、これはベクターを挿入しようとしていないためではありません。と呼ばれるジオメトリに面をロードするコードは次のとおりですmodel

for (j=0; j<vh-1; j++) {
for (i=0; i<vw-1; i++) {

    var a = j*vw+i;
    var b = (j+1)*vw+i;
    var c = (j*vw+i+1);
    var d = (j+1)*vw+i+1;

    model.faces.push( new THREE.Face3(a,b,c) );
    model.faces.push( new THREE.Face3(c,b,d) );

    model.faceVertexUvs[0].push( [ new THREE.Vector2(0,0),
                   new THREE.Vector2(1,1),
                   new THREE.Vector2(1,0) ] );
    model.faceVertexUvs[0].push( [ new THREE.Vector2(0,0),
                   new THREE.Vector2(1,1),
                   new THREE.Vector2(1,0) ] );

}
}

次に、このモデルをマテリアルと共に faceMesh に追加します。これがシーンに追加されます。

var material = new THREE.MeshBasicMaterial();
var faceMesh = new THREE.Mesh(model, material);

このマテリアルにテクスチャを追加するのはコードの後半で、これが上記の gL エラーが表示されるときです (Chrome JavaScript コンソールで)

material.map = new THREE.DataTexture(new Uint8Array(bytes, rgbByteIdx), 
                     inputW, inputH, THREE.RGBFormat);

material.needsUpdate = true;

ジオメトリを構築faceUVsするときに加えて使用してみました。faceVertexUVsおそらく、これには MeshBasicMaterial 以外のものを使用する必要がありますか?

4

1 に答える 1

2

試行錯誤の末、思いつきました。

ここでの問題は、最初にMeshBasicMaterialテクスチャなしで設定したことです。テクスチャを追加し、needsUpdateこのマテリアルのフラグを設定した後、gL エラーがスローされました。

最初に特定のテクスチャ ( を使用ImageUtils.generateDataTexture) を使用してマテリアルを作成すると、後でテクスチャを追加するとシステムに受け入れられ、エラーは解消され、メッシュ上に絵を描くことができます。

var texture = THREE.ImageUtils.generateDataTexture(inputW, inputH, initColor );
var material = new THREE.MeshBasicMaterial( { map : texture });
var faceMesh = new THREE.Mesh(model, material);
于 2013-03-04T03:21:22.677 に答える