実際の質問:
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 以外のものを使用する必要がありますか?