【问题标题】:threejs texture causes "GL ERROR :GL_INVALID_OPERATION : glDrawElements"threejs 纹理导致“GL 错误:GL_INVALID_OPERATION:glDrawElements”
【发布时间】: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


【解决方案1】:

问题解决了!!

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

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

希望这清楚且有帮助!

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多