导出在 Sketchup 中创建的 3D 模型以在 Android 中使用

发布于 2024-12-12 05:36:50 字数 665 浏览 0 评论 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
    }
}

结果显示在这里 https://i.sstatic.net/KhnNz.jpg

I have a problem using opengl on android to draw a simple rectangle.
This is what I have done.

I drew a simple rectangle with sketchup. I exported the result using
a 3d-model collada .dae file. I then copied the vertices data from
the .dae (xml) file and put in an array. I copied the array in native
format to a float buffer. I then drew the triangles using stripe
mode. The result is nearly a rectangle. It is missing a triangle on
each surface.

Here is the relevant portion of code and the result.

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
    }
}

the result is shown here
https://i.sstatic.net/KhnNz.jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

说好的呢 2024-12-19 05:36:50

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

You probably have your vertexes in the wrong order in your vertex list (which could be the fault of the export). This is what I got from my quads when i had the vertices in the wrong places. You will want to build them counter-clockwise from the outside. It could also be that triangle strip is causing issues with your vertices, for an application this simple you could try GL_QUADS.

世界和平 2024-12-19 05:36:50

我让代码工作了。存在三个问题。

  1. DrawArrays 通过顶点数组向前工作。 IE。您一次从数组中提取一个元素,然后转到下一个元素。你不能在其中来回跳动。
  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
}

I got the code working. There were three problems.

  1. DrawArrays works forward through the vertex array. ie. you draw one element from the array at a time and then go to the next. You can not hop back and forth thru it.
  2. Using the offset list in the .xml file I created an array that I could use with glDrawElements where it hops around in the vertices list.
  3. You need to use unsigned short of the offset. I was using an integer and fixed which did not work.

Here is the resulting code that works. The problem was mine. Not the .xml file produced from sketchup.

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文