#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 画彩色立方体
最新推荐文章于 2024-01-18 09:25:02 发布