D3D向的Vec3Project与Vec3Unproject函数的实现

这篇博客介绍了如何在D3D环境中实现从世界空间坐标到像素空间坐标以及从像素空间坐标到世界空间坐标的转换函数Vec3Project和Vec3Unproject。文章通过代码展示了转换过程,并提及这些函数在OpenGL中的不同使用情况。作者强调D3D坐标系更符合直觉,并且由于需要支持两套图形系统,因此需要自己推导这些函数。
摘要由CSDN通过智能技术生成

这怎么讲呢?

首先我们的数学库是D3D向的,不是不用OpenGL,而是D3D坐标系更加符合人的主观逻辑(至少我这样认为).这两个函数在D3D里和OpenGL里都有似乎OpenGL没有Unproject(我们是不用GL辅助库的,glut是什么?可以吃吗?),因为要支持两套图形,所以不能偏心用其中一个的,蛋疼啊.我的数学其实并不好,只好硬推了:

//世界空间坐标转像素空间坐标
VECTOR3 *Vec3Project(VECTOR3* pOut,const VECTOR3 *pV,const VIEWPORT *pViewport,
      const MATRIX* pProjection,
      const MATRIX* pView,
      const MATRIX* pWorld)
{

 
 MATRIX vw=(*pWorld)*(*pView)*(*pProjection);
 VECTOR4 in(pV->_x,pV->_y,pV->_z,1.0f);
 VECTOR4 out;
 Vec4Transform(&out,&in,&vw);
 VECTOR3 Temp;
 F32 HW=pViewport->_Width/2.0f;
 F32 HH=pViewport->_Height/2.0f;
 F32 DL=pViewport->_Far-pViewport->_Near;
 Temp._x=pViewport->_X+(out._x/out._w+1.0f)*HW;
 Temp._y=pViewport->_Y+(1.0f-out._y/out._w)*HH;
 Temp._z=pViewport->_Near+(out._z/out._w)*DL;
 if(pOut){
  (*pOut)=Te

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值