求助 如何通过 D3DTS_WORLD 算出 实际的物理坐标

diybl 2014-08-07 02:02:24
pd3dDevice->GetTransform(D3DTS_WORLD,&matWorld);
pd3dDevice->GetTransform(D3DTS_VIEW,&matView);
pd3dDevice->GetTransform(D3DTS_PROJECTION,&matProj);


怎么才能得到实际的物理世界坐标呢?x y z
...全文
339 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianghushangxinke 2016-09-20
  • 打赏
  • 举报
回复
楼主,你最后错出来没?
曲面细分 2015-07-07
  • 打赏
  • 举报
回复
引用 4 楼 candycat1992 的回复:
你的模型呢,没有读顶点吗
pd3dDevice就是啊
彩阳 2014-08-08
  • 打赏
  • 举报
回复
给你一段代码看看: #include <iostream> #include <d3dx9.h> #pragma comment( lib, "d3dx9.lib" ) int main( int argc, char** argv ) { D3DXVECTOR3 aVector( 1.0f, 0.0f, 0.0f ); D3DXVECTOR4 outVector; D3DXMATRIX aMatrix; D3DXMatrixTranslation( &aMatrix, 1.0f, 0.0f, 0.0f ); D3DXVec3Transform( &outVector, &aVector, &aMatrix ); std::cout << "The output vector is: (" << outVector.x << ", " << outVector.y << ", " << outVector.z << ")"; return 0; }
diybl 2014-08-07
  • 打赏
  • 举报
回复
难道 原始的 YourObjectPosition 不是 0,0,0 吗
diybl 2014-08-07
  • 打赏
  • 举报
回复
YourObjectPosition 你是说这个 在顶点里面有信息?
  • 打赏
  • 举报
回复
你的模型呢,没有读顶点吗
diybl 2014-08-07
  • 打赏
  • 举报
回复
YourObjectPosition 难道没有 在 matWorld 里面吗? 那么他会在 d3d9 哪个api里面能获得到呢
  • 打赏
  • 举报
回复
一个模型的渲染主要经过了Model(大概就是你这里的World)、View、Projection(MVP)三个矩阵相乘后的结果计算而得屏幕上的像素位置。如果你说的物理坐标原点不在摄像机处,在三维空间的,那就是楼上所说的啦 具体可以看这篇文章,介绍的很详细了,好好看看会很有帮助 http://www.opengl-tutorial.org/zh-hans/beginners-tutorials-zh/tutorial-3-matrices-zh/
diybl 2014-08-07
  • 打赏
  • 举报
回复
奇怪了 DrawIndexedPrimitive 在调用这个函数的时候 每次获得的 matWorld 都会有点偏差 有的时候还会获得一个单位矩阵
  • 打赏
  • 举报
回复
怎么知道不对的,应该是什么,输出是什么
彩阳 2014-08-07
  • 打赏
  • 举报
回复
我觉得是: matWorld * YourObjectPosition
diybl 2014-08-07
  • 打赏
  • 举报
回复
D3DMATRIX mat; m_pD3Ddev->GetTransform(D3DTS_WORLD, &mat); x = pTmpVertextData->x * mat._11 + pTmpVertextData->y * mat._21 + pTmpVertextData->z * mat._31 + 1.0f * mat._41; y = pTmpVertextData->x * mat._12 + pTmpVertextData->y * mat._22 + pTmpVertextData->z * mat._32 + 1.0f * mat._42; z = pTmpVertextData->x * mat._13 + pTmpVertextData->y * mat._23 + pTmpVertextData->z * mat._33 + 1.0f * mat._43; pTmpVertextData 是顶点坐标 算出来的 还是不对
  • 打赏
  • 举报
回复
你这次真的确定什么都没动么。。。
diybl 2014-08-07
  • 打赏
  • 举报
回复
是我看错了 不好意思 只是我现在这边 算出来的 坐标还是跟游戏本身的坐标有些差别 站那不动 坐标都会变
  • 打赏
  • 举报
回复
你确定?。。为什么我搜的就是乘号。。。他们肯定会封装这么简单的功能的吧。。。
diybl 2014-08-07
  • 打赏
  • 举报
回复
好像不是简单的乘 http://msdn.microsoft.com/en-us/library/bb199526.aspx 这里有个c#实现的api 不知道 c++下 是怎么实现的
  • 打赏
  • 举报
回复
这就是个矩阵乘法操作,我没用过Dirext,但矩阵乘很常见吧,你学习的时候肯定经常碰到,一般一个操作符就解决了 Dirext好像使用行向量,因此是 向量*矩阵,也就是上面那个式子反过来计算 你会问这些问题说明你对矩阵变换还不是很清楚,强烈建议你看下之前给的那个链接,如果你要继续学习Dirext的话,这些都是必不可少的呦
diybl 2014-08-07
  • 打赏
  • 举报
回复
版主 matWorld * YourObjectPosition 这个用 函数 该怎么写 dx里面 好像没找到这个函数 输入 D3DXMATRIX D3DXVECTOR3 然后 输出一个 D3DXVECTOR3
  • 打赏
  • 举报
回复
哦,我以为是顶点。。。那就是啦

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