Camera 如何修改DirectX相机

Camera 如何修改DirectX相机,camera,directx,direct3d,Camera,Directx,Direct3d,假设我有一个3D(但不是立体)DirectX游戏或程序。有没有办法让第二个程序(或司机)在游戏中改变摄像机的位置 我正在尝试构建一个头部跟踪插件或驱动程序,可以用于我的DirectX游戏/程序。惯性运动传感器会给我头部的位置,但我的问题是使用该位置数据来改变摄像机的位置,而不是头部跟踪的硬件/数学问题 到目前为止,我还没有找到任何关于如何做到这一点的方法,但iZ3D能够在原始相机附近创建两个相机,并将其用于立体效果,因此我知道DirectX中存在一些钩子/链接/连接,可以通过第二个程序操纵相机

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

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

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

如果我能让这个工作,我会释放代码


-Shane钩住Direct3D调用本质上就是钩住DLL调用。也就是说,它不是D3D的特殊功能,只是一种通用技术。尝试用谷歌搜索“hook dll”或从这里开始:。正如钩子经常发生的那样,有许多警告,您必须制作一个相当大的样板来满足钩子应用程序的所有需求

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

  • 预剪辑。几乎所有的游戏引擎都会过滤掉观景平面后面的对象。所以,当你们把相机旋转到一边时,你们将看不到你们期望在现实世界中看到的物体——它们只是并没有被发送到D3D,因为游戏不知道观察平面已经改变
  • 多次渲染。许多流行的后期处理效果都是在额外的过程中完成的(通过整个场景或只是部分场景)。镜子和“屏幕”是最为人所知的效果。如果不知道你在用什么相机操作,你很可能会破坏场景
  • 顺便说一句,#2是为什么立体模式不能与所有游戏100%兼容的原因。例如,在源引擎中,HDR场景在三个过程中渲染,如果您不知道如何区分它们,那么除了破坏游戏外,您将什么也不做。看看nVidia是如何实现他们的立体模式的:他们为每一款流行游戏制作了一个单独的钩子,即使使用这种方法,也不可能总是得到预期的结果