gpt4 book ai didi

c - 如何在(旧)opengl (2.4) 中按程序绘制(超/n-)立方体

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:46 26 4
gpt4 key购买 nike

这几个星期以来一直困扰着我,我没有结束对它的研究,因为我目前重载并且它让我落后于第一年的 CS (opengl) 大学类(class),这首先让我研究了这个:如何只用一个 for 循环绘制立方体的所有面。

练习要求我们列出一个正方形的所有顶点的坐标,然后是一个立方体的所有顶点的坐标,然后是绘制一个。我很快注意到,因为它是一个立方体,并且所有长度都相等,因此映射到二进制。我注意到方形顶点坐标自然映射到 gray code我以前在第一学期学习过数字电子学。我想知道它是否在为立方体做些什么,实际上它正在遍历所有连续的顶点,然后我发现它被称为 hamiltonian path。或 eulerian cycle (我不确定,我看到链接到这些页面上的 snake in a box 问题,包括灰色代码),但它不允许我计算每个(最好是连续的,所以我可以使用 GL_QUADS 甚至 GL_QUAD_STRIP)面为了分解我绘制的立方体(虽然它应该允许我计算一个——我猜——所有线的特别排序的数组,也许然后我可以从那里计算每个面?)。

我也尝试用 opengl 转换来做,因为我们在类(class)中继续学习它们,因为我猜它可能会将更多计算推迟到 gpu 而不是 cpu,并且几乎成功了,但我的 for 循环需要 8 次迭代所以某处有 2 个无用的隐藏面孔:

void
face (void)
{
glPushMatrix();
{
glTranslatef(0, 0, 0.5);
glRectf(-0.5, -0.5, 0.5, 0.5);
}
glPopMatrix();
}

void
cube (void)
{
for (unsigned int i=0; i < 8 ; ++i)
{
glColor3f(!(i&4), !(i&2), !(i&1));
face();
glRotatef(180, !!(i&4), !!(i&2), !!(i&1));
}
}

我有点想继续我的研究,尽管我没有时间,而且通常最终失败的想法经常在我脑海中浮现。现在,每次我被要求为某物画一个立方体时,我都会花 1 个多小时继续这个。

还有一点让我激动的是,如果我成功地分解立方体的过程计算,这可能是从维度的概念中抽象出来的,然后将相同的算法推广到第 n 个维度应该很容易,从而给出一个简单的,绘制超立方体或任何超立方体的自然而简单的方法……这与我经常进行的长期实验相匹配,试图概括在第 n 维给我的所有东西(当他们要求绘制一个二维螺旋)。

PS:关于维度空间、n 维、顶点分布、线、面的有序分布,以及与格雷码的关系,我是否也应该在 math.stackexchange.com 上提问?

最佳答案

通过围绕 x 轴和 y 轴交替旋转 90 度可以生成立方体的 6 个面:

+---+
| 1 |
+---+---+
| 2 | 3 |
+---+---+---+
| 4 | 5 |
+---+---+
| 6 |
+---+

这可以这样编码:

for( int i=0; i<6; ++i)
{
glColor3f(!(i&4), !(i&2), !(i&1));
face();
glRotatef(90.0f, (float)(i%2), (float)(1-(i%2)), 0.0f);
}

预览:

void face (void)
{
glPushMatrix();
glTranslatef(0, 0, 0.5);
glRectf(-0.3, -0.3, 0.3, 0.3);
glPopMatrix();
}

cube



下面给出了类似的结果。它与上面的不一样,因为立方体的边也围绕它们的法 vector 扭曲。

glRotatef(180.0f, (float)(i%2), (float)(1-(i%2)), 1.0f);

关于c - 如何在(旧)opengl (2.4) 中按程序绘制(超/n-)立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com