魔兽争霸3操作界面ui操作界面主题

& & &&由于经常玩Dota,11平台出来以后,发现War3界面上有一行字,“游戏正在进入....”。就想到了它的实现方式,HOOKAPI。《Windows核心编程》中有关于hookapi的描述, 以前都是----先改写原函数的前5个字节,跳转到自己的函数,还原原函数,调用,结束。前段时间看到微软的这个Detours库,实现更方便,多线程时更安全。
& &Detours库,可以在微软官方下载,完全免费。
& &现在来实现war3写屏。
& &War3使用了directx 8的库。Hook的第一个函数是Direct3DCreate8(UINT SDKVersion); 我们先下载DirectX 8的SDK。
& &步骤,先新建一个Win32 DLL动态链接库工程。包含头文件
#include &detours.h& //微软的hook库#include &d3d8.h& //directx 必须包含的头文件#include &d3dx8.h&//directx
必须包含的头文件#pragma comment(lib,&detoured.lib&)
//微软的hook链接库#pragma comment(lib,&detours.lib&)
//微软的hook链接库#pragma comment(lib,&d3d8.lib&)//directx链接库#pragma
comment(lib,&d3dx8.lib&)//directx链接库
先获取Direct3DCreate8函数的真实地址。有多种方法,下面方法是最简单的。
&/pre&&pre name=&code& class=&cpp&&static IDirect3D8 * (WINAPI * TrueDirect3DCreate8)(UINT SDKVersion) = Direct3DCreate8;使用Detours来Hook函数异常简单
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueDirect3DCreate8,myDirect3DCreate8);
DetourTransactionCommit();代码不过多解释,Detours例子上直接改的。重要的是DetourAttach(&(PVOID&)TrueDirect3DCreate8,myDirect3DCreate8);其它语句是它帮你处理事务,这个函数把Direct3DCreate8替换成我们的,myDirect3DCreate8 但是TrueDirect3DCreate8的值并未改变,依然保留
了 Direct3DCreate8的函数的真实地址。在我们的myDirect3DCreate8函数中,不应调用原函数,而是p3d
= TrueDirect3DCreate8(SDKVersion);。
因为原函数地址已经被我们改变。
我们在新函数中继续hook这个CreateDevice函数如获取画图指针。方法同上
pCreateDevice=(void*)*(DWORD*)(*(DWORD*)p3d + 0x3C);//获得IDirect3D8::CreateDevice的地址指针
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pCreateDevice,MyCreateDevice);
DetourTransactionCommit();
请注意这个函数地址的获取方式,我是在调试CreateDevice这个函数是获得的 0x3C这个偏移。
hook后在我们的函数中继续hook EndSense函数,并在函数中画出我们自己的文字。
pEndSense=(void*)*(DWORD*)(*(DWORD*)lpp3d + 0x8C);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pEndSense,MyEndSense);
DetourTransactionCommit();
d3df-&DrawText(
FPSString,&
-1, // size of string or -1 indicates null terminating string
&rect, // rectangle text is to be formatted to in windows coords
& & & & DT_LEFT, // draw in the top left corner of the viewport
0xff00ff00); & & &// black text
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:352次
排名:千里之外对魔兽争霸3画面设置的一些研究
本人从2002年混乱之治出来时就开始玩War3,到现在已经7年半了。说起来我并不适合玩竞技游戏,魔兽水平一直在中下徘徊,现在主要玩DotA,水平亦是如此。
  然而,作为一名硬件爱好者,我对魔兽画面设置颇有研究,现拿出来与大家分享。希望大家在保证流畅运行游戏的同时享受到优质的画面。
  实验平台:AthlonXP2500+、256M DDR333和256M
DDR400两条内存混插组成双通道512内存(人品不错)、镭9600级别的显卡(核心镭9700移动版,相当于级别,和台式9700差距很大)
  操作系统:WindowsXP SP2
  游戏:3冰封王座1.20E
