原文作者:千里马快乐编程
那3D空间某一个点投射在某个2D屏幕上的坐标是怎么计算的呢?请看下图:
上图中P代表3D空间中的一个点,设它的位置坐标值是x,y,z。现在要计算的是它在红色的代表屏幕的平面上的投射点P’的坐标值。其中O点代表视点。
两次强调,3D点的投射除了和它本身的坐标有关之外,还和视点位置、投射屏幕位置有关。这三个因素是互相影响的。忽略了任何一个因素都不能得出投射点坐标!
上图中绿色平面代表P经过的、和红色屏幕平面平行的一个平面。线段OAB和红色以及绿色平面都垂直。为了方便计算,我们让红色平面与x轴和y轴组成的平面平行。这样,线段OAB和z轴平行(并垂直于红色及绿色平面);线段BC以及AC’与x轴平行;线段PC以及P’C’与y轴平行。
因为BC与AC’平行、PC与P’C’平行。根据相似三角形的特点,我们很容易知道:
OA /OB = AC’ / BC = P’C’ / PC
所以,如果知道:
P点坐标x,y,z
O点坐标ox,oy,oz
红色平面的z坐标值pz
则:
OA = pz – oz
OB = z – oz
BC = x – ox
PC = y – oy
则P在红色屏幕平面投射点P’的x、y轴坐标值为:
P’的x坐标 =ox + AC’
根据相似三角形特点:AC’ = OA * BC / OB
P’的x坐标=ox + [(pz – oz) * (x - ox)/(z - oz)]
P’的y坐标 =oy + P’C’
根据相似三角形特点:P’C’ = OA * PC / OB
P’的y坐标=oy + [(pz - oz) * (y - oy)/(z - oz)]
下一节我们就用这个结论在scratch里画出一个3D的八面体来。
本站内容未经许可,禁止任何网站及个人进行转载。