导出在sketchup中创建的3d模型以在Android中使用

时间:2011-10-27 13:35:51

标签: android opengl-es sketchup

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

我画了一个带草图的简单矩形。我使用导出结果 一个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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我让代码正常工作。有三个问题。

  1. DrawArrays通过顶点数组向前工作。即。你一次从数组中绘制一个元素,然后转到下一个元素。你不能来回跳来跳去。
  2. 使用.xml文件中的偏移列表,我创建了一个可以与glDrawElements一起使用的数组,它在顶点列表中跳转。
  3. 您需要使用无符号的偏移量。我使用了一个整数并修复了它不起作用。
  4. 以下是生成的代码。问题是我的。不是草图生成的.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
    }