OpenGL Rendering Pipeline

转载:http://www.songho.ca/opengl/gl_pipeline.html

Opengl作为图形硬件的接口.最主要的目的是将二维或三维事物渲染到帧缓存,这些事物被描述成顶点数据或是像素数据.Opengl对这些数据执行几个处理步骤,将其转化为像素,以在帧缓冲形成最终所需的图像.

OpenGL Pipeline

几何顶点数据

模型的顶点集、线集、多边形集

图像数据

模型的顶点集、线集、多边形集

显示列表

一组被编译的命令供以后执行使用.被编译的数据种类:顶点数据和像素数据.

显示列表是服务段的一部分状态,驻留在服务端.

客户端只需要向服务端发送一次命令和数据.

运算器

每个顶点法线坐标,使用GL_MODELVIEW矩阵进行转化.由对象坐标系转到视图坐标系.

图元组装

模型矩阵转化后,投影矩阵对图元进行二次转化,然后使用裁剪平面进行裁剪.由视图坐标系转到裁剪坐标系.利用W进行透视除法和 利用viewport将三维场景映射到窗口坐标系. 最后进行剔除测试.

图像操作

客户端像素数据被解压后,数据进行缩放、偏置、映射和夹持,这些操作都是图像操作.操作完后,数据要么进行纹理映射,要么直接栅格化转为片段.

纹理映射

纹理图像被存储到纹理内存,应用到几何对象.

光栅化

几何数据和像素数据转化为片段的过程.片段是一个矩形数组,组成是颜色,线宽,点大小,深度,抗拒计算.每一个片段对应于帧缓冲中的一个像素.

顶点操作

最后一个阶段是将片段转化为像素放入帧缓冲.第一步是有纹理内存生成纹理像素,并应用于每一个片段.然后计算雾,再然后,通过各种测试,Scissor Test ⇒ Alpha Test ⇒ Stencil Test ⇒ Depth Test.最后,进行混合,逻辑运算,位掩码,将实际像素存储在帧缓存中.

反馈

Opengl返回当前状态信息,通过命令的形式glGet*() and glIsEnabled() .更多的你可读取像素数据glReadPixels(),glCopyPixels() 等等

附加: glReadPixels() 从帧缓冲中读取像素块

void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels )

GLint x, GLint y 指定读取第一个像素的窗口坐标,这个坐标是矩形像素块的坐下标.

GLsizei width, GLsizei height 指定矩形的大小,1的高度和宽度对应一个像素
           GLenum format 指定像素的数据格式.接收以下标识:

 GL_COLOR_INDEXGL_STENCIL_INDEXGL_DEPTH_COMPONENTGL_REDGL_GREENGL_BLUEGL_ALPHAGL_RGBGL_RGBAGL_LUMINANCEGL_LUMINANCE_ALPHA.

GLenum type 指定像素的数据类型.接收以下识:

GL_UNSIGNED_BYTEGL_BYTEGL_BITMAPGL_UNSIGNED_SHORTGL_SHORTGL_UNSIGNED_INTGL_INT, or GL_FLOAT.

GLvoid *pixels 像素数据

注:在将像素数据放入客户机内存之前,有几个参数控制像素数据的处理。这些参数由三个命令设置:glPixelStore、glPixelTransfer和glPixelMap

glCopyPixels() 复制像素从帧缓冲

void glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type )

GLint x, GLint 指定要复制的窗口区域的左下角窗口坐标

GLsizei width, GLsizei height 指定要复制的矩形区域尺寸

GLenum type 指定要复制的类型   颜色 深度  模板.接收的参数:  GL_COLORGL_DEPTH, and GL_STENCIL

这个函数的行为类似于在调用glReadPixels()之后再调用glDrawPixels()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值