实际的问题:应用一个DataTexture到程序生成的网格在three.js所
我是否需要设置比faceVertexUvs[0]
更多的纹理在网格中的材料?我不知道如何摆脱glDrawElements
错误。我曾尝试使用不同的材质,例如MeshPhongMaterial
和MeshLambertMaterial
,但坦率地说,我不确定它们有什么不同。我也试着在底层几何图形上调用computeVertexNormals()
和computeTangents()
。流水的做法是行不通的在这里..
前面的描述
我在运行时使用开始作为一个三角形tesselated平面几何图形建立网格。我通过周期性地更新顶点的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;
我已经使用试图除了构建几何时的faceVertexUVs
。也许我需要为此使用除MeshBasicMaterial之外的其他东西?