HGE游戏引擎之hgeQuad结构体的使用(用于渲染图片)
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结构体的使用(用于渲染图片)的更多相关文章
- 对HGE游戏引擎的一次封装
HGE游戏引擎是一个开源2D游戏引擎,基于directX. 它的渲染及逻辑是基于帧回调的框架模式, 其提供一些主要的图像操作和输入控制功能. 我在之前写一个2D游戏的时候对它整个框架进行了一次封装,非 ...
- HGE游戏引擎之实战篇,渐变的游戏开场
#include <hge.h> #include "menuitem.h" //#include <hgefont.h> #include <hge ...
- 游戏引擎架构 (Jason Gregory 著)
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
- Swift 的类、结构体、枚举等的构造过程Initialization(下)
类的继承和构造过程 类里面的全部存储型属性--包含全部继承自父类的属性--都必须在构造过程中设置初始值. Swift 提供了两种类型的类构造器来确保全部类实例中存储型属性都能获得初始值,它们各自是指定 ...
- Go part 5 结构体,方法与接收器
结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...
- C语言实现链表中结构体嵌套
1.首先,定义两个结构体,一个用于定义链表,一个用于定义数据 // 定义数据相关的结构体 typedef struct Student{ int stu_id; ]; }Stu; // 定义链表相关的 ...
- APUE学习笔记——4.2结构体 struct stat 及其相关函数介绍
以下不少内容来自man手册 结构体struct stat 结构体struct stat用于保存文件相关的所有信息. struct stat的基本成员如下所示 struc ...
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
- 第1部分: 游戏引擎介绍, 渲染和构造3D世界
原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...
随机推荐
- Selenium2学习-034-WebUI自动化实战实例-032-获取页面 body 大小
获取 body 元素大小的方法,非常简单,直接上码,敬请参阅! /** * Get body size * * @author Aaron.ffp * @version V1.0.0: autoSel ...
- Upgrade Image&ntext to varbinarymax&nvarchar(max)
CREATE PROCEDURE SP_EXEC_WITH_LOG(@I_TICKETNO VARCHAR(10),@I_SQLSTR nvarchar(max))ASBEGIN DECLARE ...
- DMV to track the temp file usage for SQLServer
There are three DMVs you can use to track tempdb usage: sys.dm_db_task_space_usagesys.dm_db_session_ ...
- 微信公众平台开发(112) 自动更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何存储及更新 access token的方法. 一.Access Token access_token是公众号的全局 ...
- 楼市、股市后下一届ZF将用什么去做超发货币的蓄水池(
这是天涯论坛上最近的的一个热帖合集,周小川曾直言超发货币需要蓄水池来装,以控制通货膨胀.这个蓄水池楼市做过.股市曾经也充当过,或许现在的地下钱庄也算一部分吧,那下一届政府会如何选择这个蓄水池呢,这或将 ...
- 商业智能BI和ERP的融合之路
企业在发展过程中为了更好的跟上同行业的步伐,甚至是为了在众多企业中脱颖而出,他们会主动寻求全面的企业解决方案.但是由于行业的快速发展,需求的不断增长,市面上的智能软件层出不穷,这也给了企业选择的困难. ...
- Java 多线程Thread和Runnable
Thread: class MyThread extends Thread { private int ticketsCont=5; //一共有5张火车票 private String name; / ...
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...
- Xib和storyboard对比
- Create your first isolated Python environment
# Install virtualenv for Python 2.7 and create a sandbox called my27project: pip2. install virtualen ...