gpt4 book ai didi

c++ - 在现有图形应用程序上绘制 DirectX/OpenGL 图形

转载 作者:可可西里 更新时间:2023-11-01 09:20:44 27 4
gpt4 key购买 nike

首先,如果这个问题已经得到解答,让我马上道歉,因为我可能只是在不规则的搜索条件下搜索它。

我希望在使用 DirectX 绘制自己的图形(游戏)的应用程序中绘制 2D 图形。我将通过将 DLL 注入(inject)应用程序(我对此没有疑问,我可以做到)并绘制我的图形来做到这一点。但我不太擅长 DirectX/OpenGL,所以我有几个基本问​​题要问。

1) 为了在该窗口上绘制图形,我是否需要从进程内存中获取预先存在的上下文,某种绘制场景的句柄?

2) 如果应用程序使用 DirectX,我可以在上面使用 OpenGL 图形吗?

请告诉我如何解决这个问题。任何细节将不胜感激:-)提前谢谢你。

最佳答案

您注入(inject) DLL 的方法确实是正确的方法。 FRAPS 等程序使用相同的方法。我无法告诉您有关 Direct3D 的方法,但对于 OpenGL,您需要做以下事情:

首先你必须 Hook 到 opengl32.dll 的函数 wglMakeCurrent, glFinishwglSwapBuffers 这样你的DLL 通知何时选择 OpenGL 上下文进行绘图。将他们的调用传递给操作系统。当 wglMakeCurrent 被调用时,使用函数 GetPixelFormat 来查明窗口是否是双缓冲的。还可以使用 glGet... OpenGL 调用来找出您正在处理的 OpenGL 上下文版本。如果您有旧版 OpenGL 上下文,则必须使用与现代 OpenGL-3 或更高版本核心上下文不同的方法来绘制叠加层。

如果是双缓冲窗口,请在 wglSwapBuffers 上使用 Hook 来执行进一步的 OpenGL 绘图操作。 OpenGL 只是笔和画笔(以点、线和三角形的形式)在 Canvas 上绘图。然后通过 wglSawpBuffers 调用使一切可见。

在单个缓冲上下文而不是 wglSwapBuffers 的情况下,要 Hook 的函数是 glFinish

使用 OpenGL 绘制 2D 就像禁用深度缓冲和使用正交投影矩阵一样简单。您可以随时更改 OpenGL 状态。 只要确保在离开钩子(Hook)之前将所有内容恢复到原始状态即可。

关于c++ - 在现有图形应用程序上绘制 DirectX/OpenGL 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18033536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com