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. oracle 变量声明 初始化 赋值

    DECLARE sname VARCHAR2(20); BEGIN sname:='xxx'; sname:=sname||' and tom'; dbms_output.put_line(sname ...

  2. PMP--论文部分

    个人观点,是三个部分最简单,最容易复习的,当然,如果你没有做好一个项目的摘要和正文的背诵,连各个过程的工具输输入输出的都记不住几个,就不用往下看了,以上内容的观点,至少保证真题做三次以上,书籍教材看三 ...

  3. flex布局中flex-basis|flex-grow|flex-shrink

    flex布局中flex-basis|flex-grow|flex-shrink 整个才是正确的算法 flex-basis(基准值) 可以设置flex布局中容器的宽度,如果同时存在width属性,将把它 ...

  4. 配置SQL Server Session方法

    以下过程是在Win 2003 SP2 + IIS 6.0, ASP.NET 2.0, SQL Server 2005下进行的. 1. 安装Session数据库到Framework目录 C:\WINDO ...

  5. LeetCode Game of Life

    原题链接在这里:https://leetcode.com/problems/game-of-life/ 题目: According to the Wikipedia's article: " ...

  6. Using dbms_shared_pool.purge to remove a single task from the library cache

    我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...

  7. saltstack之(七)配置管理系统初始化init

    saltstack的配置管理分环境管理:①.base为基础环境,一般会存放一些所有服务器都使用的配置管理信息.②.dev为开发测试环境,一般会存放一些开发测试服务器使用的配置管理信息.③.pro为线上 ...

  8. 加州wonders教材扫盲

    加州语文教材主要包含以下内容: 1.主教材Reading/Writing Workshop(读写研讨) 2.拓展教材Literature Anthology(文学选集) 3.延伸阅读材料Leveled ...

  9. 【FastJSON】解决FastJson中“$ref 循环引用”的问题

    0.开发环境 SSH,EasyUI,MySQL 1.需求要求: (1)首先获取所有的贷款订单数据,即List <LoanOrder>. (2)然后从单个贷款订单实体LoanOrder去访问 ...

  10. Android-BaiduMapSDK示例的key验证失败问题

    首先,Android Studio获取SHA1会出现问题. 链接:Android Studio 获取 sha1 方法如下: 根据百度的教程,使用该SHA1并不能成功验证key 在Android SDK ...