|
发表于 2004-8-19 16:59:00
|
显示全部楼层
Re: Re: Re: Re: Re: Re:关于2d引擎的3d加速的困惑
Civilian: Re: Re: Re: Re: Re:关于2d引擎的3d加速的困惑
还请您详细介绍,因为我没有用过vs
看来这是一个可行的方法
首先呢,请不要称呼我为'您',我的年龄还没到那个份上,听不习惯 [em10]
关于2d显示其实很简单,只要搞清楚原理就很容易了.
所谓光栅化前的几何变换,在d3d中无非世界变换,视变换,与投影变换.换句话说,送到光栅化操作的顶点都会认为是在投影空间内的坐标,投影变换后的坐标(x',y',z',w)与屏幕空间坐标对应关系是:
Screen_PositionX = ((x'/w)*0.5+0.5)*Screen_Width;
Screen_PositionY = (0.5-(y'/w)*0.5)*Screen_Height;
掌握这个原则就可以容易得出屏幕上任意一个点的齐次坐标(x,y,z,w)表示。对应到vs中,就不需要经过其他变换,直接把这个值输出到oPos中就可以将其设定到屏幕上的对应位置了。然后在像素流水线中设置相应的纹理等等操作(可以用FFP,也可以用PS)
这种方法可以使用硬件几何变换能力,比如要进行旋转,则得到旋转矩阵,用D3DX辅助函数得到对于z轴的旋转矩阵,转制后将其前两行输入vs的常量寄存器。然后在vs中用两条dp3就可以完成旋转。缩放,平移之类操作也可以类似完成。其余的类似alpha混合等效果可以用VS,结合像素流水线操作与frame buffer blend完成。
|
|