标签:小代码
电脑环境比较多 然后对于java与linux配置opengl vs2012步骤要少很多 在与原文配置不同之处在于可以将配置文件dll放于项目debug文件夹中与产生的exe同文件夹 软件发行时可以附带这个配置文件就能在未配置dll文件的电脑运行(感觉lib还是需要配的) 我附件传一份配置 以便于自己还能从51cto寻找
/**#include<gl/glut.h> void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); //清除颜色 glRectf(-0.5f,-0.5f,0.5f,0.5f); //画一个矩形 glFlush(); //让前面的命令立即执行而不是在缓冲区,与fflush(stdout)作用类似 } #include <math.h> const int n = 20; const GLfloat R = 0.5f; const GLfloat Pi = 3.1415926536f; void myDisplay(void) { int i; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); for(i=0; i<n; ++i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)); glEnd(); glFlush(); } int main(int argc, char* argv[]) { glutInit(&argc,(char**)argv); //初始化glut,必须调用,复制黏贴这句话即可 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //设置显示方式,RGB、单缓冲。当然还有GLUT_INDEX索引颜色 GLUT_DOUBLE双缓冲(Qt中看到过双缓冲) glutInitWindowPosition(100,100); //位置 glutInitWindowSize(400,400);//窗口大小 glutCreateWindow("第一个OpenGL程序"); //创建窗口,设置标题 glutDisplayFunc(&myDisplay); // 当绘制窗口时调用myDisplay,像Cocos2d-x刷帧Draw中的操作 glutMainLoop(); //消息循环 return 0; } */ #include <gl/glut.h> #define WIDTH 400 #define HEIGHT 400 #include <math.h> #define ColoredVertex(c, v) do{ glColor3fv(c); glVertex3fv(v); }while(0) //GLfloat angle = 0.0f;//2种写法都可以 因为第一次加载 系统会去寻找这个类 float angle = 0.0f; void myDisplay(void) { static int list = 0; if( list == 0 ) { // 如果显示列表不存在,则创建 /* GLfloat PointA[] = {-0.5, -5*sqrt(5)/48, sqrt(3)/6}, PointB[] = { 0.5, -5*sqrt(5)/48, sqrt(3)/6}, PointC[] = { 0, -5*sqrt(5)/48, -sqrt(3)/3}, PointD[] = { 0, 11*sqrt(6)/48, 0}; */ // 2007年4月27日修改 GLfloat PointA[] = { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6}, PointB[] = {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6}, PointC[] = { 0.0f, -sqrt(6.0f)/12, sqrt(3.0f)/3}, PointD[] = { 0.0f, sqrt(6.0f)/4, 0}; GLfloat ColorR[] = {1, 0, 0}, ColorG[] = {0, 1, 0}, ColorB[] = {0, 0, 1}, ColorY[] = {1, 1, 0}; list = glGenLists(1); glNewList(list, GL_COMPILE); glBegin(GL_TRIANGLES); // 平面ABC ColoredVertex(ColorR, PointA); ColoredVertex(ColorG, PointB); ColoredVertex(ColorB, PointC); // 平面ACD ColoredVertex(ColorR, PointA); ColoredVertex(ColorB, PointC); ColoredVertex(ColorY, PointD); // 平面CBD ColoredVertex(ColorB, PointC); ColoredVertex(ColorG, PointB); ColoredVertex(ColorY, PointD); // 平面BAD ColoredVertex(ColorG, PointB); ColoredVertex(ColorR, PointA); ColoredVertex(ColorY, PointD); glEnd(); glEndList(); glEnable(GL_DEPTH_TEST); } // 已经创建了显示列表,在每次绘制正四面体时将调用它 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle, 1, 0.5, 0); glCallList(list); glPopMatrix(); glutSwapBuffers(); } void myIdle(void) { ++angle; if( angle >= 360.0f ) angle = 0.0f; myDisplay(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowPosition(200, 200); glutInitWindowSize(WIDTH, HEIGHT); glutCreateWindow("OpenGL 窗口"); glutDisplayFunc(&myDisplay); glutIdleFunc(&myIdle); glutMainLoop(); return 0; }
标签:小代码
原文地址:http://wzsts.blog.51cto.com/10251779/1827952