) v ?$ H% X& ~( F3 ?& L8.0 0 t8 Y1 a+ s2 a. A$ X5 ?9 m ; s; z. C) u3 s: Y2000年夏,DX8乘胜追击 ; T. t8 s$ e7 F/ F) g7 ^: D' \& g# l% g M8 k: K
这一次在功能上的进步毫不逊于DX7之于DX6,最大的突破在于引入了VertexShader和PixelShader。VertexShader是作用于每一个顶点的一种小程序,这种程序负责三维坐标变换以及顶点光照,贴图坐标和雾化参数的计算。而PixelShader是另一种小程序,这种程序负责对每一个像素,根据它所对应的贴图,材质,以及所采用的特效,计算其最终颜色。这两种程序都是靠显卡硬件执行,所以不占CPU的运算能力,这一点和D3D7所提出的Hardware TnL是一致的。和Hardware TnL相比,VertexShader的突破则是:Hardware TnL怎样来T(ransform)和L(it)的算法是固定的,程序员所能控制的只是这些算法的参数,比如变换矩阵和光源信息。PixelShader所要取代的是从DX6开始出现的MulitStages Texture pipeline。而VertexShader和PixelShader是可编程的,所以,它提供的灵活性非以前任何一个D3D版本可同日而语。2 A- d e+ I+ x& a
( B( ?+ N0 x( ~. C
除了Shader以外,D3D8还提供了其他若干高级特性,如VolumeTexture,Higher-Order Primitive。这两项特性并不实用,至少从目前看来是这样。但Shader的引入足以使D3D8熠熠生辉了。# K: [6 m# n) S9 f! W9 [
: I; }- z9 k! t5 g8 F* wAPI的布局也向着更合理的方向迈进。DDraw终于退出了历史舞台。DDraw的功能实际上是D3D的一个真子集,到了DX8时,D3D能够轻易的做所有DDraw能做的事情,而且做的更好,所以DDraw没有存在的价值了。 9 E( H5 F; W0 a5 d, z- J+ K4 { # @) B T8 E8 E# R8 P6 X {. U2 d这带来的一个额外的好处是,D3D的初始化过程变得格外的简捷明了。以前的混乱很大程度上来自D3D和DDraw相互掺杂,你首先要建立一个DDraw的interface,然后SetCooperateLevel,然后用DDraw创建一个Surface作为PrimaryBuffer, 然后用QueryInterface从DDraw interface里Query出一个D3D interface,最后调用DDraw的CreateDevice创建一个D3DDevice interface。这是多么繁琐和令人困惑的过程! 这种繁琐的过程从DX2开始就只是这样。DX8终于把这个过程变成了简单而清晰的两句话:+ `! E! M F% ~4 W; b/ H
" U- E- ]& Y7 h' m0 }' M
pD3D = Direct3DCreate8(SDK_VERSION);& h) J. \3 u5 l5 O/ ~$ f# x1 h0 y
, z3 Z3 w+ t p. Z. T, q2 lpD3D->CreateDevice(….&pDevice);8 ^6 E" V' B9 X# s. Y, |" U2 o
+ Y% e' ?+ {& I9 G; Z$ I
真是谢天谢地! , w1 Q W" |; V' Z8 i& l, U6 L' s3 d
其他主要的变化是,IDirect3D8 仅负责创建IDirect3DDevice8,而其他interface都由IDirect3DDevice8来创建。首次加入了IDirect3DIndexBuffer8,并加回了texture和surface等一些interface。(Texture interface在DX7例被DDrawSurface所替代)。 9 `, l; i' `; G7 O8 y4 S, s $ a! I7 s+ N7 K/ G3 o5 RDX8这样一个API就很令人赏心悦目了,相信如果Carmack拿这个版本和OpenGL比较,绝对会客气很多。 9 v ~, V9 a1 W, U' O s/ k9 l# s5 y6 L" p$ P2 m8 b6 T& ]; o+ u
2001年夏,Microsoft推出了DX8.1,较之于8.0主要的改进是增加了PixelShader 1.2/1.3/1.4。 R' x6 g% b8 w / H/ a5 k) G; f3 M+ W$ L5 r" f+ o9 u1 K
, ?( s/ y% s; n* d( Y! T
以前总是每年出一个全新的版本,到DX8以后,这个速度开始减缓,通常是出一个新版本以后的一两年中只出改进版。DX9亦是如此。主要的原因是自DX7以后,每一个DX版本(major release)实际对应于一代新的硬件设备,硬件的更新周期要长于软件,所以DX要放慢脚步,另外,游戏开发的复杂程度也越来越高,开发周期也越来越长,而开发商不是很喜欢在开发过程中更新API。 [/ l7 q& [- |2 E0 T, \( u, d' B1 X1 K: U3 U) y# O
4 q/ Q2 j$ j2 e, m$ }- F
1 ?) |3 C& y. s) j- d1 h3 ~. xDX8发布至今,无数3D游戏涌现,其中绝大多数是基于D3D的,基于OpenGL的屈指可数,DOOM3 / Never Winter Night / Medal of Honor。。。API之争胜负已判,Microsoft又一次笑到了最后。& R2 K( F. D8 a# B+ H7 w T
6 w& R+ s! r; n
- t( n* l6 O7 }! ~" ~7 {' U; G+ m; l5 n! c
" a) H5 Z% o* S D( E+ j$ u
" b: _/ `& B& h. G% j/ m! @" h
9.0$ X' ]; _# u! ]( j9 k ^: ?( ^