OpenGL Rendering Pipeline
? Vertex?Operation顶点操作(平移、旋转、伸缩、光照) Each?vertex?and?normal?coordinates?are?transformed?by?GL_MODELVIEW?matrix? (from?object?coordinates?to?eye?coordinates). Also,?if?lighting?is?enabled,?the?lighting? calculation?per?vertex?is?performed?using?the?transformed?vertex?and?normal?data. ?This?lighting?calculation?updates?new?color?of?the?vertex. ? Primitive?Assembly图元装配(将基本的几何图元装配) After?vertex?operation,?the?primitives?(point,?line,?and?polygon)?are?transformed?once? again?by?projection?matrix(将3D转换成2D)?then?clipped?by?viewing?volume?clipping? planes(通过裁剪面进行裁剪)from?eye?coordinates?to?clip?coordinates.?After?that, ?perspective?division?by?w?occurs?and?viewport?transform?is?applied in?order?to?map ?3D?scene?to?window?space?coordinates.?Last?thing to?do?in?Primitive?Assembly?is?culling? test?if?culling?is?enabled.? 以上两步可以细节如下: Geometric?data?such?as?vertex?positions?and?normal?vectors?are?transformed?via?Vertex? Operation?and?Primitive?Assembly ?operation?in?OpenGL?pipeline?before?raterization?process. ? 物体坐标系-人眼坐标系-裁剪坐标系-标准设备坐标系--窗口坐标系 物体坐标系-人眼坐标系(物体坐标系-世界坐标系-人眼坐标系):平移、旋转、伸缩、光照 人眼坐标系-裁剪坐标系:将3D投影至2D并通过裁剪面裁剪至去头视锥体 裁剪坐标系-标准设备坐标系:对坐标值进行标准化(-1,1) 标准设备坐标系--窗口坐标系:对标准化的坐标进行适应屏幕像素的调整 ? Display?List Display?list?is?a?group?of?OpenGL?commands?that?have?been?stored?(compiled)?for?later?execution.? All?data,?geometry?(vertex) and?pixel?data,?can?be?stored?in?a?display?list.?It?may?improve?performance ?since?commands?and?data?are?cached?in?a?display?list.? Display?List相当于数据和命令的缓存,但是用的场景是固定的静态数据或者OpenGL命令(没有返回值), 比如静态画面的数据和用于生成此静态画面的命令。对于动态的数据或者OpenGL命令,用VBO要更好一点。 ? Pixel?Transfer?Operation After?the?pixels?from?client's?memory?are?unpacked(read),?the?data?are?performed?scaling,?bias,? mapping?and?clamping. These?operations?are?called?Pixel?Transfer?Operation.?The?transferred? data?are?either?stored?in?texture?memory?or ?rasterized?directly?to?fragments.? ? Texture?Memory Texture?images?are?loaded?into?texture?memory?to?be?applied?onto?geometric?objects.? Raterization Rasterization?is?the?conversion?of?both?geometric?and?pixel?data?into?fragment.?Fragments?are?a ?rectangular?array containing?color,?depth,?line?width,?point?size?and?antialiasing?calculations? (GL_POINT_SMOOTH,GL_LINE_SMOOTH,?GL_POLYGON_SMOOTH).?If?shading?mode?is?GL_FILL, ?then?the?interior?pixels?(area)?of polygon?will?be?filled?at?this?stage.?Each?fragment?corresponds?to ?a?pixel?in?the?frame?buffer.? ? Fragment?Operation It?is?the?last?process?to?convert?fragments?to?pixels?onto?frame?buffer.?The?first?process?in?this?stage ?is?texel?generation; A?texture?element?is?generated?from?texture?memory?and?it?is?applied?to?the?each ?fragment.?Then?fog?calculations?are applied.?After?that,?there?are?several?fragment?tests?follow?in?order;? Scissor?Test???Alpha?Test???Stencil?Test???Depth?Test. Finally,?blending,?dithering,?logical?operation? and?masking?by?bitmask?are?performed?and?actual?pixel ?data?are?stored?in?frame?buffer.? ? Feedback OpenGL?can?return?most?of?current?states?and?information?through?glGet*()?and?glIsEnabled()?commands.?Further?more,?you?can?read?a?rectangular?area?of?pixel?data?from? frame?buffer?using glReadPixels(),?and?get?fully?transformed?vertex?data?using?glRenderMode (GL_FEEDBACK).?glCopyPixels()?does?not ?return?pixel?data?to?the?specified?system?memory,?but? copy?them?back?to?the?another?frame?buffer,?for?example,?from front?buffer?to?back?buffer. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |