编写一个完整的OpenGL 程序,要求:
(1) 创建一个宽度600,高度800,背景色为蓝色的窗口。
(2) 绘制一个红色三角形(10,10) (30,10) (20,20) 0 1 2 P P P ,居中显示。
(3) 单击鼠标右键,弹出一个颜色菜单(黑色、红色、蓝色、绿色、白色),并编写相应的菜单回调函数使其能够改变三角形的颜色。
(1) 创建一个宽度600,高度800,背景色为蓝色的窗口。
(2) 绘制一个红色三角形(10,10) (30,10) (20,20) 0 1 2 P P P ,居中显示。
(3) 单击鼠标右键,弹出一个颜色菜单(黑色、红色、蓝色、绿色、白色),并编写相应的菜单回调函数使其能够改变三角形的颜色。
#include <gl/glut.h>
static GLsizei iMode = 1;
void Initial(void)
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色
glMatrixMode(GL_PROJECTION); //设置投影参数
gluOrtho2D(0.0,40.0,0.0,30.0); //居中显示.要根据三角形的三个顶点计算下
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口
switch(iMode)
{
case 1:
glColor3f(0.0f,0.0f,0.0f);
break;
case 2:
glColor3f(1.0f,0.0f,0.0f);
break;
case 3:
glColor3f(0.0f,0.0f,1.0f);
break;
case 4:
glColor3f(0.0f,1.0f,0.0f);
break;
case 5:
glColor3f(1.0f,1.0f,1.0f);
break;
}
glBegin(GL_TRIANGLES);
glVertex2f(10,10);
glVertex2f(30,10);
glVertex2f(20,20);
glEnd();
glFlush(); //处理所有的OpenGL程序
}
//处理菜单响应
void ProcessMenu(int value)
{
iMode = value;
glutPostRedisplay();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化窗口的显示模式
glutInitWindowSize(600,800); //设置窗口的尺寸 600*800
glutInitWindowPosition(600,120); //设置窗口的位置
glutCreateWindow("矩形"); //创建一个名为矩形的窗口
glutCreateMenu(ProcessMenu);
glutAddMenuEntry("黑色",1);
glutAddMenuEntry("红色",2);
glutAddMenuEntry("蓝色",3);
glutAddMenuEntry("绿色",4);
glutAddMenuEntry("白色",5);
glutAttachMenu(GLUT_RIGHT_BUTTON);//如果是左键就改成GLUT_LEFT_BUTTON,如果是中键就改成GLUT_MIDDLE_BUTTON
glutDisplayFunc(Display); //设置当前窗口的显示回调函数
Initial(); //完成窗口初始化
glutMainLoop(); //启动主GLUT事件处理循环
return 0;
}