本帖最后由 n805 于 2025-1-4 22:04 编辑 & k+ R! ^+ R* C8 I) c P
# c" [; O8 q& y: v; ]$ K5 M/ X
* P, r$ r. f+ G4 }2 r
立体多边形(polygon)
3 _( ~7 s! Y) G( q土星通过将精灵图变形来展现多边形。这是上一篇文章已经提到过的事情。
8 Y' O/ P/ z$ a0 h% s三次元坐标通过旋转矩阵(请自行百度谷歌),在空间内自由移动;通过单应性变换,将坐标变为2次元。重复这一运算,将4个点变为2次元坐标,并以这四个坐标为顶点绘制四边形。这就成了立体多边形。这个多边形可以给四个顶点设置颜色计算出渐变,也可将事先准备好的图形贴上。只是这些运算需要时间,所以图像显示是能会有所下降。; M7 A- h, T# h. C$ F
PS则是可以选择绘制三角形或是四边形。但基本原理和刚才说的差不多。所以绘制多边形能力的差,和绘制精灵图能力的差是相同的。
+ e1 L/ R2 g+ w) G4 [上回写到,土星的图像显示能力接近PS2倍。虽然这个事实可能很意外,但土星绘制多边形的能力强于PS。6 a( W& Q. i6 I: B, A
这时候大家会想了「不是说土星比PS不擅长3D游戏么?」。6 F! z8 i8 ? Y- U! u! S2 N) ~
下文会详细说明,不过这里先提一下。计算在3D空间里元件的位置,并考虑摄影机的角度将这些元件的位置转换成2D坐标的处理能力,PS是压倒性地占上风。
' K. g5 g8 P2 Q9 s. g有部分人认为变形精灵图不算多边形。笔者不这么认为。土星绘制的也是多边形。但为什么会被称作「假多边形」呢?在土星上,CPU计算3D空间内的顶点,并将顶点转换成2D坐标。然后将任意的4个顶点作为四个角,使精灵图变形并显示。这样就能绘制出一个面。根据绘制需求,通过刚才的流程制作所有面,就绘制出了立体图形。
5 {- {+ \ P" Y/ D; G8 \上回在写精灵图时提到过,精灵图在描绘的时候可以选择「描绘线框」或是「填充颜色」还可以显示普通的图形,以及设定四个角的颜色绘制渐变与精灵图合成。这就相当于材质的有无及Gouraud着色法。: Z% N+ D" X; A. u( Q9 y3 q9 c6 a
精灵图的图形是以横向8个点为一个单位,纵向1个像素点为单位,增减大小。如果是2D游戏,并使用透明色的话,这样一个机制没有任何问题, 你几乎可以绘制各种各样的图形。但是要绘制3D的时候,这样一个机制就显得缺乏变通。你绘制的精灵图的尺寸很容易会和你想要制作的面有尺寸上的差异。于是就会出现这样一个结果,一个立体图形,但是每个面的材质,他们的解析度都稍有不同。! r+ T2 [! M8 I9 o5 f
虽然3D图形画面上会有很多立体多边形,需要绘制非常多面,但是开发工具通常情况下会解决这些问题。这个可以回头再谈。
0 M3 J! \7 D, f# o! Z1 h) {也就是说土星在绘制立体图形时,「计算顶点」和「绘制面」的操作是分离开来的,通过反复绘制面来生成「立体多边形」。土星的立体多边形绘制的原理就是这样了。并不是什么特别的方法。当年没有专门的3D演算硬件的电脑也是用这种方法来制作3D游戏。但是也没有人说那些电脑游戏不是立体多边形啊。
" m) K; W: S- S* F, }2 M# w一个题外话,笔者印象里图形加速卡像雨后春笋一样出现是从1993年开始。当时的一些公司,比如Cirrus Logic之流做的那些所谓加速卡其实都没有针对3D做什么特殊结构。直到3dfx推出了Voodoo,3D硬件才算是真正登场。笔者使用的电脑PC-9801 BX4搭载了Cirrus Logic的GD5430。解析度1024x760之后就只能使用16色,800x640的分辨率就开始变慢。Cirrus Logic真的不行,后来就放弃图形处理器市场开始做音频了。
' \7 d5 C c0 o1 g$ b+ A回过头来看看作为对手的PS吧。
p: E2 b, y6 u8 Y. V7 d" Y4 f相较于土星将「面」和「顶点」分开处理的方式,PS则是在硬件层面上就确立了「直接描绘面」的方式。PS的3D游戏大多会出现「多边形的面之间有间隙」这样一个现象,这是因为没有共享3D图形顶点所造成的。% K! P( i" w- m* m% M
在绘制多边形时,PS内部会讲所有的面作为「三角形」来处理,这是硬件内部的问题。当然,在绘制面的时候,四边形的效率会更高。在制作建模时,通常也会选择使用四边形来绘制。这样看来,PS和土星并没有那么大的差别。, R g( x8 [/ ?: {* y1 i: L
假设我们准备一个256x256的材质。然后指定材质在画面上相应的坐标位置(UV坐标)。坐标可以以1个像素点为单位设定,所以就不会出现不同地方的解析度不同的问题。这种方式在当时的3D-CAD中已经广泛应用,制作数据也更为简单。) r8 _0 p( G( u! _8 v, Z# W
没有图片进行说明的话还是很麻烦,所以找点图来。# ~1 T9 z% @" Q- J2 [0 ^
% { f7 {# a' {, x |