|
|
发表于 2007-3-11 13:57:00
|
显示全部楼层
Re: Re:物体的世界坐标如何变换到屏幕坐标?
iverson: Re:物体的世界坐标如何变换到屏幕坐标?
什么叫屏幕变换矩阵? 在dx sdk的sample里,没有看到什么屏幕变换矩阵啊?(它一般只有world matrix,view matrix 和project matrix)
从局部坐标到世界坐标到相机坐标应该都没什么问题。
理论上,project 是指将相机坐标空间的点投影到视平面上。
屏幕变换是指将视平面上的坐标变换到屏幕坐标。
视平面一般是采用归一化的坐标,即范围是2X2。x,y坐标的范围都是[-1,1]。从视平面到屏幕坐标(范围是:x [0,screenWidth-1] y[0, screenHeight-1])的变换是2d变换(包括平移和缩放)。
视平面的宽高比要等于屏幕宽高比,所以如果屏幕不是方的,归一化视屏面的范围就不是2X2了。(固定x [-1,1] , y就是[-1/宽高比,1/宽高比])
这就要在投影时将视平面的投影坐标进行缩放。(比如x不变,y乘以宽高比)将视平面坐标缩放到2X2。此时的视平面是变形的。然后在屏幕变换中。视平面x坐标缩放screenWidth倍,y坐标缩放screenHeight倍。(注意这个缩放也是不成比例的)由于之前y坐标乘了宽高比(即screenWidth/screenHeight)。所以等于都缩放了screenWidth倍。抵消了之前的变形,所以就得到了正确的屏幕坐标。
我想之所以搞这么麻烦(两次变形,以毒攻毒,负负得正),只是为了将视平面归一化。这样比较容易进行齐次坐标空间裁剪吧。
有时候,会直接将相机空间坐标变换到屏幕坐标,也就是这两步合并了。但也叫投影,尽管已不是纯粹的投影。
说得不对的地方,敬请指正。 |
|