我有3d的模型压缩包,求ak大神e3d模型帮我做个正面,侧面和透视图

当前位置: >>>
Direct3D透视教程,教你做出属于自己的透视
大家好,我搞编程有一段时间了吧,终于做出了一些自己的东西。最近一直在弄D3D游戏的透视,被他弄得焦头烂额,很多时间都花在了解决代码错误的问题上。不过功夫不负有心人我取得了一些成果,在编写代码的过程当中参阅了大量的DirectX编程方面的资料。同时也在国外N多论
大家好,我搞编程有一段时间了吧,终于做出了一些自己的东西。最近一直在弄D3D游戏的透视,
被他弄得焦头烂额,很多时间都花在了解决代码错误的问题上。不过功夫不负有心人我取得了一
些成果,在编写代码的过程当中参阅了大量的DirectX编程方面的资料。同时也在国外N多论坛做了
一个名副其实的伸手党,了解和掌握了D3D程序实现透视的一些基础知识。在这里我把我自己在研
究过程中的心得体会和一些经验大体整理了一下,只是希望能够找到对D3D感兴趣的朋友能够共同
研究,话不多说了,下面开始咱们的教程。
&&&&在看这篇教程之前,你最好有一些基本的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&)
//&注意这个&"&||&"&是“或”的意思。意思就是说"PlayerBody&&等价于&44或者是40。
//这里的Stride即为游戏中的人物模型标识&&&&&好了,上面的代码是对人物模型的标识进行了定义,
下面就要开始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);
&&&&&&&&&&}
我们继续:
&如果你想知道透视上色的代码是如何运行的,它是通过消息队列进行操作的。.
下面就是他的工作流程:
•&&如果人物要被显示:&
•&&给人物上色为红色.&
•&&启用Z轴缓冲,&在物体前面的时候为红色。&
•&&禁用Z轴缓冲
•&&在物体后面的时候就为黄色&
•&&Disable&stencil&shaders.(这个我暂时还没搞懂)
然后这样不断重复。说到重复,有人就会问了,什么是重复。我简单地说一下吧。游戏在渲染人物模型的时候,
是一帧一帧的进行渲染的,放在显存中的中的每幅图像从后备缓冲区到前台缓冲区并呈现到屏幕上。
打个形象的比喻,好比放幻灯片。速度慢了,可以看成是一张一张的,当速度很快时,就可以看成连续
的画面。所以上面的渲染过程至少每秒要执行24次,要不然画面就会很卡。
这是我在AVA中实现的透视效果图,当然了,这里我是以AVA为例子来讲解的,其他的FPS游戏都大同小异,AVA
的透视半透和全透只是一个函数的差别,就是遮盖剔除函数。加上遮盖剔除函数,半透就可以变成全透
&&&&这就是透视的整个流程,其实上面只是写了最核心的人物透视,如果你还想添加其他功能,比如说准星,
透视上色、字幕显示,功能菜单等等都可往里面添加函数,我会在教程的最后把D3D的透视模板发出来,
大家想添加什么功能的话只要往里面加入代码就可以了
上面只是实现人物透视的最核心的部分,也是实现人物透视的实质内容。整个实现透视的流程为:
找到所需函数的地址&―&&修改函数地址(拦截API)&&写入你想修改的代码(比如画准星,禁用Z轴缓冲,
上色等操作)―&&返回正常值
&&&&&找到你想要HOOK的函数地址,由于DirectX是COM组件,普通的函数HOOK是找不到这些函数的,
我们必须用能HOOK&&COM对象的函数,这就是Detour,利用Detour我们就可以HOOK&COM对象里的函数了。
&&&&&pEndScene&=&&(EndScene_)DetourFunction((PBYTE)VTable[ES],(PBYTE)pEndScene);
上面就是一个detour的使用例子,其实很多功能都是在这个函数里面实现的,例如画准星,菜单显示等等。
那么第一个参数是怎么来的呢,这里我们就需要找到EndScene这个函数的地址,怎么找呢,有两种方法:
1、&&修改PE导入地址表的函数地址,使游戏在调用函数的时候转到我们的函数上来
2、&&直接找到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&);
//要清空的矩形区域的数目(第一个参数)//要清空的举行的数组,和第一个参数决定了要清除
的矩形区域的组合(第二个参数)
&&&//下面开始渲染方框
&&&&DrawBox&(100,100,100,100,D3DCOLOR_ARGB(255,&255,&0,&255),&D3DCOLOR_XRGB(&255,&0,&0&),pDevice);
&//红色准星
&&return&pEndScene(pDevice);//这里就是返回正常值
void&FillRGB(&int&x,&int&y,&int&w,&int&h,&D3DCOLOR&color,&IDirect3DDevice9*&pDevice&)&
&&&&if(&w&&&0&)w&=&1;&
&&&&if(&h&&&0&)h&=&1;&
&&&&if(&x&&&0&)x&=&1;&
&&&&if(&y&&&0&)y&=&1;&
&&&&D3DRECT&rec&=&{&x,&y,&x&+&w,&y&+&h&};&
&&&&pDevice-&Clear(&1,&&rec,&D3DCLEAR_TARGET,&color,&0,&0&);&
void&DrawBorder(&int&x,&int&y,&int&w,&int&h,&int&px,&D3DCOLOR&BorderColor,&IDirect3DDevice9*&pDevice&)&
&&&&FillRGB(&x,&(y&+&h&-&px),&w,&px,&&&&D3DCOLOR_XRGB(&255,&0,&0&),&pDevice&);&//填充颜色
&&&&FillRGB(&x,&y,&px,&h,&&&&&&&&&&&&&&&&D3DCOLOR_XRGB(&255,&0,&0&),&pDevice&);&
&&&&FillRGB(&x,&y,&w,&px,&&&&&&&&&&&&&&&&D3DCOLOR_XRGB(&255,&0,&0&),&pDevice&);&
&&&&FillRGB(&(x&+&w&-&px),&y,&px,&h,&&&&D3DCOLOR_XRGB(&255,&0,&0&),&pDevice&);&//红色方框
void&DrawBox(&int&x,&int&y,&int&w,&int&h,&D3DCOLOR&BoxColor,&D3DCOLOR&BorderColor,&IDirect3DDevice9*&pDevice&)&//渲染一个方框
&&&&DrawBorder(&x,&y,&w,&h,&1,&&&&BorderColor,&pDevice&);//&画方框边界
通过上面所说的就可以找到函数地址并进行HOOK..(这其中还有很多小细节需要注意,
但由于篇幅的原因,我只大概的介绍这些)
好了,第一部分暂且讲到这里,如果你有不明白的地方建议你多去看看DirectX编程方面的资料。
&&&&下面开始第二部分来说一说透视dll的制作:
&&&&Dll的制作我是翻译的国外论坛的几篇帖子,先说明一下需要的工具:
&&&Microsoft&Visual&C++&6.0&
&&&&&VS&2008也可以(本人用的就是VS2008)
&&&然后还需要DX的SDK
&&&&&DirectX&9.0&SDK&Update&-&(Summer&2009)
&&&&&D3D&Starter&Kit&3B&
这份代码我会打包放到附件里
在你下载并安装了C++6.0以及&D3D&SDK之后
你就可以使用&C++&用SDK&lib&文件了
好,打开&C++&6(无所谓)
打开“工具”
&选项&目录(Directories)
在路径那里选择SDK的文件夹
添加&Microsoft&Directx&9.0&SDK&include&文件夹&
如下图所示:(我机子上VC6.0和9.0都安装了,第一个图这是我自己截的图)
做完这些之后,&开始添加“lib”文件了
在“目录”这里
然后选择Microsoft&Directx&9.0&SDK&lib文件夹(我机子上VC6.0和9.0都安装了,
原文截图已经丢失,这是我自己截的图)
点击OK,这样工具就设置OK了
现在我们可以启动starter&kit这样我们就可以用它了
打开&Starter&kit&文件夹,&来到&D3D9&文件夹
如下图所示(我机子上VC6.0和9.0都安装了,原文截图已经丢失,这是我自己截的图)
现在打开&old_workspace&文件夹,&复制两个文件到D3D9&文件夹中(不知道是哪两个文件。。。澹
然后打开VC6.0,点击“文件”----“打开工作空间”----选择&TatniumD3D.dsw
做完这些之后你就可以去编译dll了。
大家可能注意到了,这两张截图我都渲染了一个方框,但苦于找不到人物的坐标,所以在
这里我也想找几位对D3D透视感兴趣的朋友(熟悉C++和DirectX编程)一块研究方框透视还有CF的透视,
毕竟一个人的力量有限。我QQ:
(责任编辑:简单的工作室)
------分隔线----------------------------
下面的安装教程,以C语言中文网提供的VC6.0安装包为例,请到这里下载:VC 6.0下载|VC ...
bool IsTopmost(HWND hwnd){ if (GetWindowLong(hwnd, GWL_EXSTYLE) WS_EX_TOPMOST) r...
MFC固然简单好用,但做出来的东西太臃肿。我决定不使用MFC直接用WIN32的API函数写个浏...
对于这个问题,大家应该都不陌生,写于此只是进行了归纳总结,算是一个备忘吧 定义快...
TCHAR strDll[MAX_PATH] = {0}; GetModuleFileName(NULL,strDll,MAX_PATH);//包含EXE...
要改成的新项目名:NewProj.dsp 1.在项目中找出 dsp,dsw,rc 文件,用 Uledit 等文本编...在电子工程世界为您找到如下关于“3D模型”的新闻
俄勒冈州威尔逊维尔,2016 年 10 月 26 日 & Mentor Graphics公司(纳斯达克代码:MENT)今天宣布,推出一套仅适用于 Solid Edge& 软件设计的完全嵌入式计算流体动力学 (CFD) 解决方案。Solid Edge& 是由 Siemens 产品生命周期管理 (PLM) 软件事业部开发的主流计算机辅助设计 (CAD)...
3D模型资料下载
3D模型.rar...
库文件,适合新手使用!...
FC插座、电解电容、电感、电位器、蜂鸣器等电子元件的3D模型,我使用的是sw2011,可用于电路板3D效果仿真,也可用于solidworks2011的入门学习...
收集了常用的3D模型,液晶显示屏,DIP芯片,IC插座,LM2596,按键,保险管,变压器,拨码开关,点阵,电感,电阻,电容,二极管,发光LED,蜂鸣器,光耦,接口,晶振,排针,排孔,散热片等等...
关于Altium Design中如何创建3D模型及3D设计教程Ver1.0...
3D模型变换的VC源程序,用户可在此基础进行科研创新...
一个能把x文件的3d模型导入的c++示范程序,适合初学者。...
SOT23 6引脚贴片...
altium 软件 PCB文件封装库及封装3D模型图...
相对非盲算法而言,盲算法因在水印检测时不需要传输原始载体而使其应用更为广泛。虽然盲水印算法的鲁棒性稍弱,但仍有提高的空间。该文提出一种3D 网格盲水印算法,利用伪随机数产生经过模型质心的直线,选取以直线与模型交点为球心的球形邻域作为嵌入对象,水印信息是通过抖动调制邻域内顶点的重心来嵌入的。因为重心依赖于球形邻域所有顶点坐标,所以需解决由调整后的重心逆向估计邻域内顶点坐标问题,文中给出相应的算法...
3D模型相关帖子
本帖最后由 suoma 于
10:49 编辑
接上一篇帖子
【LMR24220多轨电源参考板】开发板及芯片介绍 - 电源技术 - 电子工程世界-论坛 http://bbs.eeworld.com.cn/thread--1.html
使用WEBENCH电路设计如下
输入5-20V,输出1.8V,1A
输出电压波形...
谁会画3D模型,想要的好多模型都找不到,有些冷门的3D模型根本就找不到,还要到处求别人,我想自己画,有没有哪位大神帮帮我,非常感谢
谁会画3D模型 或者说,谁给我一份HF32F-5V-HS继电器和SMA天线座的3D模型,在网找了好长时间,在淘宝上也买了好多分,可是就是找不到我要的3D模型,希望大家能帮帮忙,非常感谢
[quote][size=2][url=forum.php?mod=redi...
谁能给我一个AD的3D模型库,最好是包含各种继电器的3D模型,非常感谢
3D模型 建议楼主要对eeworld网站再熟悉一下啊
下载中心AD有关的3D库多了去了:time:
http://download.eeworld.com.cn/e ... credits=0&kw=3D库...
& & 大家好,接着上次来继续把这次测评的东西做一下。上次是用了labview写了个串口分析软件,将ST SensorTile采集的传感器数据解析。那么解析的数干什么用呢?剩下我想应该就是数据处理的事了吧,但是干巴巴的数据,即使加了漂亮的算法,无非一个值变成另一个值,没什么意思。而我们这次做的是一个加起来9轴的一个传感器外加压强传感器。对于3轴来说,最贴近的就是3D展示,于是乎...
请问有谁知道AD软件怎么给元件添加3D模型吗?我想给板子弄个3D视图,但是不知道怎么添加
请问有谁知道AD软件怎么给元件添加3D模型吗? 先把3D元件库整好,,,,
英文输入法模式下,在键盘上按P,松开P,按B,这样就会蹦出来
[attach]230241[/attach]
选中1,然后点击2,再出来的窗口就是要添加的你的3D库了
楼主,您好。
有两种方法给板子添加3D模型:...
今天要找一个B3F按键的3D模型,找了半天在这个网站上找到了,有需要3D模型的可以去看看,注册一下,不需要下载积分,全部免费下载。
好东西不好意思私藏,拿出来和大家分享一下
http://www.3dcontentcentral.cn/
下面是我随便截的一个图片
如果是在Altium上使用,直接选择下载STEP格式的文件就OK啦
这是在Altium里看到的3D模型
& & 我将.step文件成功导入到PCB元器件里面了,并且将引脚与焊盘啥的都对应好了,编译后,查看,发现能正常显示3D模型,但我画完原理图导入PCB后在用3D视图显示时却都成了灰色的模型,原来添加的都显示不出来了,这是怎么了?。。。。不知道描述清楚没,,,看图吧。。。。求大神帮忙看看啊
求大神来看看怎么才能正常显示3D模型 叙述的真是有问题?既然导入发现能正常显示3D模型...
就如图上那样,为什么我一开始放置3d模型的时候它的宽度大约是343mil;可是经过我在3D视图中模型与焊盘的相对位置调整后以便使他们对应,却发现模型自己变大了,返回二维视图后一测量,宽度就变成了400mil了。我并没有调整模型的大小,而且我也不会调。这是怎么回事呀?求各位指导啊! 为什么3D模型自己变大了?
怀疑中间导入3D模型的时候,没有和元件的中心没有重合
qwqwqw2088 发表于...
本帖最后由 极力电源 于
17:41 编辑
如图所示,在右边的库预览中可以看到3D视图,但是为什么在pcb.lib中按下快捷键3后不可以看3D视图呢?3D模型是.stp的。求各位帮助呀。
求各位帮忙呀,3D视图显示不了啊。
点击这个图标能找到吗?
按V再按F...
ADI有没有DXP用元器件库,包括封装和3D模型?每遇到一个新器件都要自己画,太麻烦了。 ADI有没有DXP用元器件库,包括封装和3D模型 有库。至于3D不知道哪3D符合楼主丶要求不
寻到新的器件,可以到派尔library设计平台 去提交建库申请 来获取封装库。...
3D模型视频
视频内容包括:NI LabVIEW 8.6 发布目标,平台级DVD简化安装步骤,程序框图优化,通过Quick Drop 放置LabVIEW对象,演示:易用性及开发效率的改进,以Web Service方式远程调用VI,采用WI-FI数据采集设备实现远程检测,扩展在3D模型的可视化等。...
你可能感兴趣的标签
热门资源推荐3D max别人给的模型 怎么透视图那个窗口会出现3个矩形。 像是一个缩小的窗口,那个可以去掉的吗?怎么去掉_百度知道
3D max别人给的模型 怎么透视图那个窗口会出现3个矩形。 像是一个缩小的窗口,那个可以去掉的吗?怎么去掉
我有更好的答案
那个叫安全框
具体有什么用我就不解释了
在视口左上角 就是前视图 左视图那里右键 点取消安全框 OK
采纳率:38%
快捷键 显示/隐藏安全框 【Shift】+【F】,有点用处,防止相机打出去的,
为您推荐:
其他类似问题
透视图的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。拒绝访问 | www.cool-de.com | 百度云加速
请打开cookies.
此网站 (www.cool-de.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(4263407fbaf044ff-ua98).
重新安装浏览器,或使用别的浏览器没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 ak大神e3d模型包 的文章

 

随机推荐