#include <windows.h> #include <gl/glut.h> #include <math.h> #define GL_PI 3.1415f static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; void RenderScene(void) { float fz,bz; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//用当前的清除颜色缓冲区和深度和缓冲区 fz = 50.0f; bz = -50.0f; glPushMatrix(); glTranslatef(0.0f,0.0f,-400.0f); //让视图向z轴负方向移动400 glRotatef(xRot,1.0f,0.0f,0.0f); glRotatef(yRot,0.0f,1.0f,0.0f); //绘制立方体 glBegin(GL_QUADS); //正面,红色 glColor3f(1.0f,0.0f,0.0f); glVertex3f(-50.0f,50.0f,fz); glVertex3f(-50.0,-50.0,fz); glVertex3f(50.0f,-50.0f,fz); glVertex3f(50.0,50.0f,fz); //左面,蓝色 glColor3f(0.0f,0.0f,1.0f); glVertex3f(-50.0f,50.0f,bz); glVertex3f(-50.0,-50.0,bz); glVertex3f(-50.0f,-50.0f,fz); glVertex3f(-50.0,50.0f,fz); //右面,绿色 glColor3f(0.0f,1.0f,0.0f); glVertex3f(50.0f,50.0f,fz); glVertex3f(50.0,-50.0,fz); glVertex3f(50.0f,-50.0f,bz); glVertex3f(50.0,50.0f,bz); //反面 ,灰色 glColor3f(0.5f,0.5f,0.5f); glVertex3f(50.0f,50.0f,bz); glVertex3f(50.0,-50.0,bz); glVertex3f(-50.0f,-50.0f,bz); glVertex3f(-50.0,50.0f,bz); //顶面,黄色 glColor3f(1.0f,1.0f,0.0f); glVertex3f(-50.0f,50.0f,bz); glVertex3f(-50.0f,50.0f,fz); glVertex3f(50.0f,50.0f,fz); glVertex3f(50.0,50.0f,bz); //底面 ,暗蓝色 glColor3f(0.0f,0.5f,0.5f); glVertex3f(-50.0f,-50.0f,fz); glVertex3f(-50.0f,-50.0f,bz); glVertex3f(50.0f,-50.f,bz); glVertex3f(50.0f,-50.0f,fz); glEnd(); glPopMatrix(); glutSwapBuffers(); //交换缓冲区 } void ChangeSize(GLsizei w,GLsizei h) { GLfloat fAspect; if(h==0) h=1; glViewport(0,0,w,h); fAspect = (GLfloat)w/(GLfloat)h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0f,fAspect,1.0,4000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void SetupRC(void) { glEnable(GL_DEPTH_TEST); //启动深度测试 glEnable(GL_COLOR_MATERIAL); //使用不同颜色来贴物体表面 glClearColor(0.0f,0.0f,0.0f,1.0f); } void SpecialKeys(int key ,int x, int y) { if(key==GLUT_KEY_UP) xRot -= 5.0f; if(key==GLUT_KEY_DOWN) xRot +=5.0f; if(key == GLUT_KEY_LEFT) yRot -=5.0f; if(key == GLUT_KEY_RIGHT) yRot +=5.0f; xRot = (GLfloat)((const int)xRot %360); yRot = (GLfloat)((const int)yRot %360); glutPostRedisplay(); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); //创建窗口时使用哪种类型的显示模式 glutInitWindowSize(800,600); glutCreateWindow("Orthographic Projection"); glutDisplayFunc(RenderScene); glutReshapeFunc(ChangeSize); glutSpecialFunc(SpecialKeys); SetupRC(); glutMainLoop(); return 0; }
OpenGL 画彩色立方体
猜你喜欢
转载自blog.csdn.net/xigongdali/article/details/80566516
今日推荐
周排行