OpenGL 自己有设置菜单的函数,这对于一直写控制台程序的我来说,显的非常好玩.下面的代码,我们定义了一个鼠标右键的特性,
可以下拉两个菜单,清屏和退出.
#include <GL/glut.h> #include <stdio.h> #include <cmath> void mymenu(int value) { if(value == 1) { glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers();//or glFlush() glutAttachMenu(GLUT_RIGHT_BUTTON); } if(value == 2) exit(0); } void init() { glutCreateMenu(mymenu);//添加菜单,要得到菜单项的整数值 glutAddMenuEntry("Clear Screen",1);// glutAddMenuEntry("Exit",2); glutAttachMenu(GLUT_RIGHT_BUTTON);//绑定到鼠标键 } int main(int argc,char **argv) { glutInit(&argc,argv); glutCreateWindow("Hello,world!"); // glutDisplayFunc(display);//glutDisplayFunc(void (*func)(void)) glClear(GL_COLOR_BUFFER_BIT); init(); glutMainLoop();//导致程序进入一个事件 }
#include <GL/glut.h> #include <stdio.h> #include <cmath> const GLfloat Pi = 3.1415926536f; void display()//欠缺几何方面的知识 { GLfloat a = 1 / (2-2*cos(72*Pi/180)); GLfloat bx = a * cos(18 * Pi/180); GLfloat by = a * sin(18 * Pi/180); GLfloat cy = -a * cos(18 * Pi/180); GLfloat PointA[2] = { 0, a }, PointB[2] = { bx, by }, PointC[2] = { 0.5, cy }, PointD[2] = { -0.5, cy }, PointE[2] = { -bx, by }; glClear(GL_COLOR_BUFFER_BIT); // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出 glBegin(GL_LINE_LOOP); glVertex2fv(PointA); glVertex2fv(PointC); glVertex2fv(PointE); glVertex2fv(PointB); glVertex2fv(PointD); glEnd(); glFlush(); } void mymenu(int value) { if(value == 1) { glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers();//or glFlush() glutAttachMenu(GLUT_RIGHT_BUTTON); } if(value == 2) exit(0); } void init() { glutCreateMenu(mymenu);//添加菜单,要得到菜单项的整数值 glutAddMenuEntry("Clear Screen",1);// glutAddMenuEntry("Exit",2); glutAttachMenu(GLUT_RIGHT_BUTTON);//绑定到鼠标键 } int main(int argc,char **argv) { glutInit(&argc,argv); glutCreateWindow("Hello,world!"); glutDisplayFunc(display);//glutDisplayFunc(void (*func)(void)) //glClear(GL_COLOR_BUFFER_BIT); init(); glutMainLoop();//导致程序进入一个事件 }
启动函数,主要我是看看他们放在什么位置,注意正反面
//多边形类型 #include<GL/glut.h> #include<stdio.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT,GL_FILL);//设置正面为填充模式 glPolygonMode(GL_BACK,GL_LINE);//设置反面为线性模式 glFrontFace(GL_CW);//设置逆时针方向为正面 glBegin(GL_POLYGON);//按逆时针绘制一个正方形,在左下方 glVertex2f(-0.5,-0.5); glVertex2f(0.0,0.5); glVertex2f(0.0,0.0); glVertex2f(-0.5,0.0); glEnd(); glBegin(GL_POLYGON);//按顺 dram a recent glVertex2f(0.0,0.0); glVertex2f(0.0,0.5); glVertex2f(0.5,0.5); glVertex2f(0.5,0.0); glEnd(); glFlush(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutCreateWindow("NNN"); glutDisplayFunc(display); glutMainLoop(); }
//多边形类型 #include<GL/glut.h> #include<stdio.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT,GL_FILL);//设置正面为填充模式 glPolygonMode(GL_BACK,GL_LINE);//设置反面为线性模式 glFrontFace(GL_CCW);// glEnable(GL_CULL_FACE);//开启特性 glCullFace(GL_BACK);//指定隐藏的那面 glBegin(GL_POLYGON);//按逆时针绘制一个正方形,在左下方 glVertex2f(-0.5,-0.5); glVertex2f(0.0,0.5); glVertex2f(0.0,0.0); glVertex2f(-0.5,0.0); glEnd(); glBegin(GL_POLYGON);//按顺 dram a recent glVertex2f(0.0,0.0); glVertex2f(0.0,0.5); glVertex2f(0.5,0.5); glVertex2f(0.5,0.0); glEnd(); glDisable(GL_CULL_FACE);//关闭特性 glFlush(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutCreateWindow("NNN"); glutDisplayFunc(display); glutMainLoop(); }
(图片有毛病)
镂空正面
镂空反面
原文:http://blog.csdn.net/yuzibo747/article/details/19906563