实际问题:
faceVertexUvs[0]
除了在网格上设置材质之外,我还需要设置更多内容吗?我不知道如何摆脱glDrawElements
错误。我尝试过使用不同的材料,例如MeshPhongMaterial
和MeshLambertMaterial
,但坦率地说,我不确定有什么区别。我也尝试过调用我computeVertexNormals()
的computeTangents()
底层几何图形。消防水带方法在这里不起作用..
以前的描述
我在运行时使用以三角形镶嵌平面开始的几何图形构建网格。我通过定期更新顶点的 z 坐标来使网格变形。这一切都很好,但是我在使用带有 DataTexture 的材质时遇到了问题。
我收到此错误:
glDrawElements: attempt to access out of range elements in attribute 0
我认为此消息意味着它无法找到我的几何图形的 UV 层,但这并不是因为缺少尝试插入向量。这是我将面加载到我的几何中的代码,称为model
for (j=0; j<vh-1; j++) {
for (i=0; i<vw-1; i++) {
var a = j*vw+i;
var b = (j+1)*vw+i;
var c = (j*vw+i+1);
var d = (j+1)*vw+i+1;
model.faces.push( new THREE.Face3(a,b,c) );
model.faces.push( new THREE.Face3(c,b,d) );
model.faceVertexUvs[0].push( [ new THREE.Vector2(0,0),
new THREE.Vector2(1,1),
new THREE.Vector2(1,0) ] );
model.faceVertexUvs[0].push( [ new THREE.Vector2(0,0),
new THREE.Vector2(1,1),
new THREE.Vector2(1,0) ] );
}
}
然后我将这个模型和一个材质一起添加到一个 faceMesh 中,然后将它添加到场景中:
var material = new THREE.MeshBasicMaterial();
var faceMesh = new THREE.Mesh(model, material);
稍后在代码中我向此材质添加纹理,此时出现上述 gL 错误(在 Chrome javascript 控制台中)
material.map = new THREE.DataTexture(new Uint8Array(bytes, rgbByteIdx),
inputW, inputH, THREE.RGBFormat);
material.needsUpdate = true;
faceUVs
除了faceVertexUVs
在构建几何图形时,我还尝试过使用。也许我需要为此使用 MeshBasicMaterial 以外的东西?