我正在使用three.js编辑器,我从JSON格式解析一个对象。像往常一样,它首先解析材料和几何,然后我从中创建网格。解析材料时我也加载纹理。现在的问题是我必须打电话......
object.geometry.uvsNeedUpdate = true;
object.geometry.buffersNeedUpdate = true;
...纹理图像完全加载后 - 但为什么?!几何形状从未改变过,它的uvs或类似的东西也没有改变。它仍然是普通的旧几何体,但在尝试渲染时我总是得到GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2
。它只适用于这种“黑客”,尽管几何总是相同的。
在我看来,当我在创建对象后更新uvs(或根本不更新)时,它也应该可以正常工作。我没有在three.js编辑器代码中找到任何可以更新几何体或其faceVertexUvs的内容。
我知道这是一个抽象的问题,我主要是寻找一些提示或见解为什么这个黑客可能是必要的。
谢谢!
答案 0 :(得分:1)
Three.js根据bufferGuessUVType
中使用的纹理“猜测”是否需要uvs。如果要预分配uv缓冲区,可以使用空THREE.Texture
初始化map属性,在分配映射后更新几何体等。