實際的問題:應用一個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之外的其他東西?