我想通过 OpenGL 创建 3D 金字塔
Posted
技术标签:
【中文标题】我想通过 OpenGL 创建 3D 金字塔【英文标题】:i want to create 3D pyramid by OpenGL 【发布时间】:2020-06-03 03:47:37 【问题描述】:我想只使用盒子来创建一个 3d 金字塔。
我知道有一个函数可以显示金字塔,但我想尝试只使用带有 for 循环的框。但我坚持使用这种编码。所以我想请教一些可以用显示的代码帮助我解决这个问题的人。
这是我的代码。
int i = 1;
int x;
for(i=1;i<7;i++)
for(x=0; x<i ; x++)
glPushMatrix();
translate(1-x+sqrt(i)+(i)+1/6,0,1/6);
glutSolidCube(1.0);
glPopMatrix();
translate(-1, -1, 0);
rotate(rotation,0,1,0);
glPopMatrix();
【问题讨论】:
它会非常慢...你需要 3 个嵌套的 for 循环。例如,通过x,y
的最内层循环会形成大小为 z*z 的正方形......为什么要旋转?翻译就足够了......为了加快速度,您可以只渲染外部立方体(而不是渲染内部立方体)
【参考方案1】:
对于积木金字塔,您需要 3 个嵌套循环。我循环,每个维度。外部循环遍历金字塔的各个层。层的大小取决于高度:
float angle = 0;
void display(void)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90, 1, 0.1, 50);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 10, 5, 0, 0, 0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glRotatef(angle, 0, 0, 1);
angle += 1.0f;
for(int z=0; z<7; z++)
int size = 7 - z;
for (int x = 0; x < size; x++)
for (int y = 0; y < size; y++)
glPushMatrix();
glTranslatef(-(float)size/2 + x, -(float)size/2 + y, (float)z);
glutSolidCube(1.0);
glPopMatrix();
// [...]
【讨论】:
以上是关于我想通过 OpenGL 创建 3D 金字塔的主要内容,如果未能解决你的问题,请参考以下文章