一:何谓流畅?
  这是一款RTS游戏,所以对FPS(帧速率,或者叫每秒帧数)的要求不像射击游戏那么高,一般平均FPS有25即可(我国PAL制式的电视信号为25帧每秒,大家不觉得卡吧?),极端情况下20的FPS也是可以接受的。
二:DirectX3D还是OpenGL?
  魔兽3是同时支持D3D和OpenGL的,默认是DirectX8.0,但实际上只用到了DX7的特效;如果在快捷方式里加上一条“空格-OpenGL”则启动时使用的是OpenGL模式。个人感觉OpenGL的画质要稍好于D3D,流畅度差不多。这是在我的ATI显卡上得出的结果,而ATI卡的OpenGL性能一向较弱,如果换了nVidia的显卡,OpenGL下的性能应该会更好。还有一点值得注意,OpenGL模式下很少会出现鼠标“飘”或者很粘的现象,个人猜测是因为D3D8取消了DirectDraw,2D图像是作为3D平板上的贴图来渲染的,所以鼠标箭头是会随画面卡一起卡的;而OpenGL中2D和3D是分别渲染的,所以即使主画面很卡,鼠标箭头也不会卡,这无疑对我们的操作有很大好处。
  综上所述,我建议游戏运行时不够流畅的朋友使用OpenGL模式。很多朋友反映使用OpenGL模式会出现一些画面上的问题,比如字体不清楚。所以如果你的机器在DirectX模式下跑魔兽3就很流畅,就不建议使用OpenGL模式了。另外,字体不清楚的朋友可以试试FontCraft这个修改魔兽3字体的工具。
(下图)如何在快捷方式里加参数。注意-OpenGL前有个空格
(下图)如何在浩方或其它平台上改参数
三:分辨率问题
  一般来讲,分辨率是影响一个游戏画面好坏的主要因素。15寸CRT显示器的最佳分辨率一般?00X600,17寸CRT是寸CRT是寸非宽屏液晶是寸19寸非宽屏液晶是。设置分辨率时一般应优先考虑满足你的显示器的最佳分辨率,尤其是液晶显示器,牺牲其它效果也要尽量满足。对于宽屏显示器,因为魔兽3不支持宽屏分辨率,所以无法达到宽屏显示器的最佳分辨率。可以检查你的显卡驱动设置里是否有“保持长宽比”的选项。此选项可以令显示器使用中间的部分像素显示4:3的画面。如果没有,可以使用-Windowed参数以窗口模式启动游戏,但这会带来一些操作上的问题并造成一定的性能下降,当然习惯就好。
  以下是我用魔兽编辑器编的一张地图,用来测试各种情况下的FPS。这张图使用Lost
Temple的地形,对战双方各有25个单位,基本可以代表对战是交战的场面。中间的生命之泉我加强了它的生命恢复效果,还给它加了一个防御加1000的专注光环,这样这些单位就可以一直打下去而不会中途死掉。
(下图)Direct3D下分辨率无反锯齿无各向异性过滤特效全开 FPS:
(下图)OpenGL下分辨率无反锯齿无各向异性过滤特效全开 FPS: 32
 OpenGL下分辨率无反锯齿无各向异性过滤特效全开 FPS: 35
 OpenGL下800X600分辨率无反锯齿无各向异性过滤特效全开 FPS: 36
  魔兽3支持16位和32位两种色深。选项里的那个32指的是色深。16位色是指同屏可以显示2的16次方种颜色,32位就是2的32次方种。
(下图)OpenGL下分辨率无反锯齿无各向异性过滤16bit色深其余特效全开
  相对于32位色深的FPS提升是很明显的。至于效果差在哪里,那要看显示器和各位自己的眼睛。如果看不出什么区别,那就用16位色吧。
五:模型细节
  模型精度如果为高的话,游戏引擎会照原样把模型渲染出来;如果为“中”或“低”,引擎会减少三角面以获得更快的速度。
(下图)Direct3D下分辨率无反锯齿无各向异性过滤模型精度“中”其余特效全开
  FPS提升不大,建议还是选“高”吧。如果你喜欢玩一些带过场的战役类的地图,这个对单位近看时的样子影响很大。
