[转]opengl学习笔记

原帖地址:http://blog.sina.com.cn/s/blog_648868460100hpur.html

原帖作者:PureSky_Memory

1.glutInitDisplayMode(GLUT_SINGLE / GLUT_RGBA)

  显示模式。其中第一个参数是单缓冲窗口,第二个参数是颜色模式。

2.GLUT:OpenGL工具箱。OpenGL utility toolkit

3.glutCreateWindow("Simple") 创建OpenGL窗口,引号内内容为窗口标题栏标题

4.glutDisplayFunc(RenderScene) 显示回调,也是我们放置OpenGL渲染函数调用的

  地方。

5.glutMainLoop() 启动了GLUT框架的运行

6.glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)

  这个函数设置了一种颜色,用于清除窗口。

7.glClear(GL_COLOR_BUFFER_BIT)用当前消除颜色消除窗口。

8.glFlush()刷新绘图命令,导致所有未执行的OpenGL命令被执行

9.glutReshapeFunc(),此函数注册一个回调函数,当窗口的大小发生变化时,GLUT函数

  库就会调用这个函数。

10.Void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)

   x,y指定了窗口内部视口的左下角,width和height参数指定了视口的面积(以像

   素为单位),视口以实际屏幕坐标定义了窗口中的区域,OpenGL可以在这个区域

   中进行绘图。

11.void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble

   top,GLdouble near,GLdouble far)

   此函数用于创建正投影模式命令。

12.glMatrixMode(GL_PROJECTION)

   glLoadIdentity()

   重新设置坐标系统。

13.Void glutTimerFunc(unsighed int msecs,void (*func)(int value), int value)

   这个函数使GLUT等待msecs毫秒,然后调用func函数,可在value参数中传递一个用

   户定义的值。

14.glutSwapBuffers()刷新绘图命令,并进行交换。

15.Void glEndble (GLenum capability)

   Void glDisable(GLenum capability)

   打开或关闭某类型的状态变量。

   glEnable(GL_LIGHTING)

   glDisable(GL_LIGHTING)

   打开/关闭光照效果。

16.GLboolean glIsEnabled(GLenum capability)

  判断某状态变量是否已被打开。

17.Void glFinish(void)

   强制完成以前所有的OpenGL命令,和glFlush不同,这个函数在所有的渲染操作之前

   不会返回。

18.设置3D画布,建立可视区域的代码(x,y,z均为-100至+100)

   //修改可视区域和视口,当窗口改变大小时被调用

   Void ChangeSize (GLsizei w,GLsizei h)

   {

   GLfloat nRange=100.0f

   //防止被0所除

   if(h==0)

     h=1;

   //根据窗口大小设置视口

   glViewport(0,0,w,h)

   //重置投影矩阵堆栈

   glMatrixMode(GL_PROJECTION)

   glLoadIdentity()

   //建立裁剪区域(左、右、底、顶、近、远)

   if(w<=h)

     glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange)

   else

     glOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange, -nRange,nRange)

   //重置模型视图矩阵堆栈

   glMatrixMode(GL_MODEVIEW);

   glLoadIdentity();

19.绘制点 glVertex

   如:glVertex3f(50.0f,50.0f,0.0f)

   修改点的大小 Void glPointSize(GLfloat size)

   参数指定了被绘点的近似直径(以像素计)

   glPointSize函数必须在glBegin/glEnd语句之外进行调用

   在这两个函数调用之间,并不是所有的OpenGL函数都是有效的

20.绘制图元,使用glBegin,glEnd

   如:glBegin(GL_POINT)    //选择点作为图元

          glVertex3f(0.0f,0.0f,0.0f)

       glEnd 

    又如画线,在点(0,0,0)和(50,50,50)之间画一条线

      glBegin(GL_LINES)

        glVertex3f(0.0f,0.0f,0.0f)

        glVertex3f(50.0f,50.0f,50.0f)

      glEnd()

    注意:两个顶点画一直线,若点的个数为奇数,则最后一个点被忽略

21.线带GL_LINE_STRIP绘制一条经过所有点的连续的线

   如:glBegin(GL_LINE_STRIP)

          glVertex3f(0.0f,0.0f,0.0f)

          glVertex3f(50.0f,50.0f,50.0f)

             glVertex3f(50.0f,100.0f,0.0f)

       glEnd();

