我在这里使用半立方体这个词,不是真正的立方体,它只有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;
}
这是我得到的图像:
编辑:我决定改变视口:
glOrtho(0, width, height, 0, -depth, depth);
但我仍然缺少基础知识,现在我会继续。
答案 0 :(得分:2)
旋转仅影响旋转后绘制的对象。当您调用glBegin
时,无论您绘制什么,都会立即使用堆栈上的当前模型视图矩阵绘制。
绘图后修改矩阵无效。您应该在绘制调用之前移动旋转。
答案 1 :(得分:0)
旋转更新当前矩阵,这将影响旋转后绘制的所有对象。
为了看到旋转,只需将其移动到绘制线上方。