【问题标题】:Correct format for loading vertex arrays from file从文件加载顶点数组的正确格式
【发布时间】:2010-11-30 21:54:06
【问题描述】:

在过去的几周里,我一直在敲键盘。我要做的是将文本文件中的浮点数组(GLfloat)和无符号短裤数组(GLushort)加载到objective-c中的等效数组中,以便我可以渲染包含的对象。我已将数组加载到向量对象中

vector<float> vertices;

vector<GLushort> indices;

但由于某种原因,我无法弄清楚为什么我不能让这些渲染。这是我用于呈现上述内容的代码:

glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]);
glNormalPoitner(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]);
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_SHORT, indices);

示例数组如下:

vertices: (Vx, Vy, Vz, Nx, Ny, Nz)

{10, 10, 0, 0, 0, 1,
-10, 10, 0, 0, 0, 1,
-10, -10, 0, 0, 0, 1,
10, -10, 0, 0, 0, 1};

indices: (v1, v2, v3)
{0, 1, 2,
0, 2, 3};

我要从中加载这些数组以进行渲染的文本文件如下所示:

4 //Number of Vertices
###Vertices###
v 10 10 0 0 0 1
v -10 10 0 0 0 1
v -10 -10 0 0 0 1
v 10 -10 0 0 0 1
###Object1###
2 //Number of faces
f 0 1 2
f 3 4 5

矢量对象是最好的方法吗?如果不是,那是什么?我做错了什么,这些不会呈现?谢谢。

【问题讨论】:

  • “我无法渲染这些”。相反,你得到......什么?碰撞?黑屏?
  • 对不起,我没有澄清,它只是没有渲染任何东西,除了我的 clearcolor 背景。就像我注释掉了我的 glDrawElements 行一样。说到这,对于我正在尝试做的事情,有没有比 glDrawElements 更有效的渲染方式?

标签: iphone objective-c opengl-es objective-c++ vertex-array


【解决方案1】:

您使用 GL_TRIANGLES 来指定顶点格式。

请参阅有关 GL_TRIANGLES 的图表,您的格式错误。 而且,我更喜欢使用 GL_TRIANGLE_STRIP 格式。它需要很少的顶点。

【讨论】:

  • 我终于让它工作了,对于 glDrawElements 的最后一个参数,它似乎想要我的索引向量的地址。我正在从 OBJ 文件加载几何图形,那么如果几何图形已经创建,我将如何使用三角形条来渲染几何图形?我不反对在桌面上编写一个预处理器,它可以重新排序索引以利用三角形条带,只是不知道从哪里开始......
  • 使用您帖子中的顶点,我用 (x,y) 显示顶点。顶点流可以是 (10, 10) -> (-10, 10) -> (10, -10) -> (-10, -10)。
  • 我可以通过在我的几何预处理器中编写一个优化例程来查找重复顶点、消除重复并调整索引指针来实现相同的目标。似乎唯一的区别是顶点可以与三角形条重用,但不能与三角形一起使用。为什么它不会像三角形条带一样快或几乎一样快?
  • 如果你的格式是GL_TRIANGLES,那么我认为格式不会比GL_TRIANGLE_STRIP慢。也许您可以测试它们并将效率与仪器进行比较。因为您的帖子只有 4 个顶点,所以我认为它们的格式不适合我提供的图表中的任何格式。
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多