1

我正在尝试将纹理应用于运行时创建的几何图形,从远程服务器读取二进制资产。我创建了几何分配 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超出范围?

三个 JS 地图材质导致 WebGL 警告

THREEjs 在初始化的时候不能使用 JSON Model 上的素材。给我 WebGL 错误

为自定义几何加载纹理会导致“GL_INVALID_OPERATION”错误

4

1 回答 1

1

问题解决了!!

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

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

希望这是清楚和有帮助的!

于 2013-11-14T13:21:58.297 回答