HitmaeN's profileGameDevErBlogListsNetwork Tools Help

Blog


    5/21/2007

    调用动态加载的DLL中的重载函数

    看书时发现书中没有这方面的讲解,于是自己动手试验了一下,不知道这样做是否“正点”,欢迎讨论。

    关于DLL最基本的知识就不提了,开门见山地讲吧!

    现有动态链接库DLL_Sample.dll

    DLL_Sample.h:
    #ifdef TEST_API
    #    define TEST_API _declspec(dllexport)
    #else

    #    define TEST_API _declspec(dllimport)
    #endif

    TEST_API 
    int fuc(int a);
    TEST_API 
    int fuc(int a, int
     b);
    TEST_API 
    int fuc(int a, int b, int c);

    DLL_Sample.cpp:
    #define TEST_API
    #include 
    "DLL_Sample.h"

    TEST_API 
    int fuc(int a)
    {
        
    return
     a;
    }

    TEST_API 
    int fuc(int a, int
     b)
    {
        
    return a +
     b;
    }

    TEST_API 
    int fuc(int a, int b, int
     c)
    {
        
    return a + b +
     c;
    }


    在动态调用dll之前,需要查看一下dll导出的函数名称。
    查看编译器的导出名称,可以用VS工具目录下的Dependency Walker,或者在控制台下使用命令:dumpbin  /exports  DLL_Sample.dll

    这里我用dumpbin命令得到下面的信息:

    1    0    00011348    ?fuc@@YAHH@Z
    2    1    00011352    ?
    fuc@@YAHHH@Z
    3    2    000111DB   ?fuc@@YAHHHH@Z


    可以看到,重载函数各个版本的名称是不同的,这是因为编译器重新编码了重载函数的名称。
    为了方便记忆和使用,我们需要指定重载函数的命名规则,由于导出函数名的唯一性,我们无法将重载函数指定成相同的名称,所以我们采用fuc1、fuc2、fuc3来标识fuc函数的不同版本。
    我们用模块定义文件(.def)来定义dll导出。

    DLL_Sample.def:
    LIBRARY    DLL_Sample
    EXPORTS
    fuc1
    =?
    fuc@@YAHH@Z
    fuc2
    =?
    fuc@@YAHHH@Z
    fuc3
    =?fuc@@YAHHHH@Z

    然后写动态调用的示例代码(这里调用了第二个版本的fuc函数):
        
    HINSTANCE hInst 
    = LoadLibrary("Dll_Sample.dll");
    typedef 
    int (*MyProc)(int a, int
     b);
    MyProc Fuc 
    = (MyProc)GetProcAddress(hInst, "fuc2"
    );

    if (!
    Fuc)
    {
        MessageBox (
    "Fuc2 is null!"
    );
        
    return
    ;
    }

    CString str;
    str.Format (
    "a + b = %d", Fuc(23
    ) );
    MessageBox(str);

    FreeLibrary (hInst);


    结果输出“a + b = 5”
     
    4/25/2007

    基础知识很重要

    应该先把Directx编程基础弄牢靠,OGRE终归是一个高层的东西,但是已经掌握的东西也不是没有用处,就像当年毫无目的地学了一些与编程无关的东西,后来发现这些已经为学习3D技术铺平了道路,在学了一点OGRE的皮毛之后,在编程的时候喜欢居高临下的想问题,写出来的东西也是设计为先,好处就不用说了。是知识就要学一点,总会有点用处,没有先前C#的学习,现在学MFC也不会这么顺利,融会贯通才能成就大家。
    一直以来都是这种螺旋式的学习,虽然很慢但是视野开阔,好比爬山,别人喜欢直线爬到山顶(一种技术一种编程语言),而我则喜欢一圈一圈绕上山顶,沿途包揽风景,大事晚成矣!
    在畏惧中前进!很想从事游戏开发,并非只是因为喜欢玩游戏,而是,我毕生所学如果想要发挥到极致,走这个方向比较有前途,但愿能满足心愿。如果未能实现,我也不必灰心丧气,因为那个门槛实在很高很高。
    如果问我本科期间有什么遗憾,我的答案是,没有可以安心学习的机房(不单单是一个机房,还需要项目的支持),没有能够帮助我指明方向的导师(反而他们那种自大让我非常厌恶和失望),没有志同道合的同学(或者说我是个异类),没有舒适的大床让我能保证睡眠质量(夜深人静的时候是我最痛苦的时候)。然而现在一切条件都有了,只是年华老去!
    可怜我数学不好,现在在看向量数学,搞图形学的就得肯这东西,头疼不已,没办法。好在有OGRE,OGRE这东西真好,是个相当不错的教材,下一步我的程序里可以借鉴一下。
    好久也没有更新,看着实在凄凉,就乱写一气,这应该是一个技术博客,可惜本人水平实在有限,也许以后会丰富起来,但愿如此!但愿如此!
    3/3/2007

    3D Math

  • A Simple Quaternion-based Camera
  • Matrix and Quaternion FAQ: lots of info on matrix transformations & quaternion rotations.
  • OGRE

    Other Languages

    The main OGRE site and this Wiki are English only for simplicity, but there are several translation sites around the web:

    Recommended Reading

    External Tutorials

    Artificial Intelligence

    AI Links repositories

    SDKs

    General and Specific Architecture Articles

    General Architectures
    PathFinding
    Group AI
    Tactic
    Steering
    Rule-Based System (RBS)
    Neural Networks (NN)
    Fuzzy logic (FL)
    • aiGuru.com
    • bayesian systems... somewhere on generation 5 site.
    Finite State Machine (FSM)
    Decision Tree (DT)
    Emotion
    Lag
    Expert Systems
    Learning Systems

    Games

    Game Developer Sites

    Hardware

    Ati (papers, tools, source) (MUST READ) Nvidia (papers, tools, source) (MUST READ)

    Game/3D Conferences

    Siggraph Conference
    Game developers Conference

    MainStream

    Game Design Patterns

    Game Development

    Publisher-Developer relation

    2/26/2007

    啊!我的眼睛!

    今天眼睛终于恢复正常了,这次迷眼睛折腾苦我了,一粒小小的灰花了我40块,好值钱的灰啊!不看又不行,只好去医院!
    看病贵看病难真是个民生大问题啊,这次看病的流程:
    2楼眼科挂号7块->5楼小护士告诉有两种检查费选择(5块是看迷眼睛的/16块是看病变的)->2楼交了5块->5楼大夫看说是一粒灰让交10块处置费->2楼交10块->5楼把灰清除(医院花费22块)->买消炎眼药水18块,楼上楼下跑累死人啊,难道没有更好的方法么?
    每次从医院出来都会对生命有更深刻的认识:人活这么大真TMD不容易啊!

    VS 插件 VA

    今天在看OGRE代码的时候发现VS的智能感知不起作用了,很是影响学习代码。
    上网搜了一下,按照别人说的,删除了几个文件又重新打开,结果还是不行,然后知道有个叫Visual Assist(VA)的VS插件。试了一下,问题解决了,这个插件真的很好用,比VS自己的智能感知更智能更强大,是程序员的得力助手。
    虽然问题的原因没有找到,它的很多特性我还没依依弄清楚,但是不管怎样,又发现了一个得力工具,值得庆贺!
    2/25/2007

    虚幻引擎 (Unreal engine)

    Hitmaen译 source:http://en.wikipedia.org/wiki/Unreal_Engine
    全文:hitmaen.googlepages.com/unrealengine 
    Creative Commons License
    本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。


    游戏引擎 game engines

     

    Unreal engine 是一个最流行的动作游戏(action games) 游戏引擎(game engines),第一个创作的游戏是1998年的 第一人称射击(FPS , first-person shooter) 游戏(game) 虚幻(Unreal),它已经成为众多游戏的基础,包括 虚幻竞技场(Unreal Tournament) 和 Tom Clancy的彩虹6号3( Rainbow Six 3: Raven Shield)。  Epic Games 公司开发。

    Unreal engine 包括对 s脚本语言cripting language 的支持,名叫 UnrealScript,它可以用来迅速修改许多游戏的内容而无需钻研C++内涵。

     

    Unreal engine在游戏中的应用

    为了能加快他们自己游戏的开发,许多其他的公司得到了使用Unreal engine的许可。 这些包括 Star Trek: Deep Space Nine: The Fallen 和 Ion Storm Inc.Deus Ex。新版本的引擎正在用来开发PC游戏例如 Running With Scissors, Inc.Postal², 3D Realms' Duke Nukem ForeverU.S. ArmyAmerica's Army,还有 Ion Storm的Deus Ex: Invisible War 。

    Unreal engine 的各个版本都适合 IBM PC (Microsoft Windows, GNU/Linux),Apple Macintosh (Mac OS, Mac OS X) 和其他平台。下面是一个完整的video games发布清单:

    Unreal Engine 1

    Unreal Engine 1.0

    The Unreal engine was initially developed for the Unreal game. It featured large maps and a wide color palette in contrast to competing 3D game engines. 
    Enlarge
    Unreal engine 最初用来开发Unreal 。它的特点是宏大的地图和一个wide color palette in contrast to competing 3D 游戏引擎

    Builds 1-226: 最初的Unreal engine公认的开始于Unreal,虽然Legend Entertainment 和 MicroProse 出现的要早一些。 226f 是Unreal的最终补丁Unreal engine 的特性没有出现在当时的其他引擎 ,比如 动态光照(Dynamic Lighting), Detail Textures 等其它一些特性。

    Unreal Engine 1.5

    Unreal Tournament uses Unreal Engine 1.5, an improvement of the original engine.
    Enlarge
    Unreal Tournament 应用了原有引擎的改进版本Unreal Engine 1.5

     Builds 300-436:原有Build的增强版。 The codebase was forked and the v300 并且增加到目前的版本436。主要对渲染器进行了加强, 以能够彻底地支持Direct3D,最终整合成了Warren Marshall的新引擎UnrealEd 2。另外,这个引擎的PS2Dreamcast 版本在这一时期首次登台亮相,还有对 骨骼动画(keletal animation) 的支持也整合进来了。

    Unreal Engine 2

    Unreal Engine 2.0

    Unreal Tournament 2003 uses the second generation of Unreal engine, a large improvement in visual quality and ease of development over the previous engines.
    Enlarge
    Unreal Tournament 2003 应用了第二代Unreal engine, 视觉效果和开发的舒适等方面的大量改进使得这个引擎超过了其他众多引擎。

    Builds 500-2227: 第二代Unreal engine的builds开始于500,第一次得到许可看到他们是在600以后, 随着America's Army的发布,build 927这个可用的版本才公布。当 Epic 完成了UT2003, build号也跳到了2000+.

    重大的技术改进包括对渲染和地图编辑器的检验: 加强 lighting & shading,hardware vertex & pixel shader 的支持, 改进了 texture compressionbump mapping 和 cube mapping, 一个新的 粒子系统(particle system),游戏环境中,smooth skinned geometry 提供了 animated characters 和 complex animated geometry, 面部动画(facial animation) 提供了(包括 lipsynced animation),支持大比例地图,BSP网眼(BSP meshes) 和地形的无缝混合, 支持硬件 transform and lighting,重写了对 PlayStation 2 的支持,以及对 GameCube 和 Xbox的支持,一个新的名叫"Karma"的物理引擎,等等。

    这个引擎有时会被错误的叫作 "UT2003 engine", "U2 engine", "UT2 engine",或者类似。 Licensees sometimes refer to it as "Unreal Warfare(冲突)", 虽然"Unreal Warfare" 这个词最初的由来是含混和令人迷惑的。有一点,"Unreal Warfare"是Epic的一个工程的一个代码名,用来辨别这个自己都不清楚的工程是一个游戏还是一个引擎。Theories vary: 有人认为这仅仅是UT2004的代码名,其他人则相信它是Gears of War的原有代码名。尽管Epic 的代表声称最终的gametype名字还没有定下来。有关信息显示, Epic 将向 UT2007 里加入一个gametype,同时称作"Unreal Warfare" 和 "Conquest" 

    引擎的命名计划为 Unreal Engine N,或者是Unreal engine的N代。

    Unreal Engine 2.5

    Builds 2500-3369: Unreal Engine 2 的加强版本,优化了的渲染代码。渲染系统提供了对众多平台的优化支持,如 DirectX versions 7 / 8,OpenGL,甚至用Pixomatic (licensed separately)进行软件渲染。虽然2.5 没有广泛发挥DirectX 9的特性,但是它确实使用了DirectX 9 API ,从而开始有兴致增加DirectX 9.x 图形特性的历史。 Unreal Engine 2.5 还展现了新特性,multipass bump-mapping (normal map/bump map/specular map/diffuse map/gloss map/environment map/opacity map/mask map etc), per-pixel lighting 和 per-pixel shadingvirtual displacement mapping , high dynamic range rendering , soft shadows 和其它DirectX 9或更高版本(如同OpenGL一样) 的图形特性。Unreal Engine 2.5 增加了对64-bit Windows 和 64-bit Linux的支持。还为Xbox 的内存管理系统进行了优化。

    Unreal Engine 3

    A berserker from Unreal Engine 3 technology demo (later revealed to be Gears of War content), revealing a detailed model with normal mapping and real-time soft self-shadowing
    Enlarge
    这是Unreal Engine 3 技术演示下的狂暴战士(将是Gears of War 的内容)预示着一个使用了normal mapping 和 real-time soft self-shadowing技术的复杂模型

    Unreal Engine 3.0

    Builds 3500 或更高: Unreal Engine 3 合并支持DirectX 9 和下一代 APIs ,包括 XNA, DirectX 10 和 OpenGL 2.x。它放弃了 legacy support 来改善性能和获得在老一代 graphics processors上无法实现的视觉效果。Unreal Engine 3 将要使用NovodeX physics engine, 放弃了自主开发的在Unreal Engine 2.x里使用的“Karma” 物理引擎。 lighting 和shadowing得到了巨大的提升, 使用了实时per-pixel lighting 和 shadowing 技术,例如为人物应用的16x采样 shadow depth buffers ,令人激动的动态光照的stencil shadow volumes 场景和为静态光照交互预处理的 shadow-masks。 Unreal Engine 3 还支持shader models 2, 3 和 4。

    Unreal Engine 3.5

    Epic正在用UE3.0 制作Gears of War和Unreal Tournament 2007。但是,Epic 还要继续改进和扩展UE3 ,重写全部的控制台循环,所以重大的加强至少要等3年半(尽管UT2007 在4/4 2006发行)。Unreal Engine 3.5 提供DirectX 11/12 和 shader model 5 或者更高的技术支持。

    Tim Sweeney 说 : 关于时间表, 我们会始终积极的开发 Unreal Engine 3 ,考虑到当今的这一代硬件——最终得等到 2009.

    http://www.beyond3d.com/#news27836

    Unreal Engine 4

    Mark Rein (Epic Games的副总裁) August 18, 2005 透露公司在过去的两年里进行了有关Unreal Engine 4 的工作。这个引擎意在the coming generation之后的下一代控制台,as well as the PC. 到目前为止只有 Tim Sweeney一个人在进行此引擎工作,他是Epic的首席程序员(lead programmer) 。

    Ogre3D Studio ! 就是它!

    几个月前,曾经想象过的东西,今天就在眼前!而且是开源的!而且是OGRE!
    OGRE组织真是强大,能同时维护托管和非托管两种引擎,不但如此还能进而开发引擎配套的工具,这无疑是学习游戏开发的人们的福音,编辑器用.net做能省不少力气,可能是基于这个原因吧?
    东西是很好,可是,在我搞了几个月VC/MFC之后,收获很多,我用GDI+做的表格看起来已经象PPT里的表格那样好了。现在已经不想再学.net了,我现在只想把VC/MFC的学习进行到底,一方面,换来换去我肯定什么都学不好了,另一方面,毕竟做游戏的只有用底层技术才象个正规军,一切都是因为硬件发展永远比软件慢吧?所以很希望能有个VC/MFC版本的编辑器。着急的是,我对引擎本身的认识还只是刚刚起步,不知道何年何月能把它吃透。
    OGRE,我们一起加油吧!