楼主,请教个问题,观察矩阵是不是包含摄像机的坐标? 为什么我通过pDevice->GetTransform(D3DTS_VIEW, &view);,得到的矩阵都是1和0
whm630987633 发表于 2016-3-2 00:31
楼主,请教个问题,观察矩阵是不是包含摄像机的坐标? 为什么我通过pDevice->GetTransform(D3DTS_VIEW, &vi ...
是的。但是这是摄像机的坐标和旋转的逆矩阵。
本帖最后由 whm630987633 于 2016-3-6 13:36 编辑
0xAA55 发表于 2016-3-2 11:22
是的。但是这是摄像机的坐标和旋转的逆矩阵。
楼主,我在编写一个游戏插件,在3D游戏人物旁边显示血条,但是我现在拿到了人物的坐标,要把他的坐标转换到屏幕坐标。
bool WorldToScreen(LPDIRECT3DDEVICE9 pDevice, D3DXVECTOR3 *InOut)
{
D3DXVECTOR3 vScreen;
D3DXVECTOR3 PlayerPos(InOut->x, InOut->y, InOut->z);
D3DVIEWPORT9 viewPort = { 0 };
D3DXMATRIX projection, view, world;
pDevice->GetTransform(D3DTS_VIEW, &view);
pDevice->GetTransform(D3DTS_PROJECTION, &projection);
pDevice->GetTransform(D3DTS_WORLD, &world);
pDevice->GetViewport(&viewPort);
D3DXVec3Project(&vScreen, &PlayerPos, &viewPort, &projection, &view, &world);
if (vScreen.z < 1.0f && vScreen.x > 0.0f && vScreen.y > 0.0f && vScreen.x < viewPort.Width && vScreen.y < viewPort.Height)
{
*InOut = vScreen;
return true;
}
return false;
}
这是我的方法,但是转换出来的坐标总是不对,我提供一个0,0,0的坐标,他转换出来有好几千大的数字。
我刚上高中,C和数学学的都很吃力,最近在啃2本书,看了楼主的教程很有收获,但是实际操作上面又无从入手。
将这个顶点的X、Y值除以这个顶点的Z值,得到的X、Y对应屏幕上的坐标是[-1,1]区间的(超出屏幕范围的可能超过这个区间)然后把它的值变换到区间并乘以你屏幕的分辨率(注意把Y的值从[-1,1]换到区间的时候Y值要取负)。得到的值就是这个顶点在屏幕中的坐标。怎么样?是不是发现异常简单?
这句话有点不理解,之前看了几篇关于坐标转换的文章,,感觉楼主讲的和这个很类似,但是又理解不了。
看看学习下
whm630987633 发表于 2016-3-6 13:18
楼主,我在编写一个游戏插件,在3D游戏人物旁边显示血条,但是我现在拿到了人物的坐标,要把他的坐标转换 ...
刚上高中啊,不错。
我是在高二的时候开始研究3D图形学的。
:) 学习~ 学习~
看一看线代
看看!!!!!
学习学习 看看
查看源码,学习学习!
完全是膜拜在
果然还是对 数学有一定要求
虚心学习
先加复一下看看下载的东西.
感谢大神,在此学习了。
谢谢分享
好好学习,天天向上
学习学习 多谢多谢
厉害 :):)
666666666666666666666666