2011-10-27 33 views
0

我在android上使用opengl绘制一个简单的矩形时出现问题。 这就是我所做的。导出在sketchup中创建的3D模型以便在Android中使用

我画了一个简单的矩形与sketchup。我使用 导出了一个3d模型collada .dae文件的结果。然后,我将顶层数据从 复制.dae(xml)文件并放入一个数组中。我将数组以原生 格式复制到浮点缓冲区。然后我使用条纹 模式画出三角形。结果几乎是一个矩形。它缺少每个表面上的 三角形。

以下是代码和结果的相关部分。

public void draw(GL10 gl) { 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 
    // Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
    for (int i=0; i<108/4; i=i+4) { 
     myDrawColor(gl,i); 
     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,i,4);// mode, first, count 
    } 
} 

结果这里 http://imgur.com/a/o3HTP

回答

1

显示你可能有错误的顺序的顶点在你的顶点列表(这可能是出口的故障)。这是我从四边形中得到的,当我把顶点放在错误的地方时。你会想从外面逆时针方向建立它们。也可能是三角形条带引起顶点问题,对于一个简单的应用程序,您可以尝试GL_QUADS。

0

我得到的代码工作。有三个问题。

  1. DrawArrays向前贯穿顶点数组。即。您一次从数组中取出一个元素,然后转到下一个元素。你不能来回穿过它。
  2. 在.xml文件中使用偏移量列表我创建了一个数组,我可以在glDrawElements中使用它在顶点列表中跳跃的位置。
  3. 您需要使用无符号的偏移量。我正在使用一个整数和固定哪个不起作用。

这是生成的代码。问题是我的。不是从sketchup生成的.xml文件。

public void draw(GL10 gl) { 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorsBuffer); 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
// Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
    gl.glDrawElements(GL10.GL_TRIANGLES, myoffsets.length, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer); // mode, count, type, indices 
}