0

我在 android 上使用 opengl 绘制一个简单的矩形时遇到问题。这就是我所做的。

我用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

4

2 回答 2

1

您的顶点列表中的顶点可能顺序错误(这可能是导出的错误)。这是当我将顶点放置在错误的位置时从四边形中得到的。您将需要从外部逆时针构建它们。也可能是三角形条带导致您的顶点出现问题,对于如此简单的应用程序,您可以尝试 GL_QUADS。

于 2011-10-27T13:45:03.647 回答
0

我得到了代码工作。出现了三个问题。

  1. DrawArrays 通过顶点数组向前工作。IE。您一次从数组中绘制一个元素,然后转到下一个元素。你不能通过它来回跳跃。
  2. 使用 .xml 文件中的偏移列表,我创建了一个可以与 glDrawElements 一起使用的数组,它在顶点列表中跳跃。
  3. 您需要使用 unsigned short 的偏移量。我使用的是一个整数并修复了它不起作用。

这是有效的结果代码。问题是我的。不是从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
}
于 2011-10-28T15:16:18.230 回答