码迷,mamicode.com
首页 > 其他好文 > 详细

向OPENGL 学习   有自己体验

时间:2016-07-20 13:46:19      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:小代码

电脑环境比较多
然后对于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;
}


向OPENGL 学习   有自己体验

标签:小代码

原文地址:http://wzsts.blog.51cto.com/10251779/1827952

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!