为什么我需要更新uvs?

时间:2014-08-04 12:07:01

标签: three.js

我正在使用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的内容。

我知道这是一个抽象的问题,我主要是寻找一些提示或见解为什么这个黑客可能是必要的。

谢谢!

1 个答案:

答案 0 :(得分:1)

Three.js根据bufferGuessUVType中使用的纹理“猜测”是否需要uvs。如果要预分配uv缓冲区,可以使用空THREE.Texture初始化map属性,在分配映射后更新几何体等。