threejs纹理导致“GL错误:GL_INVALID_OPERATION:glDrawElements”

时间:2013-11-09 11:36:26

标签: map three.js textures webgl material

我尝试将纹理应用于在运行时创建的几何体,从远程服务器读取二进制资源。 我创建了几何分配UVs(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

1 个答案:

答案 0 :(得分:1)

问题解决了!!

@GuyGood:当你说每个顶点需要一个UV-Vector2时你是对的,但是说geometry.faceVertexUvs.length应该等于geometry.vertices.length ...

是错误的。 似乎facevertexUvs是一个矩阵,而不是一个数组。井,它是一个数组数组......不正确的矩阵......实际上我认为它可以用来处理多网格对象..如果facevertexUvs.length == 3,我们有3个子网格,所以3个数组......每个数组的长度都等于特定子网格的面数...每个面都知道有关定义该面的3个顶点的UV映射..

希望这是明确和有用的!

相关问题