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. A Framework for Programme Management

    In business today organisations manage multiple projects concurrently with shared or overlapping res ...

  2. JS-008-日期控件操作

    此文以 js 操作 layDate 日期组件为示例演示,进行日期修改. 相应的演示示例脚本,敬请参阅之前的博文:HTML-001-日期组件 layDate 演示. 操作结果如下所示: 至此, JS-0 ...

  3. Javascript数据类型的一些注意点

    1.字符串类型 substring()返回指定索引区间的子串: var s = 'hello, world' s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello ...

  4. 打印出1,11,21,31,41。。。。。。的shell脚本

    打印出1,11,21,31,41......的shell脚本 方法一:#!/bin/bash ;i<;i=i+));do echo $i #cat -n /etc/services | sed ...

  5. Linux就这个范儿 第14章 身在江湖

    Linux就这个范儿 第14章 身在江湖 “有人的地方就有江湖”,如今的计算机世界就像一个“江湖”.且不说冠希哥有多么无奈,把微博当QQ的局长有多么失败,就说如此平凡的你我什么时候就成了任人摆布的羔羊 ...

  6. ASP.NET MVC Error

    Error Handler http://prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc http://ww ...

  7. ios-控件的frame_center_bounds简单介绍

    frame 例如一个button按钮控件的frame frame是一个结构体,frame表示了button在它的父控件view中的位置---origin 以及---size origin也是一个结构体 ...

  8. DB2数据库管理最佳实践(1)

    1.DB2 9的新特性 1)DB2 9.1:主要是增加了原生XML,表分区和表压缩功能.从构架上,总的进程模型和内存构架看,都和8没啥区别. DB2 中的 pureXML 支持为管理 XML 数据提供 ...

  9. C++Primer 第二章

    //1.程序尽量避免依赖于实现环境的行为.比如:如果将int的尺寸看成一个确定不变的已知值,那么这样的程序就称为不可移植的. typedef int int32; //使用类似的typedef,可以有 ...

  10. 暴力枚举-数长方形(hdu5258)

    数长方形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...