1

リモート サーバーからバイナリ アセットを読み取って、実行時に作成されたジオメトリにテクスチャを適用しようとしています。UV (geometry.faceVertexUvs = uvs;)、法線 (face.vertexNormals.push(...))、接線 (face.vertexTangents.push(...)) を割り当てるジオメトリを作成します。

基本的なマテリアルを使用してメッシュを作成しようとすると問題はありませんが、そのジオメトリを使用してメッシュを作成し、テクスチャを適用しようとすると、webgl にジオメトリが表示されず、次の警告が表示されます。

[.WebGLRenderingContext]GL エラー:GL_INVALID_OPERATION:glDrawElements:属性 1 の範囲外の頂点にアクセスしようとしています

何が起こっているのか誰か知っていますか?THREE.Sphere を使用すると、実際にテクスチャを適用できるため、ジオメトリに問題があると思います。

しかし、テクスチャを適用するには UV が必要だとみんなに言われ、UV を持っています。

faceVertexUvs が間違っていると思います。

本当の問題は、geometry.faceVertexUvs.length が geometry.vertices.length と等しくなければならないか、または geometry.faces.length と等しくなければならないかということです。

どうもありがとうございました。

PS: 私はすでに次の投稿を読みました

WebGL drawElements が範囲外ですか?

3 つの JS マップ マテリアルにより WebGL 警告が発生する

THREEjs は、初期化時に JSON モデルのマテリアルを使用できません。WebGL エラーが表示される

カスタム ジオメトリのテクスチャをロードすると、「GL_INVALID_OPERATION」エラーが発生する

4

1 に答える 1

1

問題が解決しました!!

@GuyGood:すべての頂点にUV-Vector2が必要だと言うのは正しいですが、geometry.faceVertexUvs.lengthがgeometry.vertices.lengthと等しくなければならないというのは間違っています...

facevertexUvs は配列ではなく行列のようです..まあ、それは配列の配列です..正しくは行列ではありません..実際、マルチメッシュオブジェクトの処理に使用できると思います..if facevertexUvs.length == 3、3 つのサブメッシュがあるため、3 つの配列..それぞれの長さは、特定のサブメッシュの面の数と同じです..そして、すべての面は、その面を定義する 3 つの頂点に関する UV マッピングを認識しています..

これが明確で役立つことを願っています!!

于 2013-11-14T13:21:58.297 に答える