对d3d9里面的函数挂钩实现透视

这篇博客探讨了如何利用hook技术针对d3d9的函数进行修改,以实现透视效果。虽然未经过实际游戏测试,但作者通过创建小型演示程序验证了其可行性。
摘要由CSDN通过智能技术生成
#include "stdafx.h"
HMODULE g_module = 0;				//当前模块的句柄
ULONG_PTR g_ulNewAddress = 0;		//DrawIndexedPrimitive函数地址
UINT g_nStride = 0;					//需要透视的人物标识

__declspec(naked) HRESULT WINAPI OriginalDrawIndexedPrimitive(
	LPDIRECT3DDEVICE9 m_pDevice,
	D3DPRIMITIVETYPE type,
	INT BaseVertexIndex,
	UINT MinVertexIndex,
	UINT NumVertices,
	UINT startIndex,
	UINT primCount)
{
	__asm
	{
		//前面这5个字节是调试获取的
		mov edi, edi
		push ebp
		mov ebp, esp

		//跳转去原始的DrawIndexedPrimitive函数
		mov eax, g_ulNewAddress
		jmp eax
	}
}

HRESULT WINAPI HookDrawIndexedPrimitive(
	LPDIRECT3DDEVICE9 pDevice,
	D3DPRIMITIVETYPE type,
	INT BaseVertexIndex,
	UINT MinVertexIndex,
	UINT NumVertices,
	UINT startIndex,
	UINT primCount)
{
	IDirect3DVertexBuffer9* pStreamData = nullptr;
	UINT nOffsetInBytes = 0, nStride = 0;
	if (pDevice->GetStreamSource(0, &pStreamData, &nOffsetInBytes, &nStride) == D3D_OK)
		pStreamData->Releas
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值