我正在尝试将纹理应用于运行时创建的几何,并从远程服务器读取二进制资产。我创建分配UV(geometry.faceVertexUvs = uvs;),法线(face.vertexNormals.push(...))和切线(face.vertexTangents.push(...))的几何。
如果尝试使用基本材料创建网格,没有问题,但是当我使用该几何形状创建网格并尝试应用纹理时,webgl不会显示任何几何形状,并且会出现此警告:] >
[。WebGLRenderingContext] GL错误:GL_INVALID_OPERATION:glDrawElements:尝试访问属性1中超出范围的顶点]
有人知道发生了什么吗?我认为我的几何图形有问题,因为如果使用THREE.Sphere,我实际上可以应用纹理。
但是每个人都告诉我,要应用纹理,我需要UV,并且我有。
我认为我的faceVertexUvs错误。
真正的问题是:geometry.faceVertexUvs.length应该等于geometry.vertices.length,或者应该等于geometry.faces.length?
非常感谢。
PS:我已经阅读了以下帖子
WebGL drawElements out of range?
Three JS Map Material causes WebGL Warning
THREEjs can't use the material on the JSON Model when initializing. Gives me WebGL errors
Loading a texture for a custom geometry causes “GL_INVALID_OPERATION” error
我正在尝试将纹理应用于运行时创建的几何,并从远程服务器读取二进制资产。我创建了分配UV(geometry.faceVertexUvs = uvs;),法线(face ....
问题已解决!
@@ GuyGood:说每个顶点都需要UV-Vector2是正确的,但是说geometry.faceVertexUvs.length应该等于geometry.vertices.length ...是错误的。
似乎facevertexUvs是一个矩阵,而不是一个数组..好,它是一个数组的数组..不正确是一个矩阵..事实上,我认为它可以用于处理多网格对象。.如果facevertexUvs .length == 3,我们有3个子网格,所以3个数组..每个数组的长度等于特定子网格的面数..每个面都知道关于定义该面的3个顶点的UV映射。 。