新闻中心

EEPW首页>模拟技术>设计应用> 3D图形芯片的算法原理分析

3D图形芯片的算法原理分析

作者: 时间:2013-09-22 来源:网络 收藏
bkit-text-stroke-width: 0px">  有了这个视锥体,就可以用它对已变换到眼睛坐标系下的场景进行选择。这不外有三种情况,对于那些完全落在视椎台之内的物体,直接通过透视变换将其变换到屏幕坐标系下;对于那些完全落在视椎台之外的物体不作进一步的处理而直接抛弃;对于那些与视椎台的面相交的物体则应作裁剪处理,裁取其位于锥台内的部分并用透视变换将它们变换到屏幕坐标系下。在屏幕坐标系下,Z坐标将作为判断物体面之间相互遮挡的唯一判据。

  注意,场景中的每个物体的每个三角形都要经过以上处理过程。

  四、象素处理

  经过以上一系列的变换之后,一个多边形已变换到屏幕坐标系下。将一个屏幕多边形在屏幕上绘制出来就是多边形的象素处理过程,它包括光栅化、隐藏面消除、明暗处理。光栅化、隐藏面消除、明暗处理是整个图形生成过程中最内层的处理。他们是三个二维插值过程。光栅化是用屏幕空间三角形的顶点坐标插值,以求得三角形的边所截取的三角形内扫描线段的端点坐标,并进而求得所截扫描线段上的象素坐标。隐藏面消除则是通过对屏幕空间三角形顶点的深度值(Z坐标)进行插值,从而获得三角形内扫描线段上每个象素的深度值。明暗处理是用同样的方法由顶点光强求得三角形内扫描段上每个象素的光强。这三种处理的算法具有相同的数学表示形式,只需将坐标、深度或光强代入该方程就可以得到相应的结果。总之,场景的绘制过程可概括为:

  对场景中的每个物体的每个多边形做几何变换将其变换到屏幕空间;

  对多边形内的每一个扫描段求出其端点及其上每个象素的坐标;

  对扫描段上的每个象素做隐藏面消除处理及明暗处理。

1.光栅化

  光栅化处理通过插值求得三角形内扫描段的x坐标的起点和终点。问题是何处是终点和起点?当使用实数坐标时在象素之内的何处进行采样,屏幕坐标是取整数还是保留小数精度?这些问题如果处理得不好,就会在多边形之间产生孔洞,产生重叠的多边形,这会在透明效果处理时产生严重问题。如果反走样处理不精确,则会在带有纹理的表面上产生纹理不连续现象。例如,如果对屏幕坐标取整,则屏幕多边形的顶点将延伸或缩回到离它最近的象素,这样多边形的大小将发生微小的变化,而且不能用密集采样进行反走样处理,动画中的“颤抖”现象便是由此而引起的。在象素内何处采样并不重要,重要的是对象素采样的处理必须一致。

  2.隐藏面消除

  全屏幕Z-Buffer(深度缓存器)算法已成为图形学事实上的标准隐藏面消除算法,他虽然简单但存储要求很高。Z-Buffer算法可看作是工作在三维屏幕空间。每一个象素有一个二维屏幕空间坐标( xs , ys )和由眼睛空间顶点的深度值插值而得到的z深度值。深度缓存器开始时被初始化为远处裁剪平面的深度,对每一个象素比较其插值得到的深度值与已存储在深度缓存中( xs , ys )处的值,如果该值小于存储值,则新计算的象素更靠近观察者。这时新计算的象素的明暗处理值将覆盖帧缓存中的旧值,深度存储器中的值也换成新计算的值。深度缓存器算法对场景数据库组织及场景复杂性没有限制。在处理复杂场景或物体时,应保证足够的深度精度。

  3.明暗处理

  首先计算多边形顶点的明暗参数,然后在多边形平面上进行插值。这样绘制出的物体不但具有很强的三维立体感,而且消除了用于近似曲面的多边形之间的公用边所形成的不连续特征。实现这一处理方式的算法有两种,一种称作Gouraud明暗处理,一种称作Phong明暗处理(均以发明者的名字命名)。这也是基于多边形的绘制日益受欢迎的一个重要原因。Gouraud明暗处理的速度快,但不能产生精确的高光效果,通常用在对速度要求高的场合,如飞行模拟、交互式CAD应用等。Phong明暗处理可以生成高质量的图像,但将耗费庞大的硬件资源。Gouraud明暗处理仅在多边形的顶点使用局部反射光照模型计算光强,然后使用顶点处的光强通过插值求出多边形内



评论


相关推荐

技术专区

关闭