可以把OpenGL看成一条生产流水线,原料是场景、物体的顶点、表面细节等信息,产品是看起来有三维感觉的平面位图。
在OpenGL中是以面边界(B-REP)模型来描述物体的,或者说是使用多边形造型系统。在OpenGL中每个物体都只是一组平面,这组平面记录了该物体的表面。显然这些平面越小画出不断的物体越逼真。
生成本图的程序源码(
http://chinaaspdownload.xajh.net/delphiuser/zhuanlan/opengl_1/polymodalsrc.zip)
[需要TGLPanel]而物体表面的每个平面都只需要边界和平面上的图案就足以表示。在OpenGL中需要用户提供围绕平面边缘的线段的顶点参数、平面内图案的位图两组信息,术语称为Vertex(顶点)、Texture(纹理)。
如果表示物体的平面小到一个像素那么得到图像将会是极为真实的,然而这意味着天文数字般的计算任务。所以OpenGL三维图形程序设计很大程度上是在质量与速度之间折中的艺术。
在计算机三维图形学上还有诸如实体几何、Voxel等其它的方法,有很多朋友问过我医学图象处理方面的问题,其实在该领域里使用得更多的是Voxel方法,该方法可以很好在像素级计算生成剖面等的图像,另外象DeltaForce这个游戏也使用了该方法。目前还没有见过支持Voxel加速的硬件,所以DeltaForce是需要全部使用CPU计算的,而支持OpenGL硬件加速的显卡满大街都是,而且适当使用纹理也可以取得极为逼真的效果。
总而言之,OpenGL吃进去的是顶点和纹理,挤出来的是看上去很三维的平面位图。不知道什么是位图?!就是那个啥你在屏幕上看见那个呀。^o^ OpenGL流水线工作的原理是咋样的呢?那可是一个复杂的过程,下面简单描述一下,详细的自己看三维图形学的书去吧。
客户端(即咱们写的图形应用程序)==命令和数据==$#@62;服务器(流水线)==$#@62;帧缓冲区
客户在程序中所发的命令和数据并不是立即传到流水线执行的,流水线在收到glFlush/glFinish/SwapBuffers之类的命令之后才会真正开始执行命令加工数据,这些命令都有说明某一阶段处理相关的指令数据改送已经结束请求获得所需结果的含义。这就是所谓的客户/服务器模式。
衿鹘邮漳男┟詈褪荩衷跹谜庑┦萁心男┐砟兀看笾律峡梢砸来畏殖伤母鼋锥危?/p>
- 坐标变换,生成基本图元
- 裁剪,只留下视见范围内的部份
- 光栅化,生成图形片段
- 逐片段操作,生成素像
查看本文来源