关闭

游戏UI设计(1.2)--Textures & Sprite之封装

标签: 游戏uitranslationtexturesdirect3dfloat
4729人阅读 评论(1) 收藏 举报
分类:

1.2  Textures & Sprite 封装CXTexture & CXSprite

[http://blog.csdn.net/mythma]

1、  何为Textures

Textures是在屏幕上显示的平面图形,它能够提供比 surface 更多的图形处理效果——移动、缩放、旋转及作为纹理皮肤粘贴在3D模型上。在Direct3D中,其封装的接口为IDirect3DTexture9

2、  何为Sprite

IDirect3DTexture9从文件中读取纹理数据,但由于Textures不能直接复制到 back buffer,因此在屏幕上绘制Textures之前,需要另一个接口——ID3DXSprite(精灵)。ID3DXSprite能够把若干个Textures 复制给back buffer,因此需要ID3DXSprite的一个实例就可以绘制所有的纹理

 

所以,IDirect3DTexture9用来存放程序所需的纹理,但它本身又不能绘制纹理,需要借助接口ID3DXSprite

3、  IDirect3DTexture9ID3DXSprite使用过程

定义:             ~

创建:                   D3DXCreateTextureFromFile

D3DXCreateSprite

   创建变换矩阵:       D3DXMatrixTransformation2D

   变换:                  SetTransform

   绘制图象:              Draw

   释放内存:        ~

 

代码如下:

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、  如何封装

从以上的基本过程可以看到,CXTexture需要完成的功能:提供与LPDIRECT3DDEVICE9的接口,与纹理文件文件关联,对纹理进行处理(缩放、旋转……)。

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的主要功能就是在屏幕上显示 CXTexture,因此需要有与 LPDIRECT3DDEVICE9 接口和 CXTexture连接的函数。

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);

};

 

0
0
查看评论

Unity2D:Sprite和UI Image的区别

http://blog.u3dgames.cn/unity/2016-07/Unity-Sprite-VS-Image.html Unity3D最初是一个3D游戏引擎,而从4.3开始,系统加入了Sprite组件,Unity也终于有了2D游戏开发的官方解决方案。4.6更是增加了新的UI系统u...
  • zhaoguanghui2012
  • zhaoguanghui2012
  • 2017-01-05 09:32
  • 6292

Sprite (2D and UI)

D:\Program Files\Unity5\Editor\Data\Documentation\en\Manual\class-TextureImporter.htmlSprite (2D and UI)选择导入到Unity中的Texture纹理。在Inspector面板上显示的要进行设置的 I...
  • u010019717
  • u010019717
  • 2015-07-08 09:34
  • 4121

游戏框架之UI管理(二)

这次是准备用UGUI写个UI框架,之前用NGUI写过,事件处理是用的UIEvent。 但是NGUI在5.1之后和vuforia有了点冲突,没办法我只能换成UGUI。 这里就分享下吧。 我的思路大体是这样,用一个BaseUI管理UI的所有特性,作为基类。 这里是面向对象的一个设计思路。...
  • oZhongLou1234
  • oZhongLou1234
  • 2015-12-24 21:43
  • 910

游戏UI设计(1.3)--Keyboard&Mouse之封装

1.3 Keyboard & Mouse之封装CXKeyboard & CXMouse[ http://blog.csdn.net/mythma]1、  何为Keyboard & Mouse“地球人都知道”。DX9提供的接口 IDirectInputDevice8。...
  • mythma
  • mythma
  • 2004-10-02 22:39
  • 3252

游戏UI设计(1.1)--surfaces之封装

1.1 Surfaces之封装CXSurface[http://blog.csdn.net/mythma]1、Surfaces是什么:       通俗的讲surfaces就是一个二维的矩形平面。在DX9中,与其对应的com接口为IDire...
  • mythma
  • mythma
  • 2004-10-02 16:15
  • 10118

游戏界面设计的原则

游戏界面是什么呢?对于这个问题,也许一百个人能有一百个答案,对于我而言,如果把游戏整体比喻为一个人,那么程序部分则是筋骨、美术资源自然就是肌肤、而游戏性则是这个人的气质。而我们谈论的游戏界面自然是容貌了。     在茫茫人海中,有些人我们只一眼就能留下深刻的印象,甚至...
  • setflvet
  • setflvet
  • 2011-11-14 23:14
  • 5416

Eclipse Forms设计漂亮UI之布局

增加一些内容   现在我们已经有一个view能够成功运行了.我们可以往里面增加一些内容.Eclipse forms有一个body,我们可以这样创建内容. public void createPartControl(Composite parent) { toolkit = n...
  • andywangcn
  • andywangcn
  • 2012-09-29 08:41
  • 896

游戏UI界面设计视频教程全套

库(UI插画漫画开发建模美术教程大全) 2014-11-28 16:54:21 1.全面系统(从基础到进阶,涵盖所有细节,特别是没有受过特别专业培训的亲们,更加需要)  2.有序排列(按照教程属性与绘画重点进行细分章节,循序渐进的学习效果更加惊人,自己在网...
  • poyingtingshiliang
  • poyingtingshiliang
  • 2016-03-21 17:26
  • 391

游戏Entity设计不完全整理(转)

在游戏引擎中,Entity通常被翻译成实体,也常用诸如GameObject、Actor、SimulationObject、Unit、Character等名字。相比于对图像声音引擎的热情,Entity层多年来一直备受冷遇,但最近几年随着大型游戏的发展,Entity层设计的重要性已经达到和图像声音的同等...
  • blizmax6
  • blizmax6
  • 2014-05-01 23:16
  • 1874

腾讯精品文!超多干货的UI界面动效设计指南

编者按:腾讯同学的教程一向都是良心之作,今天这篇长文收罗了常见的UI动效设计方法,不仅有案例,而且分析透彻入微,从表现形式到动效的作用,对用户产生的影响,都有全面专业的解说。今年动效也是一大热门,想自我提升的同学可以放手来学习了。 概要 xavieryuan:UI是基于静态页面来设计的,页面之间...
  • vanessary2016
  • vanessary2016
  • 2016-02-29 13:34
  • 1030
    个人资料
    • 访问:537772次
    • 积分:7145
    • 等级:
    • 排名:第3783名
    • 原创:173篇
    • 转载:4篇
    • 译文:2篇
    • 评论:187条
    最新评论