如何修改DirectX摄像头

时间:2013-02-11 02:33:14

标签: camera directx direct3d

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

我正在尝试构建一个可用于DirectX游戏/程序的头部跟踪插件或驱动程序。惯性运动传感器会给我我的头部位置,但我的问题是使用该位置数据来改变摄像机位置,而不是头部跟踪的硬件/数学问题。

到目前为止,我还没有找到关于如何做到这一点的任何内容,但是iZ3D能够在原始相机附近创建两个相机并将其用于立体内容,所以我知道存在一些钩子/链接/连接进入DirectX,可以通过第二个程序进行相机操作。

如果我能够使用它,我将发布代码。

-Shane

1 个答案:

答案 0 :(得分:1)

挂钩Direct3D调用本质上只是挂钩DLL调用。即它不是D3D的特别之处,而只是一种通用技术。尝试谷歌搜索“钩子dll”或从这里开始:[C++] Direct3D hooking sample。由于钩子总是会发生这种情况,因此需要制作一个非常大的样板来满足钩子应用的所有需求。

尽管在游戏中使用相机进行操作通常会产生不好的效果。现代PC游戏至少有两个关键功能会严重限制你的想法:

  1. 预削波。几乎任何游戏引擎都会过滤掉观察平面后面的物体。因此,当您将相机旋转到一侧时,您将看不到您希望在现实世界中看到的对象 - 因为游戏不知道观看平面已经改变,所以它们不会被发送到D3D。
  2. 多次渲染渲染。许多流行的后期处理效果都是在额外的通道中完成的(通过整个场景或只是部分场景)。镜子和“屏幕”是最知名的这种效果。如果不知道你正在操作什么相机,你很可能只是打破场景。
  3. Btw,#2是立体模式与所有游戏不是100%兼容的原因。例如,在Source引擎中,HDR场景会以三遍传递,如果您不知道如何区分它们,除了打破游戏之外什么都不做。看看nVidia如何实现他们的立体模式:他们为每个流行的游戏制作一个单独的钩子,即使采用这种方法,并不总能获得预期的结果。