opengl c ++代码中的错误,可能与cood系统有关

时间:2011-04-04 11:29:08

标签: c++ opengl glut coordinate-systems

如果您需要查看,我已将所有必要的文件[临时链接删除]。

mavStar.exe是我的程序。

我正在尝试调试的功能是:

void drawOG() 
{
    int curr,right,back,bottom;
    //Does NOT draw the right most,back most,bottom most layer at the moment
    //Does NOT draw face between state 1 & 2
    for(int z=0;z+1 < occupancyGrid->Nz; z++){
        glPushMatrix();
        for(int y=0;y+1 < occupancyGrid->Ny; y++){
            glPushMatrix();
            for(int x=0;x+1 < occupancyGrid->Nx; x++){
                curr = occupancyGrid->M[x][y][z];
                right = occupancyGrid->M[x+1][y][z];
                back = occupancyGrid->M[x][y][z+1];
                bottom = occupancyGrid->M[x][y+1][z];
                drawCube(RIGHT_FACE,colorBetween(curr,right));
                drawCube(BACK_FACE,colorBetween(curr,back));
                drawCube(BOTTOM_FACE,colorBetween(curr,bottom));
                glTranslatef (HALF_VOXEL_SIZE*2, 0.0, 0.0);
            }
            glPopMatrix();
            glTranslatef (0.0, -HALF_VOXEL_SIZE*2, 0.0);
        }
        glPopMatrix();
        glTranslatef (0.0, 0.0, -HALF_VOXEL_SIZE*2);
    }

}

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    //mouse tracking
    glRotatef(fYDiff, 1,0,0);
    glRotatef(fXDiff, 0,1,0);
    glRotatef(fZDiff, 0,0,1);

    glScalef(fScale, fScale, fScale);

    //draw model
    glMatrixMode(GL_MODELVIEW);
    drawOG();
    printOpenGLError();  // Check for OpenGL errors

    glutSwapBuffers();
}

1 个答案:

答案 0 :(得分:0)

通过使用以下方法,可以更轻松地绘制所需的面:

glPushMatrix();

glBegin(GL_QUADS);

//Draw the 16 vertices with their normals.

glEnd();

glPopMatrix();

例如,如果你想要前面:

glPushMatrix();

glBegin(GL_QUADS);

glColor3f(1.0f,1.0f,1.0f);
glNormal3f(0.0,0.0,1.0);
glVertex3f( position[0],  position[1], position[2]);


glNormal3f(0.0,0.0,1.0);
glVertex3f( position1[0], position1[1], position1[2]);


glNormal3f(0.0,0.0,1.0);
glVertex3f(position2[0], position2[1], position2[2]);


glNormal3f(0.0,0.0,1.0);
glVertex3f(position3[0],  position3[1], position3[2]);

glEnd();

glPopMatrix();

在一张纸上绘制面,以确定position,position1,position2,position3等所需的值。将它们命名为通用目的,确定它们的坐标应该相当容易。


如果你想给它一点灵活性,你可以创建一个Cube类,只渲染你设置了一个标志的女巫的面孔。通过使用类,您可以获得对可渲染对象的显示方式(颜色,位置,比例等)的大量控制。