我想通过 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 金字塔的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 在 OpenGL 中使用键盘移动 3d 形状

使用 C++ 在 OpenGL 中移动自动旋转的 3d 多边形

OPENGL若干重要基础概念

OpenGL 立方体和金字塔

三维建模的基本流程

利用openGL纯手工打造一个金字塔