22.线环(首尾两点也闭合) GL_LINE_LOOP

23.设置直线宽度:void glLineWidth(GLfloat width)

24.直线点画

   先启用:glEnable(GL_LINE_STIPPLE)

   再调用:void glLineStipple(GLint factor,GLushot pattern)

25.绘制三角形

   glBegin(GL_TRIANGLES)

      glVertex2f(0.0f,0.0f)

      glVertex2f(25.0f,25.0f)

      glVertex2f(50.0f,0.0f)

   glEnd()

26.OpenGL认为多边形具有正面逆时针方向的环绕

27.设置多边形颜色

   1)glShadeModel(GL_FLAT)

      让OpenGL用当前颜色(也就是这个多边形最后一个顶点的颜色)填充这个多边形

   2)glShadeModel(GL_SMOOTH)

      让OpenGL根据每个顶点对三角形进行渐变着色,对相邻顶点的颜色进行匀和。

28.最后画的物体会出现在以前绘制的所有物体的前面。

   解决办法:深度测试。每个像素赋予一个Z值,Z值越大,此像素越靠前。

   启用深度测试:glEnable(GL_DEPTH_TEST)

29.每当场景被渲染时,深度缓冲区必须被清除,深度缓冲区类似于颜色缓冲区,它包

   含了有关像素与观察者之间距离的信息。

    //清除窗口和深度缓冲区

   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

30.剔除、隐藏背面:glEnable(GL_CULL_FACE)

31.顺时针环绕为正面:glFrontFace(GL_CW)

   逆时针环绕为正面(缺省):glFrontFace(GL_CCW)

32.多边形模式

   外框: glPolygonMode(GL_BACK,GL_LINE)

   实心:glPolygonMode(GL_BACK,GL_FILL)

33.顶点在屏幕上显示之前,一共会发生3种类型的转换:视图、模型和投影。

       转换                用途

   视图Viewing        指定观察者或照相机的位置

   模型Modeling       在场景中移动物体

   模型视图ModelView  描述视图和模型转换的二元性

   投影Projection     对观察区域进行裁剪和缩放

   视口Viewport       一种伪转换,对窗口上的最终输出进行缩放

34.glutWireCube(10.0f)绘制立方体

35.void glTranslatef(GLfloat x,GLfloat y,GLfloat z)

   3个参数表示沿x,y,z方向移动的数量。

36.glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
   绕着由x,y,z参数所指定的那个向量执行旋转操作,angle以角度为单位,逆时针方

   向。

37.缩放:glScalef(GLfloat x,GLfloat y,GLfloat z)

38.把模型视图矩阵重置回原点;载入单位矩阵

   glMatrixMode(GL_MODELVIEW)  把当前矩阵设置为模型视图矩阵

   glLoadIdentity() 重置

39.设置绘图颜色

   glColor3f(x,y,z)  参数取值为0.0-1.0

   glColor3ub(0,255,128)=RGB(0,255,128)

40.着色:一种颜色到下一种颜色的平滑过渡(渐变)

   启用渐变着色:glShadeModel(GL_SMOOTH)

41.一个物体如果自身不会发光,它一般受到3种不同类型的光的照射:

   环境光(ambient),散射光(diffuse),镜面光(specular)

   启用光照 glEnable(GL_LIGHTING)

   设置光照模型

   GLfloat ambientLight[]={1.0f,1.0f,1.0f,1.0f}

   glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight)

42.设置材料属性

    第一种方法:

   GLfloat gray[]={0.75f,0.75f,0.75f,1.0f}

   glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,gray)

   第一个参数指定材料属性是作用于正面、背面还是双面。

   (GL_FRONT、GL_BACK、GL_FRONT_AND_BACK)

   第二个方法:颜色追踪(推荐)

   glEnable(GL_COLOR_MATERIAL)  //启用颜色追踪

   glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE)

43.根据一个多边形上的3个点计算法线向量

   void gltGetNormalVector(GLTVector vp1,GLTVector vp2,GLTVector

   vp3,GLTVector vNormal)

 

posted @ 2015-03-25 08:28  peach爱桃花  阅读(163)  评论(0编辑  收藏  举报