游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6489|回复: 18

DX9 的 2D 引擎架构分享(含完整注解)

[复制链接]

20

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 2004-8-31 11:09:00 | 显示全部楼层 |阅读模式
大家给些意见吧…[em7]

////////////////////////////////////////////////////////////////////////////////
//        File Name:                                Graphic.h
//
//        Original Author:                Programma Lam
//
//        Creation Date:                        28/8/2004
//
////////////////////////////////////////////////////////////////////////////////

#pragma once

#include "d3d9.h"
#include "d3dx9.h"
#include "vector"

#define PostErrMessage(str)                MessageBox(0,str,0,0)

using namespace std;

////////////////////////////////////////////////////////////////////////////////
//        Class Name:                                IGraphicDevice(Singleton)
//
//        Last Modified By:                Programma Lam
//
//        Last Modified:                        28/8/2004
//
//        Description:                        An interface for initialize and terminate
//                                                        graphic system, provides basic graphic function
////////////////////////////////////////////////////////////////////////////////

class IGraphicDevice
{
public:
       
        struct CGraphicObjectDesc
        {
                float                                        m_lZPos;                                //z-value of graphic
                long                                        m_lVertexFlags;                        //vertex flags
                unsigned char                        m_uchSizeOfEachVertex;        //size of each vertex
                unsigned short                        m_NumOfTriangle;                //number of triangle
                IDirect3DVertexBuffer9        *m_pVertexBuffer;                //pointer to vertex buffer
                IDirect3DTexture9                *m_pTexture;                        //pointer to texture to present
                D3DXMATRIX                                &m_WorldMatrixStruct;        //world matrix struct
        };

        IGraphicDevice(void);
        ~IGraphicDevice(){};

        void InitializeEnvironment(HWND hWnd_, unsigned short usScreenWidth_,
                unsigned short usScreenHeight_,        bool bWindowed_);
       
        void CleanupEnvironment(void);
        void Setup2DCamera(void);

        void        Insert2DObjects(CGraphicObjectDesc* pObjectDesc_);        //insert 2D object
        void        Render2DObjects(void);                                                                //render all 2D objects
        void        Release2DObjects(void);                                                                //release all 2D object

private:

        IDirect3D9                        *m_pDirect3DInterface;        //d3d object
       
        HWND                                m_hWnd;                                        //handle to game window
        bool                                m_bWindowed;                        //if the game not fullscreen

        vector<CGraphicObjectDesc*>                m_vObjects2D;        //the 2D objects to render

public:

        IDirect3DDevice9        *m_pDeviceInterface;                                //d3d device
        unsigned short                m_usScreenWidth, m_usScreenHeight;        //size of window

public:

        static IGraphicDevice& GetInstance(void)
        {
                return ms_InstanceClass;
        }

        static IGraphicDevice ms_InstanceClass;

};

#define PLANESURFACE_VERTEX_FLAGS (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

////////////////////////////////////////////////////////////////////////////////
//        Class Name:                                CPlaneSurface
//
//        Last Modified By:                Programma Lam
//
//        Last Modified:                        29/8/2004
//
//        Description:                        A virtual class to store a texture and vertex data,
//                                                        send reference of datas to IGraphicDevice
////////////////////////////////////////////////////////////////////////////////

class CPlaneSurface
{
public:

        struct CPlaneSurface_Vertex
        {
                float m_fx, m_fy, m_fz;                //position
                unsigned long m_ulcolour;        //vertex color
                float m_fu, m_fv;                        //texture coordinates
        };

        CPlaneSurface(unsigned short ulSurfaceWidth_, unsigned short ulSurfaceHeight_);
        ~CPlaneSurface();
       
        D3DMATRIX & Translate(long lXPos_, long lYPos_);
        D3DMATRIX & Scale(float fScaleX_, float fScaleY_);
        D3DMATRIX & Rotate(float fAngle_);

