一下是我的学习笔记:
D3DXVec3project//将3D物理坐标点变到SURFACE的2D点
现在我来解释一下
1.3D物理坐标,看例子
声明 点 A( a,b,c);
DEVICE->SETTRANSFORM( WORLD,MATRIX)
DRAW (A)
此时A(a,b,c)为物理坐标
若MATRIX为单位矩阵那么A为世界坐标的点
什么叫SURFACE的2D点
是指每个程序中都有个MAIN SURFACE (DIRECTDRAW 里的主绘图页相似);
现在的SURFACE是指MAINSURFACE的总体或者小部分;
typedef struct D3DVIEWPORT9 {
DWORD X;
DWORD Y;
DWORD Width;
DWORD Height;
float MinZ;
float MaxZ;
}
结构体中指明了此目标SURFACE 是MAINSURFACE的哪一部分
一般情况是真个MAINSURFACE即目标SURFACE,这个结构体此时的设置为
{
0,
0,
MAINSURFACE.WIDTH,
MAINSURFACE.HEIGHT,
0.0,
1.0
}
此函数变换的3D坐标的Z值为0;
/与之相反(但是又不完全相反)的是
D3DXVec3Unproject
是将目标SURFACE变到3D物理坐标
但是此时的物理坐标并不是以前那个对应的3D屋里坐标了
而是——
视截体近面或者远体面中的3D坐标的物理坐标---这句话的理解是
:所求 3DPOS= (3D世界坐标点与EYE(摄影机的点都是世界坐标点不受SET WORLD 影响)的连线 )与近或远视
截面(当然是世界坐标)的焦点 ,再然后转换到物理坐标(即为结果)
CSDN上那个家伙估计是
先得到的2D坐标然后一转成里近的面里而其近面为0;
(转)对D3DXVec3Project 和D3DXVec3UnProject的认识
最新推荐文章于 2020-12-24 07:08:56 发布