<h2>第二章 使用OpenGL</h2> <h3>(一)OpenGl 的工做原理</h3> <p>OpenGL是过程式的而非描述性的图形API。开发人员只须规定必要的步骤去实现显示的效果。这些步骤包含了许多OpenGL的命令。这些命令用于绘制许多的几何图元,例如点,线,多边形。OpenGL支持光照和阴影,纹理映射,混合,透明效果,动画,还有许多特殊的效果。</p> <h3>(二)通用实现<sub></sub></h3> <p>通用实现是指软件实现,软件实现的好处是跨硬件。可是性能不佳,没有硬件加速。</p> <p>软件通用实现的OpenGL API所处的位置以下图:</p> <p><a href="http://static.oschina.net/uploads/img/201309/02231053_ukqK.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201309/02231053_2vLk.png" width="510" height="213" /></a></p> <p>其首先用软件实现去光栅化绘制3D图像,而后传给GDI,GDI负责与显示设备交互显示图像。</p> <h3>(三)硬件实现</h3> <p>OpenGL API调用直接传给硬件驱动。硬件驱动不会把图形传给Windows GDI进行显示。而是直接与图形显示设备交互。</p> <p><a href="http://static.oschina.net/uploads/img/201309/02231054_HdbX.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201309/02231056_ol8a.png" width="551" height="214" /></a></p> <h3>(四)图形管线</h3> <p>管线是用于描述一系列的处理流程。下图是一个简化版本的图形管线</p> <p><a href="http://static.oschina.net/uploads/img/201309/02231056_Bukq.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://static.oschina.net/uploads/img/201309/02231056_CBnZ.png" width="530" height="148" /></a></p> <p>一个应用程序调用了许多OpenGL的API,这些命令被传送到Commond Buffer</p> <p>这个buffer填充着许多命令,顶点数据,纹理数据等等,当缓冲区的数据被刷新时,命令和数据就被传递给管线的下一阶段。</p> <p>顶点数据首先会进行变换和光照。这个阶段完成以后,数据被传输到管线的光栅化部分。最后图像被放入到帧缓冲区。</p> <p>早期的OpenGL硬件加速器只是对光栅化阶段进行了加速。然而如今的硬件加速器都提供了变换和光照阶段。</p>性能