1

ライト マップ用の jpeg ファイルを読み込んでいます。 var texture = new THREE.ImageUtils.loadTexture("textures/metal.jpg");
次に、THREE.MeshPhongMaterial にテクスチャを適用します。

var frontMaterial = new THREE.MeshPhongMaterial( {
         color: 0xfade7e,
         specular: 0xffffff,
         ambient: 0xaa0000,
         lightMap:texture
    } )

完全なエラーメッセージはWebGLRenderingContext: GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2

ここで何か問題がありますか?すべてのブラウザでエラーが発生します。Three.js r.56

4

2 に答える 2

1

このスレッドの@alteredq で説明されているように、LightMapには 2 番目の UV セットが必要です。

ライトマップのポイントは、他のテクスチャとは独立して存在できるため、他のテクスチャがより詳細になる可能性があることです。ライトマップは、独自の UV 座標セットを使用します (通常、アーティストが作成したプライマリ UV セットとは対照的に、何らかのライト ベイク ソリューションによって自動生成されます)。

他のすべてのものと同じ UV を持つライトマップを使用することは、あまり意味がありません。ライト マップをカラー マップと一緒にベイクするだけで、テクスチャ コストを抑えて基本的に同じ結果を得ることができるからです (これはたとえば Rage が使用するもので、見た目は素晴らしいですが、大量のテクスチャが必要です)。

また、ライトマップは加法的ではなく乗法的でなければなりません。ライトマップの主な使用例は、事前にベイクされたシャドウとアンビエント オクルージョンです。そのため、物事を暗くできる必要があります。

したがって、質問に対する答えgeometry.faceVertexUvs[0]は、通常の UV セットが含まれているということです。ジオメトリに追加する必要がありますgeometry.faceVertexUvs[1]

three.js r.56

于 2013-02-28T16:09:38.837 に答える