你会做穿越火线飞天透视挂的透视吗

下载栏目导航
您可能会喜欢的查看: 30035|回复: 44
首发Direct3D透视教程,教你如何做出自己的透视!CF
阅读权限30
在线时间 小时
结帖率: (0/2)
说明下我转的 不过还是要给钱& &做任务好辛苦的
大家好,来到挂海6个月了,终于做出了一些自己的东西。最近一直在弄D3D游戏的透视,被他弄得焦头烂额,很多时间都花在了解决代码错误的问题上。不过功夫不负有心人我取得了一些成果,在编写代码的过程当中参阅了大量的DirectX编程方面的资料。同时也在国外N多论坛做了一个名副其实的伸手党,了解和掌握了D3D程序实现透视的一些基础知识。在这里我把我自己在研究过程中的心得体会和一些经验大体整理了一下,只是希望能够找到对D3D感兴趣的朋友能够共同研究,话不多说了,下面开始咱们的教程。(说明一下,下面的内容都是我一个字一个字敲出来的,没有复制粘贴,希望KFD自重,帖子比较长,我先在WORD中写的,然后复制过来的)。
在看这篇教程之前,你最好有一些基本的C++的知识,此外还需要一些基本的DirectX编程的基础。我的教程呢分为两个部分,第一部分呢主要讲一些透视原理。第二部分主要讲透视dll的制作过程。
& & 首先来看第一部分,主要是讲解一些透视的原理,
在讲透视之前首先来说一下什么是Z轴缓冲
& &&&Z轴缓冲就是DirectX中的成像元素之一 ,他是一个深度缓冲,用来决定渲染对象的遮蔽关系 ,在计算机图形学中, 有时候通过硬件完成,有时候通过软件完成。 在观察被渲染对象的时候就出现这样一个问题, 如果一个对象在另一个对象的后面,并且距离观察者的距离较远那么我们是看不到他的。 Z轴缓冲也就是深度缓冲。
& &&&上面说的可能有点抽象我就直白的说一下吧: Z轴缓冲就是要告诉摄像机,如果他在一个对象的后面,就不用显示它了 ,如果他在这个对象前面,就得显示他。
现在根据上面所说的,你可能要说把Z轴缓冲禁用来实现透视就是了。但事实情况并不是这样。你会注意到,你会看到所有的东西甚至还有场景之外的东西也就是说你必须找到某一个对象,再选这个对象的时候来禁用Z轴缓冲。这就是: Strides(数据流中每个顶点所占内存的大小), NumVertices(渲染的顶点索引的跨度),和 PrimitiveCounts(渲染的图元个数)。
上面这三个就决定了透视到墙(物体)后你想看到的东西,在大部分情况下就是人物模型(也就是想弄人物透视)
如果直接禁用Z轴缓冲的话,那就是全图透视了,玩过AVA的都知道全图透视在冰冻工厂是可以使用的,不过在其他地图,或者可以说在其他游戏里,全图透视效果是很差的,所以要实现人物透视就必须找到游戏中的人物模型表示。例如,CF的人物模型表示为44和40,AVA(战地之王的人物模型标识为32),所以我们说的人物透视是必须找到人物模型的表示然后再禁用Z轴缓冲
下面我们来禁用Z轴缓冲了。
首先把人物模型标识来定义一下
#define PlayerBody&&( Stride == 44 || Stride == 40 )//游戏不同,对应的人物模型标示就不同,CF的就是44和40
& & 好了,上面的代码是对人物模型的标识进行了定义,下面就要开始D3D9中的DrawIndexedPrimitive函数来修改游戏中人物模型的渲染状态
下面的的代码就是在hook the DrawIndexedPrimitive 这函数之中
& &LPDIRECT3DVERTEXBUFFER8 Stream_D
&&UINT Stride = 0;
&&if (m_pD3DDev-&GetStreamSource(0, &Stream_Data, &Stride) == D3D_OK)
&&Stream_Data-&Release();
if(Chams)//这里的chams是透视开关
& && &if(Player)
//一旦游戏中Stride的值等于所设定的值,就开始执行以下代码:
& & DrawIndexedPrimitive(Device, Type, MinIndex,&&NumVertices, StartIndex, PrimitiveCount);
//在墙后面就是绿色
& & Device-&SetRenderState( D3DRS_ZENABLE,false );
& & Device-&SetTexture( 0, texGreen );
//禁用Z轴缓冲
& & DrawIndexedPrimitive(Device, Type, MinIndex, NumVertices, StartIndex,&&PrimitiveCount);
//游戏模型在墙前面的话(就是可以看见)
& & Device-&SetRenderState( D3DRS_ZENABLE, true );
//打开Z轴缓冲,并填充为蓝色
& & Device-&SetTexture( 0, texBlue);
& & DrawIndexedPrimitive(Device, Type,&&MinIndex,&&NumVertices, StartIndex, PrimitiveCount);
我们继续:
& &&&如果你想知道透视上色的代码是如何运行的,它其实是通过消息队列进行操作的。.
下面就是他的工作流程:
1 如果人物要被显示:
2 给人物上色为红色.
3 启用Z轴缓冲, 在物体前面的时候为红色。
4 禁用Z轴缓冲
5 在物体后面的时候就为黄色
6 Disable stencil shaders.(这个我暂时还没搞懂)
& &&&然后这样不断重复。说到重复,有人就会问了,什么是重复。我简单地说一下。游戏在渲染人物模型的时候,是一帧一帧的进行渲染的,放在显存中的中的每幅图像从后备缓冲区到前台缓冲区并呈现到屏幕上。打个形象的比喻,好比放幻灯片。速度慢了,可以看成是一张一张的,当速度很快时,就可以看成连续的画面。所以上面的渲染过程至少每秒要执行24次,要不然画面就会很卡。
&&下载 (95.76 KB)
&&下载 (52.91 KB)
& & 这是我在AVA中实现的透视效果图,当然了,这里我是以AVA为例子来讲解的,其他的FPS游戏都大同小异,AVA的透视半透和全透只是一个函数的差别,就是遮盖剔除函数。加上遮盖剔除函数,半透就可以变成全透
& &&&这就是透视的整个流程,其实上面只是写了最核心的人物透视,如果你还想添加其他功能,比如说准星,透视上色、字幕显示,功能菜单等等都可往里面添加函数,我会在教程的最后把D3D的透视模板发出来,大家想添加什么功能的话只要往里面加入代码就可以了
上面只是实现人物透视的最核心的部分,也是实现人物透视的实质内容。整个实现透视的流程为:
找到所需函数的地址 —& 修改函数地址(拦截API)  写入你想修改的代码(比如画准星,禁用Z轴缓冲,上色等操作)—& 返回正常值
找到你想要HOOK的函数地址,由于DirectX是COM组件,普通的函数HOOK是找不到这些函数的,我们必须用能HOOK&&COM对象的函数,这就是Detour,利用Detour我们就可以HOOK COM对象里的函数了。当然了除了上面的方法,还有其他的方法比如HotPatch。
& & pEndScene =&&(EndScene_)DetourFunction((PBYTE)VTable[ES],(PBYTE)pEndScene);
上面就是一个detour的使用例子,其实很多功能都是在这个函数里面实现的,例如画准星,菜单显示等等。那么第一个参数是怎么来的呢,这里我们就需要找到EndScene这个函数的地址。举个例子我们可以在EndScene里面去设置开关,画准星以及渲染方框
if(bTip)& & //bTip初始化为true ,注入成功进入游戏后直接显示
&&DrawFont( 600,50, D3DCOLOR_ARGB(255,0,255,255), &小键盘-& 0 文字提示, 1 准星开关,人物透视&);& && &
&&DrawFont( 600,70, D3DCOLOR_ARGB(255,0,255,255), & Coded By 顶级小白QQ:&);
if(crosshair)//画准星
&&D3DVIEWPORT9 viewP;& && && && && && & //先定义一个接口指针
& && &&&pDevice-&GetViewport( &viewP );& && & //获得屏幕宽度和高度
& &&&DWORD ScreenCenterX = viewP.Width / 2;//屏幕中心X位置
& &&&DWORD ScreenCenterY = viewP.Height / 2; //屏幕中心Y位置
& &&&D3DRECT rec16 = {ScreenCenterX-15, ScreenCenterY, ScreenCenterX+ 15, ScreenCenterY+1};//这个D3DRECT是一个结构体。就是指定了画的这条直线的范围,水平的那条线
& &&&D3DRECT rec17 = {ScreenCenterX, ScreenCenterY-15, ScreenCenterX+ 1,ScreenCenterY+15};&&//这个是垂直的那条线的上下两个点
& &&&pDevice-&Clear( 1, &rec16, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 0,&&0 );//clear方法可以指定使用某种颜色把后备缓冲区粉刷一遍(也可以是深度缓冲区,模板缓冲区)
& &&&pDevice-&Clear( 1, &rec17,D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ),0,&&0 );//要清空的矩形区域的数目(第一个参数)//要清空的举行的数组,和第一个参数决定了要清除的矩形区域的组合(第二个参数)
& &通过上面所说的就可以找到函数地址并进行HOOK..(这其中还有很多小细节需要注意,但由于篇幅的原因,我只大概的介绍这些)
好了,第一部分暂且讲到这里,如果你有不明白的地方建议你多去看看DirectX编程方面的资料。,由于帖子长度有限制,这篇贴子我就只介绍第一部分吧,我会在接下来的帖中介绍第二部分
& & 希望各位朋友能够多多给力,不要让这篇帖子沉下去。大家可能注意到了,这两张截图我都渲染了一个方框,但苦于找不到人物的坐标,所以在这里我也想找几位对D3D透视感兴趣的朋友(熟悉C++和DirectX编程)一块研究方框透视,毕竟一个人的力量有限。我QQ:
阅读权限30
在线时间 小时
结帖率: (0/2)
绝对值2精币 我跟你们说!&&这里可是没有的哦
(56.37 KB, 下载次数: 69)
18:39 上传
阅读权限10
在线时间 小时
结帖率: (1/1)
看不懂浪费我2金币
阅读权限30
在线时间 小时
结帖率: (0/2)
哦 你以为透视很简单? 所以说值得啊
阅读权限90
在线时间 小时
签到天数: 17 天结帖率: (4/4)
没钱啊,,,,,
阅读权限70
在线时间 小时
结帖率: (3/3)
呵呵,还首发.都是转自别的论坛的
阅读权限30
在线时间 小时
结帖率: (0/2)
wghai首发,看雪二发,精易三发
只不过精易不是原作者发的
阅读权限30
在线时间 小时
结帖率: (3/9)
我擦,都不知道什么东西来的!
阅读权限10
在线时间 小时
我擦,都不知道什么东西来的!
阅读权限150
在线时间 小时
结帖率: (1/1)
我擦 不是被骗了吧
精易论坛 - 有你更精彩 /1
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:@
Powered by
粤公网安备 25}

我要回帖

更多关于 穿越火线透视辅助2017 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信