【问题标题】:OpenGL not displaying indicies correclty for cube?OpenGL没有正确显示立方体的索引?
【发布时间】:2020-09-16 12:10:30
【问题描述】:

我正在自学 opengl(在 c++ 中),我想通了,得到了一组可以制作立方体的索引:

GLushort indicies[] =
{
    2, 0, 1,
    1, 2, 3,
    3, 1, 4,
    5, 1, 4,
    4, 5, 7,
    7, 5, 6,
    0, 7, 6,
    0, 7, 2,
    7, 0, 1,
    1, 7, 4,
    6, 5, 3,
    6, 3, 2
};

现在,我正在尝试从立方体的搅拌机中加载 obj 文件,这些是它给我的指示:

GLushort indicies[] =
{
    5,3,1,
    3,8,4,
    7,6,8,
    2,8,6,
    1,4,2,
    5,2,6,
    5,7,3,
    3,7,8,
    7,5,6,
    2,4,8,
    1,3,4,
    5,1,2
};

根据我的理解,你的索引的顺序并不重要,只要每组三个组成一个三角形。但是,当我运行搅拌机导出的 obj 文件给我的内容时,我的立方体全乱了。我虽然可能索引必须以 0 为底而不是以 1 为底,所以我从每个索引中减去 1 以使它们以 0 为底:

GLushort indicies[] =
{
    4,2,0,
    2,7,3,
    6,5,7,
    1,7,5,
    0,3,1,
    4,1,5,
    4,6,2,
    2,6,7,
    6,4,5,
    1,3,7,
    0,2,3,
    4,0,1
};

我的立方体稍微好一点,但底部仍然看起来像这样:

我错过了什么?任何指标的组合,不管你怎么想,只要每组三个组成一个三角形,难道不应该起作用吗?

【问题讨论】:

  • 如果你也给我们顶点位置数组会容易得多。
  • 是顶点。我有不同的顶点位置从什么搅拌机什么设置。感谢您为我指明正确的方向。

标签: c++ opengl graphics rendering object-files


【解决方案1】:

你的立方体,在 Blender 导出中,是这样的(或者它的一些同构)

  3----7
 /    /|
0----1 |
|    | 6
|    |/
4----5

后面有 2 个。

(4,2,0) 是左侧的一半。 (2,7,3) 是后面的一半。 (6,5,7) 是右侧的一半,依此类推。

但是,您的顶点没有意义。假设这是第一个三角形

0----1
|   /
|/
2

那么你就有了

0----1
|   /|
|/   |
2----3

但请注意,(2,0,1) 是顺时针方向,(1,2,3) 是逆时针方向。 OpenGL 与大多数 3D 系统一样,只会将 CW 或 CCW 三角形视为正面,而不会显示背面的三角形。

这是第一个要解决的问题。确保所有三角形都是顺时针或所有三角形都是逆时针。

【讨论】:

  • 我发现这是顶点位置,因为它们与搅拌机的不匹配。不过,我也感谢您对这个潜在问题的洞察力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多