OpenGL中的3D立方体网格

问题描述

在这里获得有关OpenGL中3D立方体网格的一些帮助。现在我只有以下代码的2d网格:

glBegin(GL_QUADS);

for (GLfloat i = -5.5; i <= 5.5; i += .001) {
    glVertex3f(i,5.5); glVertex3f(i,-5.5);
    glVertex3f(5.5,i); glVertex3f(5.5,i);
}
glEnd();

它创建许多2d多维数据集以形成网格

解决方法

如果要在即时模式(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,};

    static const int surfaces[] = {0,2,3,7,6,5,4,6};
    static const float colors[] = {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();
}