(下图)女巫_模型精度高,看上去不错
(下图)女巫_模型精度中,已经惨不忍睹了
(下图)女巫_模型精度低,……
  另外,模型精度选项对底下那个动态头像没影响,它们都是按最高精度渲染的。
(下图)从左到右模型精度选项分别是高中低,可以看出没什么变化
六:动画质量
  这个选项决定了单位特殊动作出现的频率,如剑圣的盘腿坐、恶魔猎手的金鸡独立。
  本选项和显卡无关。将此选项设为“低”可以略微降低CPU占用率。如果你的CPU比暴雪要求的最低配置好不了哪去,或者你玩游戏的时候还要开一些很占CPU的软件,请将此选项设为“低”。
七:纹理质量
  这个选项决定了游戏中使用的贴图的精细程度。据我目测,纹理质量“高”和“中”精细度相当,差的只是色深。纹理质量“低”的精细度却和前两者相去甚远。
(下图)这是Lost Temple里的地面。左侧为高质量纹理,右侧为低质量
  在我的机器上,纹理质量高低对FPS影响很小。但是对于显存容量小于64M或者显存带宽小于等于64bit的朋友来说,这个选项可以说是除了分辨率以外最重要的选项。建议将纹理质量设为“中”,将色深设为16位。前边已经说过,高质量纹理和中等质量差的只是色深,所以中等质量纹理加32位色深、高质量纹理加16位色深、中等质量纹理加16位色深这三种搭配看起来几乎是一样的。
八:阴影及光线
  对于大多数游戏来说,阴影和光线都会对性能产生严重影响,然而魔兽3是个例外。严格地说,这个游戏没有真正意义上的阴影和光线效果,我们不得不怀疑暴雪的程序员在偷懒。魔兽里的阴影不过是单位脚下地面上的一块暗色的贴图,而并非像一些新游戏一样是模拟真实的光线路径计算生成的。光线(暗夜精灵造建筑时升起的几道光,英雄升级时头上的光等等)不过是几块矩形的平板上加了半透明的贴图,不会对周围物体的明暗产生影响,不信可以让某个兵的脸对着正在建造的暗夜建筑,他的脸不会被升起的那几道光照亮(当然不同的朝向和一天中不同时间对明暗是有影响的)。全屏幕的光线加起来也就几十个三角形,对性能的影响微乎其微,要知道一个普通单位的模型也是由几百个三角形构成的。
  在实际测试中,光线选项对FPS几乎没有影响,这与理论符合得很好。关闭阴影却能带来5帧/秒的FPS的提升,这令笔者百思不得其解,然而事实就是如此。
九:粒子效果
  粒子效果,指的是用数目很多的多边形面片来模拟现实中的火焰、烟雾等效果。早几年我们的机器性能还不是很好的时候,大家玩CS时可能都遇到扔个烟幕弹就会卡的现象,这是因为烟幕弹爆炸的这种粒子效果突然生成了大量的多边形,加重了机器的负担。魔兽里也是同样的道理,如果你感到大会战的场面很卡,可以考虑把粒子效果改为中乃至低。值得注意的是,战争迷雾不属于粒子效果,不要担心它会影响性能。
十:魔法效果
  这个选项决定了魔法视觉效果持续的时间。比如说某单位被释放了嗜血魔法,他的两只手(如果他有手的话)上会出现火焰。如果你的魔法效果为高,那么这两团火会持续存在到嗜血效果消失,如果魔法效果为中或低,这两团火持续一会儿就会消失,不会在魔法有效期间一直存在。这个选项对性能影响还是比较大的,但笔者还是建议将它调到高,因为魔法效果对战局的把握是相当重要的。
十一:闭塞
  网上说这个选项打开时游戏引擎不会渲染被遮住的那些三角形,所以说打开这个选项会提高性能。然而我自己的测试的结果是对性能没有影响。看来这有待进一步研究。
  至此,我的研究就告一段落了。剩下的主要是些总结、修改工作。
  如有谬误和疏漏,欢迎各位指正。
另外给大家推荐个好的店铺有各种板鞋现在免邮费
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