D3DXVECTOR3 veyept;
veyept.x=m_game.viewx;
veyept.y=m_game.viewy+m_game.vy;
veyept.z=m_game.viewz-m_game.vz;
D3DXVECTOR3 vlookatpt;
vlookatpt.x=m_game.viewx;
vlookatpt.y=0.0f;
vlookatpt.z=m_game.viewz;
D3DXVECTOR3 vupvec(0.0f,1.0f,0.0f);
D3DXMatrixLookAtLH(&mview,&veyept,&vlookatpt,&vupvec);
D3DXMatrixPerspectiveFovLH(&mpoj,D3DX_PI/4,(float)D3D_WIDTH/(float)D3D_HEIGHT,1.0f,1500.0f);//投置投影距阵
D3DXMatrixTranslation(&mxyz,m_cmx.object[danqianmesh].m_xyz.x,m_cmx.object[danqianmesh].m_xyz.y,m_cmx.object[danqianmesh].m_xyz.z);
m_game.g_device->SetTransform(D3DTS_WORLD,&mxyz);
m_game.g_device->GetTransform(D3DTS_WORLD,&mwod);
D3DVIEWPORT9 viewpoj;
viewpoj.X=0;
viewpoj.Y=0;
viewpoj.Width=D3D_WIDTH;
viewpoj.Height=D3D_HEIGHT;
viewpoj.MinZ=0.0f;
viewpoj.MaxZ=1.0f;
D3DXVec3Project(&dx,&m_cmx.object[danqianmesh].m_xyz,&viewpoj,&mpoj,&mview,&mwod);
为什么老是不成功.获取的数字.[来源:GameRes.com]很大不知道.D3DXVec3Project这个函数到底怎么用.求高手指点....
D3DXVec3Projectp这个函数到底怎么用呀....怎么看到有人把第二个参数三个坐标都设为零,第二个参数是不是要转换的坐标吗.为什么要为零
7 个解决方案
#1
m_game.g_device->SetTransform(D3DTS_WORLD,&mxyz);
m_game.g_device->GetTransform(D3DTS_WORLD,&mwod);
你理解这两句是什么意思吗???
D3DXMatrixTranslation(&mxyz,m_cmx.object[danqianmesh].m_xyz.x,m_cmx.object[danqianmesh].m_xyz.y,m_cmx.
这个产生一个偏移m_cmx.object[danqianmesh].xyz的矩阵,且个世界矩阵,
你再求m_cmx.object[danqianmesh].xyz偏移了m_cmx.object[danqianmesh].xyz后,在view,proj变幻后的坐标?????
仔细想想吧!!!!!!!
m_game.g_device->GetTransform(D3DTS_WORLD,&mwod);
你理解这两句是什么意思吗???
D3DXMatrixTranslation(&mxyz,m_cmx.object[danqianmesh].m_xyz.x,m_cmx.object[danqianmesh].m_xyz.y,m_cmx.
这个产生一个偏移m_cmx.object[danqianmesh].xyz的矩阵,且个世界矩阵,
你再求m_cmx.object[danqianmesh].xyz偏移了m_cmx.object[danqianmesh].xyz后,在view,proj变幻后的坐标?????
仔细想想吧!!!!!!!
#2
这个程序写得太长了
求变幻后的坐标很简单
mat = world * view * proj;
new point = mul( point, mat );
求变幻后的坐标很简单
mat = world * view * proj;
new point = mul( point, mat );
#3
回二楼的.
我原本是想把这个物体放到3D空间去.然后取这个世界矩阵,因为我是多视区.所以单单用GetTransfrom取不到想要的世界矩阵.
三楼的MUL这个函数还是第一次见.汗...你这个point是POINT结构体对像吧
我原本是想把这个物体放到3D空间去.然后取这个世界矩阵,因为我是多视区.所以单单用GetTransfrom取不到想要的世界矩阵.
三楼的MUL这个函数还是第一次见.汗...你这个point是POINT结构体对像吧
#4
mul,是指vector与matrix相乘
我只是借用shader里的含义,你明白意思就行了
我只是借用shader里的含义,你明白意思就行了
#5
真是晕死,为什么要先set,后get?
直接=不行??????
直接=不行??????
#6
D3DXVec3Project内部是这么做的:
result=pos*WorldMatrix*ViewMatrix*ProjectMatrix*ViewPortMatrix;
而你的WorldMatrix是从pos变换来的,简单的理解起来,就变成了这样的:
result=pos*pos*ViewMatrix*ProjectMatrix*ViewPortMatrix;
所以pos被算了两次,结果当然不对了。
所以这里,要么WorldMatrix设为Identity矩阵,要么D3DXVec3Project的时候传入坐标设为(0,0,0)
result=pos*WorldMatrix*ViewMatrix*ProjectMatrix*ViewPortMatrix;
而你的WorldMatrix是从pos变换来的,简单的理解起来,就变成了这样的:
result=pos*pos*ViewMatrix*ProjectMatrix*ViewPortMatrix;
所以pos被算了两次,结果当然不对了。
所以这里,要么WorldMatrix设为Identity矩阵,要么D3DXVec3Project的时候传入坐标设为(0,0,0)
#7
谢谢六楼..
受教了.....
改了一下成功了....谢谢哈
等下再试一下MUL这个.呵呵这个这么简单......
受教了.....
改了一下成功了....谢谢哈
等下再试一下MUL这个.呵呵这个这么简单......
#1
m_game.g_device->SetTransform(D3DTS_WORLD,&mxyz);
m_game.g_device->GetTransform(D3DTS_WORLD,&mwod);
你理解这两句是什么意思吗???
D3DXMatrixTranslation(&mxyz,m_cmx.object[danqianmesh].m_xyz.x,m_cmx.object[danqianmesh].m_xyz.y,m_cmx.
这个产生一个偏移m_cmx.object[danqianmesh].xyz的矩阵,且个世界矩阵,
你再求m_cmx.object[danqianmesh].xyz偏移了m_cmx.object[danqianmesh].xyz后,在view,proj变幻后的坐标?????
仔细想想吧!!!!!!!
m_game.g_device->GetTransform(D3DTS_WORLD,&mwod);
你理解这两句是什么意思吗???
D3DXMatrixTranslation(&mxyz,m_cmx.object[danqianmesh].m_xyz.x,m_cmx.object[danqianmesh].m_xyz.y,m_cmx.
这个产生一个偏移m_cmx.object[danqianmesh].xyz的矩阵,且个世界矩阵,
你再求m_cmx.object[danqianmesh].xyz偏移了m_cmx.object[danqianmesh].xyz后,在view,proj变幻后的坐标?????
仔细想想吧!!!!!!!
#2
这个程序写得太长了
求变幻后的坐标很简单
mat = world * view * proj;
new point = mul( point, mat );
求变幻后的坐标很简单
mat = world * view * proj;
new point = mul( point, mat );
#3
回二楼的.
我原本是想把这个物体放到3D空间去.然后取这个世界矩阵,因为我是多视区.所以单单用GetTransfrom取不到想要的世界矩阵.
三楼的MUL这个函数还是第一次见.汗...你这个point是POINT结构体对像吧
我原本是想把这个物体放到3D空间去.然后取这个世界矩阵,因为我是多视区.所以单单用GetTransfrom取不到想要的世界矩阵.
三楼的MUL这个函数还是第一次见.汗...你这个point是POINT结构体对像吧
#4
mul,是指vector与matrix相乘
我只是借用shader里的含义,你明白意思就行了
我只是借用shader里的含义,你明白意思就行了
#5
真是晕死,为什么要先set,后get?
直接=不行??????
直接=不行??????
#6
D3DXVec3Project内部是这么做的:
result=pos*WorldMatrix*ViewMatrix*ProjectMatrix*ViewPortMatrix;
而你的WorldMatrix是从pos变换来的,简单的理解起来,就变成了这样的:
result=pos*pos*ViewMatrix*ProjectMatrix*ViewPortMatrix;
所以pos被算了两次,结果当然不对了。
所以这里,要么WorldMatrix设为Identity矩阵,要么D3DXVec3Project的时候传入坐标设为(0,0,0)
result=pos*WorldMatrix*ViewMatrix*ProjectMatrix*ViewPortMatrix;
而你的WorldMatrix是从pos变换来的,简单的理解起来,就变成了这样的:
result=pos*pos*ViewMatrix*ProjectMatrix*ViewPortMatrix;
所以pos被算了两次,结果当然不对了。
所以这里,要么WorldMatrix设为Identity矩阵,要么D3DXVec3Project的时候传入坐标设为(0,0,0)
#7
谢谢六楼..
受教了.....
改了一下成功了....谢谢哈
等下再试一下MUL这个.呵呵这个这么简单......
受教了.....
改了一下成功了....谢谢哈
等下再试一下MUL这个.呵呵这个这么简单......