(转)对D3DXVec3Project 和D3DXVec3UnProject的认识

一下是我的学习笔记:

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;
原文地址:https://www.cnblogs.com/lancidie/p/1845862.html