无法旋转半立方体

时间:2012-11-12 22:35:19

标签: c opengl glut

我在这里使用半立方体这个词,不是真正的立方体,它只有3个面孔。我会做以下事情:

1。以蓝色绘制立方体的三个面,第一个面为蓝色,另外两个为红色;   2。旋转45度的半立方体,以一种我应该看到红色脸的一半的方式。

然后我只显示蓝色的脸,我应该看到半蓝色和半红色 也许我没有启用深度(我使用glEnable()),我的印象是在我的绘图中忽略了深度尺寸。

#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>

int width=500, height=500, depth=500;

void init()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glEnable(GL_DEPTH_TEST);
    glViewport(0, 0, width, height);
    glOrtho(0, width, height, 0, 0, 1);
}

void display()
{
    glClearColor(0.9, 0.9, 0.9, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor4f(0, 0, 1, 0);
    glBegin(GL_QUADS);


    // First face
    glVertex3i(100, 100,0);
    glVertex3i(300, 100,0);
    glVertex3i(300, 300,0);
    glVertex3i(100, 300,0);

    glColor4f(1, 0, 0, 0);
    // Second face
    glVertex3i(300,100,0);
    glVertex3i(300,300,0);
    glVertex3i(300,100,300);
    glVertex3i(300,100,300);

    // Third face
    glVertex3i(100, 100,300);
    glVertex3i(300, 100,300);
    glVertex3i(300, 300,300);
    glVertex3i(100, 300,300);

    glEnd();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRotatef(45, 1, 0, 0);

    glFlush();
}

int main(int argc, char * argv[])
{
    glutInit(&argc, argv);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(width, height);
    glutCreateWindow("Test");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
    return 0;
}

这是我得到的图像:

Image

编辑:我决定改变视口:

glOrtho(0, width, height, 0, -depth, depth);

但我仍然缺少基础知识,现在我会继续。

2 个答案:

答案 0 :(得分:2)

旋转仅影响旋转后绘制的对象。当您调用glBegin时,无论您绘制什么,都会立即使用堆栈上的当前模型视图矩阵绘制。

绘图后修改矩阵无效。您应该在绘制调用之前移动旋转。

答案 1 :(得分:0)

旋转更新当前矩阵,这将影响旋转后绘制的所有对象。

为了看到旋转,只需将其移动到绘制线上方。