红宝书笔记《第7版》

来源:互联网 发布:网络分层模型详解 编辑:程序博客网 时间:2024/05/08 22:54

1、openGl是一个状态机



2、福特汽车生产装配图




 3、缩写:

  GLU openGL工具函数库

  GLUT openGlshi实用工具库

   general-purpose computing on graphics processing units GPGPU


4、显示回调函数和处理输入函数

5、openGl及其废弃机制

      由于对openGL进行新的扩展,出现了大量的API,完成同一操作的冗余方法。给人们一种印象:openGl API很慢,不能在现代硬件上很好的工作。

在3.0中,定制了一种废弃的模式,说明了如何从APi中删除功能,但是他不只是修改核心OpenGL APi,也会影响到OpenGL的渲染环境及可用的OpenGl渲染环境的类型。

6、openGL 渲染环境 (3.0新加)


6.1 访问OpenGL 函数


7、glflush glFinish

   有网络的时候,需要来回的通信,此时需要使用glflush   ,如果glFlush已经够用,就不要在使用glFinish。

8、 准确的说,在多边形的内部任意取两个点,如果连接着两个点的线段都在这个多边形的内部,那么这个多边形就是凸多边形。

  openGL 无法描述中间有洞的多边形,因为它们是非凸多边形,并且他的边界无法用一个单闭合线段环来表示。   例如:在大多数系统中,实际填充的是不大于多边形凸包的部分,但 在有些系统中,实际填充的时小于凸包的部分。


   曲线并不是几何图元。






9、 glBegin glEnd

10、抗锯齿

   屏幕上所绘制的各种宽度的点所包含的像素集合取决于是否启用抗锯齿功能。(抗锯齿是一种在渲染点和直线时对他们进行平滑处理的技巧,6.2 6.4),如果抗锯齿被关闭掉,带小数的宽度将四舍五入到整形值,在屏幕上所绘制的时对齐的正方形区域。   如果宽度值是1.0,这个方块的大小就是1个像素乘以一个像素;如果宽度是2.0,这个方块是2个像素乘以2个像素,以此类推。

    如果启用了抗锯齿或多重采样,屏幕上绘制的将是一个圆形的像素区域。一般情况下,位于边界的像素所使用的颜色强度较小,边缘更有平滑的感觉,这种情况下,非整形的宽度值并不会四舍五入。

   如果启用了抗锯齿或多重采样,屏幕上绘制的三一个圆形的像素区域

11、 反转和剔除多边形表面

    按约定,如果多边形的顶点以逆时针的顺序出现在屏幕上,它便称为正面。   可定向蔟()

   void glFrontFace(Glenum mode)   

    剔除:

    在一个完全闭合的表面上,多有的背面多边形都是看不到的,,因为他们总是被多边形给遮挡住。为了高数openGL丢弃那些不可见的正面或

背面多边形,可以使用glCullFace(mode)

    多边形的一个面试正面还是背面取决与窗口坐标计算产生的多边形区域的符号。

 12、设置边界轮廓

 13、 法线

    openGL中,即可以为每个多边形指定一条法线,也可以为多边形的每个顶点指定一条法线,同一个多边形的定点可能共享同一条法线

(平表面),也可能具有不同的法线(曲面),除了顶点为不能为多边形的其他地方分配法线。

    openGL使用法线向量确定这个物体的各个顶点所接受的光照。

   glNormal3fv(n0)

     tip: 在表面的一个特定的电上,有2条向量垂直于这个表面,他们总是指向相反的方向。按照约定,指向表面外侧的那条向量就是他 的法线。、

14、顶点数组



      glEnable()和glDisable() 可以存储在显示列表中,但是顶点数组却不可以放在显示列表中,因为这些个数组被保存在了客户端。

     如果启用了多重纹理功能,启用和金庸顶点数组只会影响活动纹理单元。

    

     对于那些支持多重纹理的OpenGl的实现,用glTexCoordPointer()函数指定一个纹理数组只影响当前的活动纹理单元。9.8

    stride (跨距)

    gl*Pointer()函数的strider参数告诉OpenGL如何访问指针数组中的数据。

    tip: 如果数组的内容在glBegin和glEnd之间进行了修改,就无法保证获得的是最初的数据还是经过修改的数据。为了安全起见,在图元绘制完成之前

不要修改任何可能访问的数组元素的内容。

  -------

  14.1 混合数组

    混合存储了rgb颜色和3d定点坐标的interwined数组是通过调用glColorPointer()和glVertexPointer()访问的。

Stride参赛可以帮助我们正确的指定数组元素。

  glInterleavedArrays()函数可以同时指定机构定点数组。还能启用和禁用适当的数组。

 为了把interwined数组的内容指定到rgb颜色数组和顶点数组,并启用这两个数组,只需用调用

glInterleavedArrays();

 上方法不支持边界标志。


15、投影变换:

      投影变换的目的是定义一个视景体。视景体有2种用途。首先,视景体决定了一个物体是如何映射到屏幕上的(即通过透射投影还是正投影)。其次,视影体定义了那些物体被裁减到最终的图像之外。         视景体 视影体

    Note Robin的投影教程

16、视口的纵横比一般和视景体的纵横比相同。如果不同,当图像投影到视口时就会变形。

17、由于变换是用矩阵的形式存储的,因此矩阵堆栈是一种理想的机制,可以完成这种类型的移动、记忆和丢弃操作。


     在矩阵底部保存一个单位矩阵,避免重复调用glLoadIdentity().

18、颜色


     alpha有很多用途,混合和透明,会影响写入缓存区的RGBA。

     像素可以显示的不同颜色的数量取决于位平面的数量及硬件是如何解释这些位平面的。不同颜色的数量不能超过2的n次方,n是位平面的数量。

抖动:glEnable()和glDisable()函数   用GL_DITHER

   有些图形硬件使用抖动来增加可以显示的颜色数量。


  颜色索引模式:

      在颜色索引模式下,同时可用的颜色数量受限于颜色映射表的大小及可以用的位平面的数量。颜色映射表的大小由专用的硬件决定。总是2的整数次方。



19、光照

    现实世界与OpenGL光照

   材料颜色

    光合材料的RGB值

    光线的颜色成分与材料的颜色成分的含义并不相同。对于光线而言,颜色种类的数量取决于每种颜色的完全强度的百分比。

    材料RGB  与它对颜色的反射百分比。

20、每个光源都可以为场景中的环境光做贡献。

  openGL假定使用的是无限远的观察点。可以用下面这行把观察点改为局部观测点;

   glLightModeli(GL-LIGHT_MODEL_LOCAL_VIEER,GL_TRUE)

  glFrontFace()函数控制多边形的那一面为正面      反转和踢出多边形表面



0 0
原创粉丝点击