??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV日韩AV永久无码久久,久久人与动人物a级毛片,国产午夜精品理论片久久影视http://www.shnenglu.com/swo2006/category/3196.htmlzh-cnThu, 22 May 2008 01:02:07 GMTThu, 22 May 2008 01:02:07 GMT60使用C++和Directx开发GUIhttp://www.shnenglu.com/swo2006/articles/11648.htmlswoswoThu, 24 Aug 2006 07:11:00 GMThttp://www.shnenglu.com/swo2006/articles/11648.htmlhttp://www.shnenglu.com/swo2006/comments/11648.htmlhttp://www.shnenglu.com/swo2006/articles/11648.html#Feedback1http://www.shnenglu.com/swo2006/comments/commentRss/11648.htmlhttp://www.shnenglu.com/swo2006/services/trackbacks/11648.html阅读全文

swo 2006-08-24 15:11 发表评论
]]>
游戏UI设计1http://www.shnenglu.com/swo2006/articles/11635.htmlswoswoThu, 24 Aug 2006 03:23:00 GMThttp://www.shnenglu.com/swo2006/articles/11635.htmlhttp://www.shnenglu.com/swo2006/comments/11635.htmlhttp://www.shnenglu.com/swo2006/articles/11635.html#Feedback0http://www.shnenglu.com/swo2006/comments/commentRss/11635.htmlhttp://www.shnenglu.com/swo2006/services/trackbacks/11635.html
1.1 Surfaces之封装CXSurface

1、Surfaces是什么:
  通俗的讲surfaces是一个二l的矩Şq面。在DX9中,与其对应的com接口为IDirect3DSurface9QLPDIRECT3DSURFACE9?br />
2、Surfaces的作用:
  作ؓ一个矩形^面,surfaces用来在屏q上昄q面图象Q即从文件中d图象数据呈现l用戗?br />
