尝试绘制从 .obj 文件加载的立方体时,所有三角形共享一个点。此外,并非所有三角形似乎都在渲染。
我注意到更改 glDrawElements 的顶点计数允许绘制其他三角形,但我不确定为什么点数会大于正在使用的索引数。
我已经检查了文件(似乎)是否与调试器一起正确加载,因为:在模型对象类“vCoords”中包含:
{
1.0, 1.0, 1.0,
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0
}
每个材料组都有 6 个索引,这些索引从 obj 文件中偏移 -1。(.obj 指数从 1 开始,而不是 0)
每个材料组的索引都在单独的行上(在绘制调用期间也从调试器中提取)
{ 3, 6, 7, 3, 0, 6 } //yellow
{ 0, 5, 6, 0, 2, 5 } //blue
{ 5, 7, 6, 5, 4, 7 } //purple
{ 2, 4, 5, 2, 1, 4 } //red
{ 1, 7, 4, 1, 3, 7 } //white
{ 0, 1, 2, 0, 3, 1 } //light green
在模型对象类中:
public void draw(float[] mvpm, GLProgram program){
int mvpmH = program.getUniformLocation("mvpm");
GLES20.glEnableVertexAttribArray(posH);
GLES20.glVertexAttribPointer(
posH,
COORDS_PER_VERTEX,
GLES20.GL_FLOAT,
false,
COORDS_PER_VERTEX*Float.BYTES,
vCoords);
GLES20.glUniformMatrix4fv(mvpmH, 1, false, mvpm,0 );
GLErrorLogger.check();
for(MaterialGroup materialGroup : groups){
materialGroup.draw(program);
}
GLES20.glDisableVertexAttribArray(posH);
GLErrorLogger.check();
}
在“材料组”类中:
public void draw(GLProgram program){
GLErrorLogger.check();
int colorH = program.getUniformAttribLocation("vColor");
GLErrorLogger.check();
GLES20.glUniform4fv(colorH, 1, material.diffuse, 0);
GLErrorLogger.check();
//GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, points);
GLES20.glDrawElements(GLES20.GL_TRIANGLES, iv.limit(),
GLES20.GL_UNSIGNED_SHORT, iv);
GLErrorLogger.check();
}
iv 是索引缓冲区 v坐标是包含所有顶点的缓冲区
当前结果:当前渲染问题
目标:立方体的外观
编辑 1:修复了格式问题
慕容3067478
相关分类