首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改DirectX摄像机

如何修改DirectX摄像机
EN

Stack Overflow用户
提问于 2013-02-11 02:33:13
回答 1查看 1K关注 0票数 2

假设我有一个3D (但不是立体的) DirectX游戏或程序。有没有办法让第二个程序(或车手)在游戏中改变摄像机的位置?

我试图建立一个头部跟踪插件或驱动程序,我可以使用我的DirectX游戏/程序。惯性运动传感器会给我头部的位置,但我的问题是使用位置数据来改变相机的位置,而不是考虑到头部跟踪的硬件/数学问题。

到目前为止,我还没有找到任何关于如何做到这一点的方法,但是iZ3D能够在原始相机附近创建两个摄像机,并将其用于立体拍摄,因此我知道DirectX中存在一些钩子/链接/连接,这使得第二个程序可以对相机进行操作。

如果我能做到这一点,我将释放代码。

-Shane

EN

回答 1

Stack Overflow用户

发布于 2013-02-13 19:03:25

挂起Direct3D调用本质上就是连接DLL调用。也就是说,它对D3D来说并不是什么特别的东西,而只是一种普通的技术。尝试谷歌寻找“挂钩dll”或从这里开始:[C++] Direct3D挂钩示例。与钩子一样,有许多警告,您将不得不制作一个非常巨大的样板,以满足钩子应用程序的所有需求。

然而,在游戏中使用相机进行操作通常不会带来好的效果。现代电脑游戏至少有两个关键特点,这将严重限制你的想法:

  1. 剪裁前。几乎任何游戏引擎都会过滤掉在观看平面后面的物体。所以当你把相机旋转到一个侧面时,你就不会看到在现实世界中你期望看到的物体--它们只是没有被发送到D3D,因为游戏不知道观看平面发生了变化。
  2. 多次传递渲染。许多流行的后处理效果是在额外的传球中完成的(或者通过整个场景,或者仅仅是其中的一部分)。镜子和“屏幕”是最著名的这样的效果。如果你不知道你在用什么摄像机操作,你很可能就会打破这一场景。

顺便说一下,#2是为什么立体模式不能100%兼容所有游戏的原因。例如,在源引擎中,HDR场景是在三次传递中呈现的,如果您不知道如何区分它们,则只会破坏游戏。看看nVidia是如何实现他们的立体感模式的:他们为每一个流行的游戏制作一个单独的钩子,即使使用这种方法,也不总是能够得到预期的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14805120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档