OpenGL中的3D立方体网格

Posted

技术标签:

【中文标题】OpenGL中的3D立方体网格【英文标题】:Grid of 3D cubes in OpenGL 【发布时间】:2020-09-21 12:21:16 【问题描述】:

我来这里是为了获得有关 OpenGL 中 3D 立方体网格的帮助。现在我只有以下代码的二维网格:

glBegin(GL_QUADS);

for (GLfloat i = -5.5; i <= 5.5; i += .001) 
    glVertex3f(i, 0, 5.5); glVertex3f(i, 0, -5.5);
    glVertex3f(5.5, 0, i); glVertex3f(5.5, 0, i);

glEnd();

它创建了许多二维立方体来形成一个网格

【问题讨论】:

【参考方案1】:

如果您想在立即模式下执行此操作 (glBegin/glEnd),最简单的方法是使用嵌套循环和 glTranslate 进行模型转换。由于glTranslate指定了一个新的变换矩阵,并将当前矩阵乘以新矩阵,所以当前矩阵必须由glPushMatrix/glPopMatrix保存和恢复。 编写一个函数(cube),它绘制一个唯一的立方体并设置通过glScale修改立方体模型的大小:

GLfloat size = 0.2f;
GLfloat gap = size * 0.2f;

for (int i = -5; i < 5; ++i)

    for (int j = -5; j < 5; ++j)
    
        glPushMatrix();

        GLfloat x = (size + gap) * (GLfloat)i;
        GLfloat y = (size + gap) * (GLfloat)j;
        glTranslatef(x, y, 0.0f);
        glScalef(size*0.5f, size*0.5f, size*0.5f);
        cube();

        glPopMatrix();
    

void cube( void )

    static const float verticies[] = 
         1, -1, -1,
         1,  1, -1,
        -1,  1, -1,
        -1, -1, -1,
         1, -1,  1,
         1,  1,  1,
        -1, -1,  1,
        -1,  1,  1,
    ;

    static const int surfaces[] = 0,1,2,3, 3,2,7,6, 6,7,5,4, 4,5,1,0, 1,5,7,2, 4,0,3,6;
    static const float colors[] = 1,0,0, 0,1,0, 0,0,1, 1,1,0, 1,0,1, 1,0.5,0;

    glBegin(GL_QUADS);
    for (int side = 0; side < 6; ++side)
    
        glColor3fv(colors + side*3);
        for (int corner = 0; corner < 4; corner++)
        
            int vi = surfaces[side*4+corner];
            glVertex3fv(verticies + vi*3);
        
    
    glEnd();

【讨论】:

感谢您的帮助...我运行它并显示立方体网格但是我如何在 x 轴上旋转它使其看起来像地面?现在它垂直显示,我尝试了 glRotatef 但它不旋转:(。 @Struggler glTranslatef(x, y, 0.0f); -> glTranslatef(x, 0.0f, y); 太好了,我也想到了!!!非常感谢您的帮助...

以上是关于OpenGL中的3D立方体网格的主要内容,如果未能解决你的问题,请参考以下文章

为啥 OpenGL 中的 3D 投影可以工作,但会留下痕迹?

渲染具有多个索引的网格

渲染具有多个索引的网格

渲染具有多个索引的网格

OpenGL 将三角形网格缩放为单位立方体

使用 Opengl 绘制 3D 立方体