|
|
发表于 2005-10-9 10:00:00
|
显示全部楼层
Re:3D和2D混合使用的问题
引用卡马克老大的一句话:
To know it cold , have a deep understanding of the foundamentals.
为了简化问题,假设摄像机坐标位置世界坐标的原点,视野方向指向Z轴正方向,这样摄像机矩阵就是单位阵,也就是说某点的世界坐标就是摄像机坐标。
设人物的中心点为Pc( x, y, z ),人物被一个半径为R的边界球所包围。并且设人物最后被投影到的2D平面(也就是绘制2D背景的平面)的距离为d.那可以通过计算得到d. d= 0.5Width/tg(alpha/2), 其中Width为屏幕的宽,alpha为摄像机的视角。 现在可以计算人物中心点被投影到2D平面的位置,x/z = Xp/d 其中Xp就是投影后的位置, Xp = x/z*d, 由于此时的Xp范围为[-0.5Width, 0.5Width],因此需要继续变换,使得Xp的范围为[0, Width],只要在Xp上加上一个0.5Width就行了,而对于Yp是类似的, 不同的是Y轴的正方向是向下的,因此,需要用0.5Hieght -Yp.
最终得到的投影坐标
Xp = x/z*d + 0.5Width;
Yp = 0.5Hieght - y/z*d *ar; // ar = hieght/width(因为投影平面不是正方形)
最后,将R投影到2D平面,很简单 r/d = R/z,r = R/z*d;
最终得到了一个中心点在Xp,Yp,半径为r的边界圆,这时要判断碰撞就很容易了。
对于一般位置的摄像机,只要将人物的中心点变换成摄像机坐标就行了。方法是乘上一个摄像机矩阵。
|
|