        //insert this object description to the draw list
        void InsertToDrawList(void);
        bool LoadTexture(const char *szFilePath_, unsigned long ulKeyColor_ = 0);

        //return a surface cut out of this surface
        CPlaneSurface * CutOut(unsigned short usXPos_, unsigned short usYPos_,
                unsigned short usWidth_, unsigned short usHeight_);

        //return a series of surfaces of different part of texture of surface
        CPlaneSurface ** Divide(unsigned short usTileWidth_, unsigned short usTileHeight_);

private:

        IDirect3DDevice9                        *m_pDeviceInterface;        //d3d device
        IDirect3DVertexBuffer9                *m_pVertexBuffer;                //buffer for vertex data
        IDirect3DTexture9                        *m_pTexture;                        //texture to render

        D3DMATRIX                m_WorldMatrixStruct;                                //world matrix struct

        unsigned long        m_ulKeyColor;                                                //transparency color
        unsigned short        m_usWidth, m_usHeight;                                //size of surface to display

        IGraphicDevice::CGraphicObjectDesc *m_ObjectDesc;        //description of graphic object
};

20

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
 楼主| 发表于 2004-8-31 11:19:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

这个论?…
为什么贴程序代码的时候,Chr(9)的字元全都不见了?

10

主题

314

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
QQ
发表于 2004-8-31 11:54:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

我是个菜鸟。想学习DX。
但不知是DX7。0还是8。1或是9。0

对与一上的代码我是看不懂的了。呵呵。不好意思啊。
不过我很佩服你哦。厉害啊

还请高手多多指点啊。

20

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
 楼主| 发表于 2004-8-31 12:11:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

我也不算得上是什幺高手,
我两年前才开始编写程序…

7

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2004-8-31 12:43:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

可惜不是源码,对架构兴趣不大

20

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
 楼主| 发表于 2004-8-31 12:59:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

我准备编写完我的游戏就会发布的了,
相信不用多久时间吧…

20

主题

134

帖子

134

积分

注册会员

Rank: 2

积分
134
 楼主| 发表于 2004-8-31 13:00:00 | 显示全部楼层

Re: Re:DX9 的 2D 引擎架构分享(含完整注解)

Programma: ReX9 的 2D 引擎架构分享(含完整注解)

我准备编写完我的游戏就会发布的了,
相信不用多久时间吧…


(我是指源码)

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-8-31 23:49:00 | 显示全部楼层

Re:DX9 的 2D 引擎架构分享(含完整注解)

期待。不过我是用OPENGL的 :P

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2004-9-1 09:04:00 | 显示全部楼层

Re: DX9 的 2D 引擎架构分享(含完整注解)

我看了,有2点意见,说的不好请大家原谅

1、如果用VB来模仿DDRAW的Surface有点不符合微软的原意。比如:
如果你要生成一幅100 * 100的tile地图,按照你的架构,你模仿DDRAW的Surface的类就会初始化10000次,不仅用起来不方便,而且效率也打了折扣。所以你的仿DDRAW的Surface类应该可以扩展为多个Surface

2、D3D中有个IDXSprite接口,可以很方便的生成精灵动画,我的感觉是比DDRAW的Surface的好用,但是不能像DDRAW的传统方法使用它,否则效率会下降很多,按照我的想法是,它只能用于少量的复杂的角色动画。而在微软的D3D示例中却有一个用来制作粒子效果的例子,实际上,在3D游戏中,很多引擎确实用它来做面特效。

欢迎大家加入我的群3216066

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2004-9-1 10:04:00 | 显示全部楼层

Re: DX9 的 2D 引擎架构分享(含完整注解)

另外说一点,D3D是有Surface接口的IDirect3DSurface9,也可以直接用,总之一点,用D3D来写2D游戏,真是太太太太太太太太太太太太方便效率又高。

大家放弃DDRAW吧,如果你不想背上D3D的包袱,我倒是比较倾向于DDRAW4,Win98自带的就有,呵呵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 01:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表