HGE基本的渲染图元是hgeQuad (Quad is the basic HGE graphic primitive),其中有一个hgeVertex成员结构,它用来描述图元顶点信息。The hgeVertex structure is used to describe vertices of which HGE graphic primitives consist.两个结构信息如下:

struct hgeQuad
{
hgeVertex v[4];
HTEXTURE tex;
int blend;
};
struct hgeVertex
{
float x, y;
float z;
DWORD col;
float tx, ty;
};

其中,x,y被描述为屏幕坐标,tx,ty被描述为纹理坐标,col被描述为颜色。创建一组顶点,每个顶点包含了位置坐标,和纹理坐标(纹理坐标一般为0--1),还有颜色等信息。为什么会有屏幕坐标很纹理坐标呢,一个点在屏幕上有坐标,一个矩形区域需要把一张图片映射进来,如果采用纹理方式,就需要为每一个点指定一个二维的坐标,hgeQuad就采用了四个纹理坐标,存在hgeVertex中,这样就可以从一张纹理图中切割一部分来渲染。这四个顶点分别从左上角开始顺时针表示一个RECT

利用hgeQuad显示图片的过程:

1.  用Texture_Load载入外部文件作为纹理。hgeQuad quad;  quad.tex=hge->Texture_Load("particles.png");

2.  设置hgeQuad的纹理坐标,窗口坐标,以及渲染模式。

quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL| BLEND_ZWRITE;

3.  每一帧都调用 Gfx_RenderQuad函数,这个函数用hge->System_SetState()设置的。

通过小精灵hgeSprite和HTEXTURE配合也可以进行图形渲染,

hgeSprite方法:

Constructors Create and initalize a hgeSprite object.
Operators hgeSprite operators.
   
Render Renders sprite to the screen.
RenderEx Renders sprite with scaling and rotation.
RenderStretch Renders stretched sprite.
Render4V Renders sprite into arbitrary quad on the screen.
   
SetTexture Sets the texture to use for the sprite.
SetTextureRect Sets the texture region to use for the sprite.
SetColor Sets tint and alpha for the specified vertex or entire sprite.
SetZ Sets Z-order for the specified vertex or entire sprite.
SetBlendMode Sets the sprite blending mode.
SetHotSpot Sets the sprite anchor point.
SetFlip Flips the sprite horizontally and/or vertically.
   
GetTexture Returns the current sprite texture.
GetTextureRect Returns the current texture region used for the sprite.
GetColor Returns color of the specified sprite vertex.
GetZ Returns Z-order of the specified sprite vertex.
GetBlendMode Returns the current sprite blending mode.
GetHotSpot Returns the sprite anchor point.
GetFlip Returns the current sprite flipping.
   
GetWidth Returns the sprite width.
GetHeight Returns the sprite height.
GetBoundingBox Returns the sprite bounding box.
GetBoundingBoxEx Returns the scaled and rotated sprite bounding box.
typedef DWORD  HTEXTURE;

也就是说HTEXTURE实际上就是一个纹理的指针

渲染过程很简单,初始化:

HTEXTURE tex1;  hgeSprite *spr;

tex1=hge->Texture_Load("1.jpg");

spr=new hgeSprite(tex1,0,0,800,600); //初始化图片精灵,后四个参数分别是,起始位置X,起始位置Y,图片宽,图片高。

在渲染函数中:

hge->Gfx_BeginScene();  //开始渲染 hge->Gfx_Clear(0xFFFFFFFF);   //以某种颜色清屏幕 spr->Render(10,10);     //在指定的位置上显示精灵 spr->SetColor(0xFFFF0000);    //设置hgesprite的渲染颜色是红色,前两位是透明度a,后面一次是r,g,b hge->Gfx_EndScene();  //结束渲染

HGE游戏引擎之hgeQuad结构体的使用(用于渲染图片)的更多相关文章

  1. 对HGE游戏引擎的一次封装

    HGE游戏引擎是一个开源2D游戏引擎,基于directX. 它的渲染及逻辑是基于帧回调的框架模式, 其提供一些主要的图像操作和输入控制功能. 我在之前写一个2D游戏的时候对它整个框架进行了一次封装,非 ...

  2. HGE游戏引擎之实战篇,渐变的游戏开场

    #include <hge.h> #include "menuitem.h" //#include <hgefont.h> #include <hge ...

  3. 游戏引擎架构 (Jason Gregory 著)

    第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...

  4. Swift 的类、结构体、枚举等的构造过程Initialization(下)

    类的继承和构造过程 类里面的全部存储型属性--包含全部继承自父类的属性--都必须在构造过程中设置初始值. Swift 提供了两种类型的类构造器来确保全部类实例中存储型属性都能获得初始值,它们各自是指定 ...

  5. Go part 5 结构体,方法与接收器

    结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...

  6. C语言实现链表中结构体嵌套

    1.首先,定义两个结构体,一个用于定义链表,一个用于定义数据 // 定义数据相关的结构体 typedef struct Student{ int stu_id; ]; }Stu; // 定义链表相关的 ...

  7. APUE学习笔记——4.2结构体 struct stat 及其相关函数介绍

    以下不少内容来自man手册 结构体struct stat         结构体struct stat用于保存文件相关的所有信息.         struct stat的基本成员如下所示 struc ...

  8. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  9. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

随机推荐

  1. Layout---poj3169(差分约束+最短路spfa)

    题目链接:http://poj.org/problem?id=3169 有n头牛站成一排 在他们之间有一些牛的关系比较好,所以彼此之间的距离不超过一定距离:也有一些关系不好的牛,希望彼此之间的距离大于 ...

  2. js中的类GET方法

    其实是通过js语句自己建的函数 function request(strParame){ var args = new Object(); ); var pairs = query.split(&qu ...

  3. awk 例子

    awk 例子 打印本机swap分区总大小,格式如:Swap:1023M: free -m |awk '/Swap/{print $1,$2" M"}' 将当前目录下大于10K的文件 ...

  4. js数组判断是否含有某一个元素

    arr.indexOf('a')如果有则返回的a的下标位置,否则返回false.

  5. 56个睿智帅气貌美的CTO大牛陪你叨逼叨

    技术领域门槛高,苦读十年有时不如大牛一指点 可CTO级别的大牛何处找? 别急,别急 他们1月12日都去参加APICloud新品发布会了! (没图说啥子) 各路大牛们云集,不仅是为APICloud新品发 ...

  6. 第七篇 SQL Server安全跨数据库所有权链接

    本篇文章是SQL Server安全系列的第七篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  7. 从 Vue 1.x 迁移

    FAQ 哇,非常长的一页!是否意味着 Vue2.0 已经完全不同了呢,是否需要从头学起呢,Vue1.0 的项目是不是没法迁移了? 非常开心地告诉你,并不是! 几乎90%的 API 和核心概念都没有变. ...

  8. 转:DLL教程

    首先:DLL技术是针对C的技术,虽然也支持C++,但是对C++的支持不够好.C++对应的是COM技术. 建议首先看一下Programming  Windows的21章,虽然没有讲MFC如何制作DLL, ...

  9. MD5和DES加密方法

        /// <summary>         /// MD5加密         /// </summary>         /// <param name=&q ...

  10. JAVA-面向对象-特性

    1.封装 1.定义方式 1修饰符class类名 2类名首字母大写 2.类的成员 1属性 成员变量 可以设置默认值 第一个单词首字母小写,后面首字母大写 一般把属性设置成private 提供属性对应的g ...