
// 初始化頂點索引
//矩形要轉換為兩個三角形進行渲染,所以是6個頂點
//使用頂點索引是為了減少發送給GPU的數據,6個頂點中有兩個是重復的
//indices = [0,1,2,1,3,2]
initQuadIndices(indices) {
let count = indices.length / 6;
for (let i = 0, idx = 0; i < count; i++) {
let vertextID = i * 4;
indices[idx++] = vertextID;
indices[idx++] = vertextID+1;
indices[idx++] = vertextID+2;
indices[idx++] = vertextID+1;
indices[idx++] = vertextID+3;
indices[idx++] = vertextID+2;
}
}
//設置vDatas、uintVDatas,iDatas
//vDatas和uintVDatas指向同一片存儲區域,vDatas是按照Float32讀取,uintVDatas按照Uint32讀取
//使用vDatas來更新pos和uv
//使用uintVDatas來更新color
updateMesh (index, vertices, indices) {
this.vDatas[index] = vertices;
this.uintVDatas[index] = new Uint32Array(vertices.buffer, 0, vertices.length);
this.iDatas[index] = indices;
this.meshCount = this.vDatas.length;
}
createData (index, verticesFloats, indicesCount) {
let vertices = new Float32Array(verticesFloats);
let indices = new Uint16Array(indicesCount);
this.updateMesh(index, vertices, indices);
}
//創建四個頂點的數據
//verticesFloats:20, 單個頂點包含5個float,四個頂點就是20個
//indicesCount: 6, 切分為兩個三角形,6個頂點索引
createQuadData (index, verticesFloats, indicesCount) {
this.createData(index, verticesFloats, indicesCount);
this.initQuadIndices(this.iDatas[index]);
}