OpenGL学习——(2)概念补充

来源:互联网 发布:淘宝卖家信誉等级 编辑:程序博客网 时间:2024/06/15 15:48

概念补充


1.OpenGL对三维物体的绘制方式:
a.网络线绘制方式:仅绘制三维物体的网格轮廓线。
b.深度优先网格线绘图方式:用网格线方式绘图,使得远处物体颜色深与近处物体颜色。
c.反走样网格线绘图方式:用网格线方式绘图,为减少图形线条的参差不齐。
d.平面消隐绘图方式:对模型隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。
e.光滑消隐绘图方式:对模型进行消隐按照光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。
f.加粗和纹理的绘图方式:在模型表面贴上纹理甚至加上光照阴影,使得三维景观现象照片一样。
g.运动模糊的绘制方式:模拟物体运动时人眼观察所感觉的动感现象。
h.大气环境效果:在三维景观中加入如雾等大气环境效果,使人身临其境。
i.深度域效果:类似于照相机镜头效果,模型在聚焦点出清晰,反之则模糊。

2.OpenGL的基本工作流程
在绘制图形时包括俩种数据需要被处理,分别是几何顶点数据和图像象素数据。

  • 数据类型

几何顶点数据包括:顶点集、线集、多边形集。
图像象素数据集:象素集、影像集、位图集。

  • 数据状态:
    这俩种数据要么直接被处理,要么先存储在显示列表中。
  • 数据处理方式:
    几何顶点数据使用运算器进行逐个点的操作。
    图像数据与几何数据处理方式不同,需要在计算后进行纹理映射。(处理后数据放在纹理组装用的内存中)
    俩种数据被处理后需要进行光栅化形成图形碎片,最后统一存放在帧缓存器中实现图形的显示。

3.函数库介绍:
在Windows环境下OpenGL包含100多个库函数,函数开头都以“gl”标记,且支持其他四类库:
a.OpenGL实用库:43个,以glu开头,通过调用核心函数起作用,可以进行纹理映射、坐标变换、多边形分化以及绘制一些简单实体;
b.OpenGL辅助库:31个,以aux开头,用于窗口管理、输入输出以及绘制一些简单的三维形体;
c.Windows专用类库:6个,以wgl开头,用以连接OpenGL和WindowsNT
d.Win32 API函数:5个,没有专用前缀,用以处理象素存储格式和双缓冲区。

4.向OpenGL着色器传递渲染数据的方法——属性、uniform和纹理三种

  • 属性
    所谓属性就是一个对每个定点都要作改变的数据元素。属性值(浮点数、整数、布尔类型)以四维向量形式进行内部存储,前三个分别是性x,y,z,第四个分量基本上为1。

  • Uniform值
    Uniform变量实际上可以无数次限制地使用,在值设置完时就紧接着发出渲染一个图元批次的命令。其会在每个批次改变一次,而不是每个顶点改变一次。(常用在定点渲染中设置变换矩阵)

  • 纹理
    任何大型浮点数据块(如小号资源很大的函数的大型查询表)都可以通过这种方式传递给着色器。

5.着色器类型
a.单位着色器

GLShadermanager::UseStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);

b.平面着色器

GLShadermanager::UseStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);

c.上色着色器

GLShadermanager::UseStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);

d.默认光源着色器

GLShadermanager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

e.点光源着色器

GLShadermanager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);

f.纹理替换矩阵

GLShadermanager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvpMatrix[16],GLint nTextureUnit);

g.纹理调整着色器

GLShadermanager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvpMatrix[16],GLfloat vColor,GLint nTextureUnit);

h.纹理光源着色器

GLShadermanager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,GLfloat mvMatrix,GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
原创粉丝点击