|| 您现在的位置: 天下无挂网 >> 外挂文章 >> 游戏开发技术 >> 外挂文章正文
:: 用户登录 ::

 
:: 专 题 栏 目 ::
:: 最新热门 ::
  • 没有热门外挂文章
  • :: 相关文章 ::
  • 游戏开发新手入门指南(

  • 游戏开发新手入门指南(

  • 游戏开发所用到的技术和

  • 《魔兽世界》的寻路体系

  • 游戏交互设计

  • 游戏内存管理

  • 计算机人工智能

  • 游戏单元操作技术

  • 游戏的操作按键

  • 实现逻辑调色板

  • 游戏图形底层设计
    作者:不详 文章来源:不详 点击数: 更新时间:2005-8-21
        在游戏中,计算机主要花时间在处理图象和画图象上,所以我们应尽力使这些操作适合主流机型的硬件水平或尽量少占用系统资源,这就是游戏图形底层设计的目的。在前面讲的DirectDraw和DirectX5 SDK中的Direct3D都是图形底层,还有ID在 QUAKE发行后提供的QUAKE C也是一种不错的图形底层。建立一套游戏图形底层需要大量的关于图形编程的知识和很多的时间精力,而且效果不一定好,同时在市场上也有很多图形底层可供选择。所以对于一般的游戏开发者来说,只要作的游戏使用的图象并没有使计算机不负重荷或并没有使用现有的底层所不支持的特性,我建议还是使用现有的底层。
    本例程的图形底层十分简单,采用DirectDraw提供的IDirectDrawSurface_BltFast和IDirectDrawSurface_Blt函数:
        if (pbm->lpSurface)
        {
            if( pbm->bTrans )
                bltflags = bTransDest ? DDBLTFAST_DESTCOLORKEY : DDBLTFAST_SRCCOLORKEY;
            else
                bltflags = bTransDest ? DDBLTFAST_DESTCOLORKEY : DDBLTFAST_NOCOLORKEY;
            ddrval = IDirectDrawSurface_BltFast(
                            lpBackBuffer, x, y,
                            pbm->lpSurface, &rc, bltflags | DDBLTFAST_WAIT);
            if (ddrval != DD_OK)
            {
                Msg("BltFast failed err=%d", ddrval);
            }
        }
        else
        {
            DDBLTFX     ddbltfx;
            rc.left   = x;
            rc.top    = y;
            rc.right  = rc.left + dx;
            rc.bottom = rc.top  + dy;
            ddbltfx.dwSize = sizeof( ddbltfx );
            ddbltfx.dwFillColor = pbm->dwColor;
            ddrval = IDirectDrawSurface_Blt(
                            lpBackBuffer,           // dest surface
                            &rc,                    // dest rect
                            NULL,                   // src surface
                            NULL,                   // src rect
                            DDBLT_COLORFILL | DDBLT_WAIT,
                            &ddbltfx);
        }
    由于DirectDraw的通用性要求,所以虽然它提供的函数的速度很快,但是对特效的支持比较少。深入的图形底层应包括大量的高效的特效处理功能,所以我们应该能够直接对显存操作。
    DirectDraw的DirectSurface提供了这个入口,它的DDSURFACEDESC结构中的变量
    lpSurface就是显存映射的入口指针。
    typedef struct _DDSURFACEDESC {
        DWORD          dwSize;
        DWORD          dwFlags;
        DWORD          dwHeight;
        DWORD          dwWidth;
        union
        {
            LONG       lPitch;
            DWORD      dwLinearSize;
        };
        DWORD          dwBackBufferCount;
        union
        {
            DWORD      dwMipMapCount;
            DWORD      dwZBufferBitDepth;
            DWORD      dwRefreshRate;
        };
        DWORD          dwAlphaBitDepth;
        DWORD          dwReserved;
        LPVOID         lpSurface;
        DDCOLORKEY     ddckCKDestOverlay;
        DDCOLORKEY     ddckCKDestBlt;
        DDCOLORKEY     ddckCKSrcOverlay;
        DDCOLORKEY     ddckCKSrcBlt;
        DDPIXELFORMAT  ddpfPixelFormat;
        DDSCAPS        ddsCaps;
    } DDSURFACEDESC;
    但是使用它之前,必须调用DirectDrawSurface3::Lock函数将此图形内存锁住,
    在处理后,调用DirectDrawSurface3::Unlock函数将此内存交还给系统。
    外挂文章录入:admin    责任编辑:admin 
  • 上一篇外挂文章:

  • 下一篇外挂文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

    点击申请点击申请点击申请点击申请点击申请点击申请
    点击申请点击申请点击申请点击申请点击申请点击申请点击申请

    版权所有 Copyright? 2004-2008 天下无挂科技网 网站维护:GHOST
    网站域名:http://www.watxwg.com
    客服邮箱:txwgwa@163.com
    客服电话:13810978321
    客服 Q Q:12439470