D3d fov(视野范围) 的理解

近日在学习对D3d的hook操作,目标是想对第三方的D3d程序进行添加Logo等修改,开始的时候对SDK October 2006里面的Tut06_Meshes进行hook,偶然发现当我把它的窗口拉大了之后,他们的backbuffer并没有发生相应的变化,还是保持createwindow是的大小,所以图像拉伸了之后很难看了,而且拉伸变形了。之后我悟出了两点道理:

1.backbuffer的问题确实是这样的,你必须自己在WM_SIZE中处理重新生成device,我粗略看了一下DXUT里面处理的代码DXUTChangeDevice,真他妈的要命,又长又烦。看来微软这时候的sdk还是没有好的解决方式给出来。留给开发者的是繁重的系统处理代码,开发者哪有时间去做他自己的应用啊?如果拿来跟今天苹果App开发的方便度比较,我想相信很多都会选择去“吃苹果”了。

2.图像变形的问题,则跟backbuffer无关的,而跟X,Y方向上的fov(视野范围)有关。像我看得这个例子Tut06_Meshes,他在设置投影矩阵时,把fov的比例限定为1.0了,那么窗口拉伸的时候(宽高比例不是1:1),图像自然就变形了。我有选了了另外一个例子StateManager,发现他的窗口拉伸之后能看到的东西(场景)更多了,而且没有变形。仔细研究里面的代码之后我发现,它使用了窗口的宽高比例作为fov的比例来设置投影矩阵。这样我的窗口开的越大,能看得场景越多了。

 

那这样讲来,事实上这个fov的比例是可以调整的,并不一定就是w/h,这点对于VR融合这是比较关键的地方,因为可以保持图像的比例不变性,又可以在宽屏融合中真正看到更大的场景。

 

还有一点想说的是,我曾想在device的SetTransform中hook到而修改其投影矩阵,但在看StateManager的时候才发现,这不是唯一的接口,还有shader这玩意!这可就真没办法了。

转载于:https://www.cnblogs.com/slowtech/archive/2012/08/31/2665013.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值