【发布时间】:2020-04-26 16:44:33
【问题描述】:
我正在尝试将纹理应用于运行时创建的几何图形,从远程服务器读取二进制资产。 我创建了几何分配 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
【问题讨论】:
-
一般每个顶点都需要一个 (u,v)-vector 所以“geometry.faceVertexUvs.length 应该等于 geometry.vertices.length” 也许你可以提供一些关于你的自定义几何的代码?
-
请发布您的实际顶点数据结构。 WebGL 实现对对齐可能非常严格。
标签: dictionary three.js webgl textures