3、IDirect3DSurface9的用一般过E:
  声明Q?LPDIRECT3DSURFACE9
  创徏Q?CreateOffscreenPlainSurface(?
  获取图象信息Q?D3DXGetImageInfoFromFile(?
  装蝲到surfaces中: D3DXLoadSurfaceFromFile(?
  获取back buffer地址Q?GetBackBuffer(?
  昄Q?UpdateSurface(?
  释放内存 Release()

代码D如下:

LPDIRECT3DSURFACE9 g_Surface =NULL;
D3DXIMAGE_INFO Info;
D3DXGetImageInfoFromFile("D:\image.jpg", &Info);
g_pd3dDevice->CreateOffscreenPlainSurface(Info.Width, Info.Height, Info.Format, &g_Surface, NULL);
D3DXLoadSurfaceFromFile(g_Surface, NULL, NULL, "D:\image.jpg", NULL, D3DX_FILTER_NONE, 0xFF000000, NULL);

//--------------------------------------------------------------------------------------------------
LPDIRECT3DSURFACE9 BackBuffer = NULL;
g_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO, &BackBuffer);
g_pd3dDevice->UpdateSurface(g_Surface, NULL, BackBuffer, NULL);
if(BackBuffer != NULL)
    BackBuffer->Release();

//---------------------------------------------------------------------------------------------------
if(g_Surface!= NULL)
    g_Surface ->Release();

  ׃q过E可以看刎ͼIDirect3DSurface9的用虽然不十分复杂Q但有点不方? ——创建和释放总要成对出现Q用过E中q穿插着LPDIRECT3DDEVICE9接口。这些若用一个类装hQ用就要方便的多?br />
4、如何封装:
  按照surfaces的功能,创徏它就用来昄图象。因此要有读取图象的接口和显C图象的接口。又要与LPDIRECT3DDEVICE9讑֤接口兌Q因此需要一个设|设备的接口。如下所C:

1、声明及释放
  声明Q?LPDIRECT3DSURFACE9
  释放内存 Release()

2、关联图像:LoadFromFile
  获取图象信息Q?D3DXGetImageInfoFromFile(?
  创徏Q?CreateOffscreenPlainSurface(?
  装蝲到surfaces中: D3DXLoadSurfaceFromFile(?

3、显C图?Render
  获取~存地址Q?GetBackBuffer(?
  昄Q?UpdateSurface(?

4、关联设备接?SetDevice

所以CXSurface的定义如下:

class CXSurface
{
protected:
    LPDIRECT3DSURFACE9 m_Surface;
    LPDIRECT3DSURFACE9 m_BackBuffer; //Back buffer
    LPDIRECT3DDEVICE9 m_pDevice; //Direct3D的设备指?br /> public:
    CXSurface(LPDIRECT3DDEVICE9 pDevice);
    ~CXSurface();
    HRESULT LoadFromFile(LPCSTR Path);
    void Render(void);
};


1.2 Textures & Sprite 之封装CXTexture & CXSprite

1、何为Textures
  Textures是在屏幕上显C的q面囑ŞQ它能够提供?surface 更多的图形处理效果——移动、羃放、旋转及作ؓU理皮肤_脓?D模型上。在Direct3D中,其封装的接口为IDirect3DTexture9?br />
2、何为Sprite
  IDirect3DTexture9能从文g中读取纹理数据,但由于Textures不能直接复制?back bufferQ因此在屏幕上绘制Textures之前Q需要另一个接口——ID3DXSpriteQ精灵)。ID3DXSprite能够把若q个Textures 复制lback bufferQ因此需要ID3DXSprite的一个实例就可以l制所有的U理?br />   所以,IDirect3DTexture9用来存放E序所需的纹理,但它本n又不能绘制纹理,需要借助接口ID3DXSprite?br />
3、IDirect3DTexture9和ID3DXSprite的用过E?br />   定义Q~
  创徏QD3DXCreateTextureFromFile
     D3DXCreateSprite
  创徏变换矩阵Q?D3DXMatrixTransformation2D
  变换Q?SetTransform
  l制图象Q?Draw
  释放内存Q?~

代码如下Q?br />
D3DXCreateTextureFromFile(g_pd3dDevice, "c:\\image.bmp? &g_Texture);
D3DXCreateSprite(g_pd3dDevice, &g_Sprite);

//--------------------------------------------------------------------------
D3DXVECTOR2 Translation;
Translation.x = 500;
Translation.y = 500;
D3DXVECTOR2 Scaling;
Scaling.x = 1.0;f
Scaling.y = 1.0f;
D3DXMATRIX Mat;
D3DXMatrixTransformation2D(&Mat, NULL, 0, &Scaling, NULL, 0, &Translation);
g_Sprite->Begin(0);
g_Sprite->SetTransform(&
g_Sprite->Draw(g_Texture,
g_Sprite->End();

4?如何装
  从以上的基本q程可以看到QCXTexture需要完成的功能Q提供与LPDIRECT3DDEVICE9的接口,与纹理文件文件关联,对纹理进行处理(~放、旋转……)?br />
class CXTexture
{
protected:
    LPDIRECT3DTEXTURE9 m_Texture;
    LPDIRECT3DDEVICE9 m_pDevice;
    D3DXVECTOR2 m_RotationCenter;
    D3DXVECTOR2 m_Translation;
    D3DXVECTOR2 m_Scaling;
    FLOAT m_Rotation;
    RECT m_SrcRect;
public:
    CXTexture(LPDIRECT3DDEVICE9 pDevice);
    ~CXTexture();

    LPDIRECT3DTEXTURE9 GetTexture() const {return m_Texture;}
    void SetTexture(LPDIRECT3DTEXTURE9 Texture) const {m_Texture = Texture;}
    LPDIRECT3DDEVICE9 GetDevice() const {return m_pDevice;}
    void SetDevice(LPDIRECT3DDEVICE9 pDevice) const {m_pDevice = pDevice;}
    D3DXVECTOR2 GetRotationCenter() const {return m_RotationCenter;}
    void SetRotationCenter(D3DXVECTOR2 RotationCenter) {m_RotationCenter = RotationCenter;}
    D3DXVECTOR2 GetTranslation() const {return m_Translation;}
    void SetTranslation (D3DXVECTOR2 Translation) const {m_Translation = Translation;}
    D3DXVECTOR2 GetScaling() const {return m_Scaling;}
    void SetScaling(D3DXVECTOR2 Scaling) const {m_Scaling = Scaling;}
    FLOAT GetRotation() const {return m_Rotation;}
    void SetRotation (FLOAT Rotation) const {m_Rotation = Rotation;}
    RECT GetRect() const {return m_SrcRect;}
    void SetRect(RECT SrcRect) const {m_SrcRect = SrcRect;}
    HRESULT LoadFromFile(char* Path);
};

CXSprite的主要功能就是在屏幕上显C?CXTextureQ因此需要有?LPDIRECT3DDEVICE9 接口? CXTextureq接的函数?br />
class CXSprite
{
protected:
    LPD3DXSPRITE m_Sprite;
    LPDIRECT3DDEVICE9 m_pDevice;
public:
    CXSprite (LPDIRECT3DDEVICE9 pDevice);
    ~CXSprite ();

    LPD3DXSPRITE GetSprite() const {return m_Sprite;}
    void SetSprite(LPD3DXSPRITE Sprite) const {m_Sprite = Sprite;}
    LPDIRECT3DDEVICE9 GetDevice() const {return m_pDevice;}
    void SetDevice(LPDIRECT3DDEVICE9 pDevice) const {m_pDevice = pDevice;}
    HRESULT DrawTexture(CXTexture* Texture);
};


1.3 Keyboard & Mouse之封装CXKeyboard & CXMouse

1、何为Keyboard & Mouse
  “地球h都知道”。DX9提供的接?IDirectInputDevice8?br />
2、二者的功能
  KeyboardQ读取键盘的按键信息
  MouseQ读取鼠标的按键、位|信息,讄光标属?如用囄表示光标)?br />
3、用过E?br />   创徏 IDirectInput8 对象 DirectInput8Create
  创徏 IDirectInput8 讑֤Q键盘、鼠标等Q?CreateDevice
  讄讑֤属?SetCooperativeLevel
  SetDataFormat
  获取讑֤使用?Acquire
  d讑֤传入的数?GetDeviceState
  释放讑֤?IDirectInput8 Release

讄鼠标光标q程Q?br />   创徏光标囄资源Q?参照surfaces
  讄光标为指定的囄 SetCursorProperties
  讄光标的初始位|?SetCursorPosition
  昄光标 ShowCursor

E序D如下:

LPDIRECTINPUT8 g_lpDI;
LPDIRECTINPUTDEVICE8 g_Keyboard;
LPDIRECTINPUTDEVICE8 g_Mouse

//========================================================
HRESULT Result = DirectInput8Create(g_hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&g_lpDI, NULL);

if(SUCCEEDED(Result))
{
    //创徏键盘讑֤
    Result = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);
    if(SUCCEEDED(Result))
    {
        g_lpDIDevice->SetCooperativeLevel(g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
        g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
    }
}

//-------------------------------------------------------------------------------------------
//获取按键信息
if(SUCCEEDED(g_Keyboard->Acquire())) //Acquire the device
{
    char KeyState[256];
    g_Keyboard->GetDeviceState(sizeof(KeyState),(LPVOID)&KeyState);
    //ҎKeyStateq回的数据就可以判断按下何键
}

//====================================================
//创徏鼠标
g_lpDI->CreateDevice(GUID_SysMouse, &g_Mouse, NULL);
g_Mouse->SetDataFormat(&c_dfDIMouse);
g_Mouse->SetCooperativeLevel(g_hWnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND);

//------------------------------------------------------------------------
//讄鼠标光标
//获取光标囄
D3DXIMAGE_INFO ImageInfo;
D3DXGetImageInfoFromFile("C:\\Cursor.jpg? &ImageInfo);
g_pd3dDevice->CreateOffscreenPlainSurface(ImageInfo.Width, ImageInfo.Height, ImageInfo.Format, D3DPOOL_DEFAULT, &g_MouseCursor, NULL);
D3DXLoadSurfaceFromFile(g_MouseCursor, NULL, NULL, ("C:\\Cursor.jpg? NULL, D3DX_FILTER_NONE, 0xFF000000, NULL);

//讄成指定的光标
g_pd3dDevice->SetCursorProperties(0,0, g_MouseCursor);

//初试位置
g_pd3dDevice->SetCursorPosition(0,0,D3DCURSOR_IMMEDIATE_UPDATE);

//昄光标
g_pd3dDevice->ShowCursor(true);

//-------------------------------------------------------------------------
//获取鼠标信息
if(SUCCEEDED(g_Mouse->Acquire()))
{
    DIMOUSESTATE State;
    g_Mouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&State);
    //信息保存?State中?br /> }

//==============================================
//释放讑֤
if(g_lpDI != NULL)
    g_lpDI->Release();

4、封?br />   CXKeyboard的封?br />
class CXKeyboard
{
private:
    LPDIRECTINPUTDEVICE8 m_pDevice;
    char m_KeyState[256];
public:
    CXKeyboard (LPDIRECTINPUT8 pInput, HWND hWnd);
    ~ CXKeyboard();

    bool IsKeyPressed(int Key);
    HRESULT Update();
};

CXMouseSurface的封?br />
Z能制作出动画效果的光标,因此需要一个surfaces列表Q因此从CXSurfacel承一个CXMouseSurfacec,使之能够操作多个囄?br />
class CXMouseSurface : public CXSurface
{
private:
    CXMouseSurface* m_pNext;
    int MouseSurfaceType;
    UINT HotSpotX;
    UINT HotSpotY;
public:
    CXMouseSurface* GetNext() {return m_pNext;}
    void SetNext(CXMouseSurface* Surf) {m_pNext = Surf;}
    int GetSurfaceType() {return MouseSurfaceType;}
    void SetSurfaceType(int Type) {MouseSurfaceType = Type;}
    UINT GetHotSpotX() {return HotSpotX;}
    UINT GetHotSpotY() {return HotSpotY;}
    void SetHotSpotX (UINT X) {HotSpotX = X;}
    void SetHotSpotY (UINT Y) {HotSpotY = Y;}
    CXMouseSurface(LPDIRECT3DDEVICE9 pDevice) : CXSurface(pDevice) {m_pNext = NULL;}
    CXMouseSurface() : CXSurface() {m_pNext = NULL;}
}Q?br />
CXMouse的封?br />
class CXMouse
{
private:
    CXMouseSurface* m_Surface; //指向光标列表
    CXMouseSurface* m_CurrentCursorSurface; //当前光标
    LPDIRECTINPUTDEVICE8 m_pDevice;
    LPDIRECT3DDEVICE9 m_p3DDevice;
    DIMOUSESTATE m_State;
    LONG m_iX;
    LONG m_iY;

public:
    CXMouse (LPDIRECT3DDEVICE9 pDevice, LPDIRECTINPUT8 pInput, HWND hWnd, bool Exclusive);
    ~ CXMouse();

    HRESULT Update();
    LONG GetXPos();
    LONG GetYPos();
    bool IsButtonPressed(int Button);
    HRESULT SetCursorImage();
    HRESULT SetMouseCursor(char* FilePath, UINT HotSpotX, UINT HotSpotY, int Type);
    void AddCursorSurface(CXMouseSurface* Surface);
    CXMouseSurface* GetFirstSurface() {return m_Surface;}
    bool SetCursor(int Type);
    CXMouseSurface* GetCurrentCursor() {return m_CurrentCursorSurface;}
    void SetCurrentCursor(CXMouseSurface* Surface) {m_CurrentCursorSurface = Surface;}
    void SetCursorPosition(int X, int Y);
    HRESULT SetCursorVisible(bool Show);
};

swo 2006-08-24 11:23 发表评论
]]>
DirectX基础(ZT)http://www.shnenglu.com/swo2006/articles/11352.htmlswoswoThu, 17 Aug 2006 07:43:00 GMThttp://www.shnenglu.com/swo2006/articles/11352.htmlhttp://www.shnenglu.com/swo2006/comments/11352.htmlhttp://www.shnenglu.com/swo2006/articles/11352.html#Feedback0http://www.shnenglu.com/swo2006/comments/commentRss/11352.htmlhttp://www.shnenglu.com/swo2006/services/trackbacks/11352.html DirectX基础(ZT)
1、什么是DirectX Q?

微Y的DirectX软g开发工具包QSDKQ提供了一套优U的应用程序编E接口(APIsQ,q个~程接口可以提供l你开发高质量、实时的应用E序所需要的各种资源。DirectX技术的出现极大的有助于发展下一代多媒体应用E序和电脑游戏?/p>

ȝ说来Q用DirectX的主要有两个好处Q?、ؓ软g开发者提供硬件无x;2、ؓg开发提供策略?

1、ؓ软g开发者提供硬件无x?/p>

微Y开发DirectXQ其最主要的目的之一是促q在Windows操作pȝ上的游戏和多媒体应用E序的发展。在DirectX出现以前Q主要的? 戏开发^台是MS-DOSQ游戏开发者们Z使他们的E序能够适应各种各样的硬件设备而绞脑汁。自从有了DirectXQ游戏开发者们便可以获益于 Windowsq_的设备无x,而又不失ȝ接访问硬件的Ҏ。DirectX主要的目的就是提供象MS-DOS一Lz的讉Kg的能力,来实现ƈ? 提高ZMS-DOSq_应用软g的运行效果,q且Z人电脑硬件的革新扫除障碍?/p>

另一斚wQ微软公司开发DirectX是ؓ了在当前或今后的计算机操作系l上提供l基于Windowsq_的应用程序以高表现力、实时的讉Kg? 能力。DirectX在硬件设备和应用E序之间提供了一套完整一致的接口Q以减小在安装和配置时的复杂E度Qƈ且可以最大限度的利用g的优UҎ。通过 使用DirectX所提供的接口,软g开发者可以尽情的利用g所可能带来的高性能Q而不用烦g那些复杂而又多变的硬件执行细节?/p>

一个高表现力的ZWindowsq_的游戏将得益于以下几U技术:

专ؓ提高囑Şq算及快速反应能力而设计的加速卡QAccelerator cardsQ?
x即用以及其它Windows软硬?
内徏于Windows的通信服务, 包括DirectPlay

2、ؓg开发提供策?/p>

DirectX的另外一个重要的目的是给g厂商提供开发策略,他们可以从高性能E序的开发者和独立的硬件供应商Qindependent hardware vendors IHVsQ那里得到反馈。所以,在DirectX E序员参考书中有时可能会提供那些q不存在的硬件加速设备的技术细节。在很多时候,软g可以模拟q些Ҏ,在另外一些情况下QY件根据硬件的指标判断出其 Ҏ,q且可以忽略那些gq不支持的性能?/p>

已经和将要实现的昄讑֤的特性包括:

覆盖(Overlays)Q由于它的被支持Q在囑Ş讑֤接口中,H口中的换页Qpage flippingQ将成ؓ可用。换|用来在整个屏q上昄画面的双~冲Qdouble-bufferQ方案?
_引擎(Sprite engines)Qɾ_Q不规则囑ŞQ覆盖更Ҏ?
插补延展(Stretching with interpolation)Q它可以更有效的保存昄内存Q因为它可以使小q画面g展到整个屏幕?
Alpha 融合(Alpha blending)Q它可以在硬件像素层Qhardware-pixel level)上؜合颜艌Ӏ?
带有透视修正Qperspective-correct)贴图?D加速器Q它允许你在3D表面上脓图。比如,你可以在?D软g制作的城堡的走廊里脓上砖块的位图来显C出透视效果?
?D图象q行的位操作?Z 方向考虑在内?

标准2兆显C内存,q在3D游戏中是最需求?
压羃标准Q这允怽在显存中储存更多的信息。这个标准不论是在Y件还是硬件中执行都会相当快。它被用在贴图中ƈ且包含透明压羃?

要被包括的声音讑֤的新Ҏ包括:

g及其外设可以提供I间环绕立体声效果?
声卡上内|音频内存?
音频-视频一体卡可共享其上的内存?
另外Q视频回攑ְ得益于今后的与DirectX相兼容硬件加速设备。今后的DirectX版本中的一个特性是支持硬件加速YUV视频解码?/p>


--------------------------------------------------------------------------------

2、DirectX的组?/p>

DirectX SDK为基于Windowsq_的应用程序提供了以下几个lg?

DirectDraw Q通过直接讉K昄g来提供高U的图象处理能力?
DirectSound Q它提供了Yg的低延迟声音混频Qlow_latency sound mixingQ和回放QPlaybackQ,g加速,以及直接讉K音频讑֤的能力?
DirectPlay Q它明确的提供了通用环境q接能力Qgeneralized communication capabilitiesQ,来简化你应用E序之间的通讯服务?
Direct3D Q它Z的桌上型计机和Internet用户提供实时的、交互的3D技术?
DirectInput Q它化你的应用程序访问鼠标、键盘和操纵杆设备的能力?
DirectSetup Q一套简单的API向你提供安装DirectX部g的功能?
AutoPlay Q它也是Win95操作pȝ的一个特性,当你在光驱内放上光盘Q指定的应用E序会自动执行?

--------------------------------------------------------------------------------

3、关于DirectDraw

DirectDraw是DirectX SDK大家族中的一员,也是其中最主要的一个部件。DirectDraw允许E序员直接的操作昑֭、硬件位图映以及硬件覆盖和换页技术。它在提供这些功 能的同时Q也使其与现在的ZMicrosoft Windows的应用程序和讑֤驱动E序相兼宏V?

DirectDraw是一个Y件接口,它在提供直接讉K昄讑֤的同Ӟ与Windows囑Ş讑֤接口QGDIQ相兼容。DirectDraw不是 一个高层的囑ŞE序~程接口Q它为游戏和Windows子系lYӞ例如Q?D囑Ş包和数字视频~码Q提供了一U与讑֤无关的途径Q以获得讉K特定的显C? 讑֤的某些高U特性的能力?/p>

DirectDraw适用于种cM多的的显C备,从简单的SVGA昄器到提供裁剪、羃放、和支持非RGB颜色格式的高U硬件实现设备。设计这? 的接口是Z让你的应用程序能够列举低层硬件的能力Qƈ且对那些支持的硬件加速特性加以利用。那些在g讑֤中不能实现的Ҏ,DirectX仿真出 来?

DirectDraw提供了以下几个优点,q些好处在以前只有那些专为特定显C备所写的软g才能利用?

支持双缓冲和换页囑Ş
讉K、控制显C卡的位图映?
支持3D z-buffers Qz~存Q?
支持z方向Qz-orderingQ硬件辅助覆盖?
讉K囑Ş~放g
仿真讉K标准的和增强的显C备内存空?
DirectDraw 的Q务是用与讑֤无关的途径来提供依赖于讑֤的访问显C内存的Ҏ。本质上QDirectDraw理昄内存。你的应用程序只需要懂得那些一般的关于? 件与讑֤有关的知识,比如RGB和YUV色彩格式和两条光栅线之间的pitchQ宽距) 。在需要利用位转换或操作调色板寄存器时Q你不需要ؓ调用q程中的l节而烦恹{用DirectDrawQ你可以方便的操作显C内存,充分的利用不同类? 的显C备的位{换和颜色压羃能力Q而不需要依赖于某一个特定的g?

DirectDrawl运行于Windows 95和Windows NT 4.0或更高版本的计算机提供了一个高性能的的游戏图象引擎?


--------------------------------------------------------------------------------

4、ؓ什么要使用DirectDraw?

无庸|疑Qh们之所以利用DirectDraw来开发各U游戏以及多媒体应用软gQ是因ؓDirectDraw可以Z们的应用E序带来许多强大的功能提升?/p>

DirectDraw可以充分评估视频g的能力,只要可能Q它׃对其某一Ҏ加以利用。例如,如果你的昑֍支持gBlitQ? DirectDraw׃位图映这一操作分派l显卡来完成Q极大的提升q行速度。此外,当某g不支持某特性时QDirectDrawq提供了g 仿真层(HELQ以完成q项操作?
DirectDraw的硬件抽象层QHALQ提供了一个统一的接口,通过它,开发者可以直接的操作昄存储器和视频存储器,从系l硬件中获取最大的表现能力?
DirectDrawq行于Windows95操作pȝ之上Q从pȝ所提供?2位内存寻址和^面内存模型中L。DirectDraw视频和pȝ存储器视为整块的I间Q而不是碎片的集合。如果你曾用过区段偏移dQ你很快就喜爱上这U“^面”内存模型?
对于全屏模式的应用程序,DirectDraw使得多后台缓存的换页操作变得极ؓҎ?
支持H口和全屏模式应用程序的裁减?
支持3-D z~存?
支持带z轴方向的g辅助覆盖?
可访问图象羃攄件?
可同时访问标准的和增强的昄讑֤内存区?
其它的特性,包括动态改变调色板、独占访问硬件、和分L率切换等{?
合理和有效的利用DirectDraw的这些特性将使开发者很Ҏp够写出比Z标准的Windows GDI应用E序Q甚至MS-DOS应用E序q要优秀的作品?/p>


--------------------------------------------------------------------------------

5、DirectX 5.0的新Ҏ?/p>


DirectX5.0版本?.0版拥有更多的创新和新Ҏ(注意Qƈ不存?.0版)。尽这P你用以前版本写的DirectX应用E序同样可以不加修改的运行于DirectX5.0环境中。以下将介绍的是DirectX 5.0中DirectDraw接口的新Ҏ?/p>

首先QDirectDraw支持Windows98和Windows NT 5.0的多昄器系l。例如,在多昄器环境下Q同一台电脑用两套不同的昄讑֤和显C器Q用户可以将不同的画面显C在两个昄屏幕上,甚至一个窗? 从一个显C器拖拽到另一个显C器上。DirectDraw5.0支持q样一个系l,允许应用E序在这L环境中直接的讉K和操U늡件加速特性?/p>

其次QDirectDraw已经使视频端口(Video-portQ具有新的性能Q它允许应用E序直接控制数据从一个硬件视频端口流向一个位于显存中的DirectDraw面上。这P使得视频图象的输入和输出对DirectDraw来说都变得极Z利和快速?/p>

除此之外QDirectDraw的HELQ硬件仿真层Q现在可以充分利用Pentium MMX处理器所带来的多媒体性能的提升。当你第一ơ创建页面的时候,DirectDraw会测试你的电脑芯片是否支持MMX。而在一台非Pentium MMXU别电脑上,q个试会在调试E序的时候给Z个良性的异常信息Q而这个异常ƈ不会影响C的应用程序执行的E_性?/p>

DirectDraw接口现在q支持离屏页面的宽度大于主页面的宽度。你可以创徏q些面而不用顾及它的大,而在以前的版本中Q你l常会ؓ了不佉K面宽度大于主面而将其分割开来?/p>

DirectDraw接口现在已经能够支持高囑Ş端口QAGPQ构架。在装备了AGP昑֍的系l中QDirectDrawE序开发者将从AGP昑֍的大定w和高传输速率中获益?/p>


--------------------------------------------------------------------------------

6、部件对象模型(COMQ?/p>

DirectX是基于COM的一套Y件编E接口?/p>

部g对象模型QComponent Object Model, COMQ是OLE 的基。COM 为OLE提供了编E模型和二进制标准。COM定义q实C软部Ӟ如应用程序、数据对象、控件及服务Q机Ӟq把它们l称为“对象”。每个Y部g对象由数 据以及访问数据的函数l成Q访问Y部g对象数据的函数的集合UCؓ“接口”?/p>

从这里可以看出,COM 的设计与C++c非常相|即一个Y部g对象h一个内部数据结构和一l外部接口函敎ͼ允许通过接口函数Ҏ据进行访问。因此Microsoft公司把根 据COM执行的对象统UCؓWindows对象。但Windows对象与C++中的对象有明昄差别QWindows对象中没有公共数据,也没有成员函敎ͼ 因此不能直接讉K数据Q也是说数据是全封装的?/p>

对象的提供者或服务器必L明一个或多个接口的定义,每个接口都是怺兌的一l函敎ͼ执行对象的一个特性。每个对象的一个用P或称为“客户”) 必须拥有一个接口指针才能访问对象。当客户有了q个指针后,可以用这个对象而无需知道对象的含义,即客户q行在不同的q程、不同的机器、不同的操作 pȝ、由不同的Y件开发而用不同的语言Q或者版本不同?/p>

DirectX SDK接口被创建在COM~程层次表中很基的一层。每一个代表设备的对象的接口,比如IDirectDraw、IDirectSound、和 IDirectPlayQ是直接从IUnknown OLE接口中派生下来的。这些基本对象的创徏被操作于在该对象的动态连接库中,要比用Win32中专门用来创建COM对象? CoCreateInstance函数要好得多?

特别的是QDirectX SDK对象模型为每一个设备提供一个主要的对象。其它的讑֤对象是由q个主要对象z下来的。例如,DirectDraw对象代表昄讑֤。你可以用它? 创徏代表昑֭的主面QDirectDrawSurfaceQ对象,和代表硬件调色板的调色板QDirectDrawPaletteQ对象;怼的, DirectSound对象代表声卡Qƈ且创建DirectSoundbuffer对象来代表声卡上的声x据?/p>




swo 2006-08-17 15:43 发表评论
]]>
պŷһþþþ | һaƬþëƬ| þþƷר | ƷۺϾþþþþ98| ˾þ| Ʒһþ | þҹۺϾþ| þþþþϸ| ƷۺרƬþþ | Ʒþþþ| þþƷ| Ļþһ| þùһ| ۲ӰԺþùƷ| þerƷѹۿ2| þ99Ʒ| þþþþùƷ| þƵһ| ޵һAVվþþƷ˵AV | þþ97ɫ| ݺۺϾþAVһ| һɫþ99һۺ| 뾫ƷþѼ| ƷŮþþm| þ99ȾƷ| ŷþۺ| þۺɫɫ| þþƷž޾Ʒ| Ʒ˾þþþӰԺ| þAV뾫Ʒ| þþþþþþþþþƷ| 99þһa| ˺ݺۺϾþ88| þþþþþþþþѾƷ| 69ƷþþþAPP | þùŷպƷ| պ޹ۺϾþþ| þһ | þ99Ʒþþþþ벥| ˾þۺ| ɫۺϾþۺ|