テクスチャで画像を描画できるようになりましたが、毎度OpenGLを直接叩くのでは手順が面倒です。
描画を管理するスプライトクラスを作って、手軽に描画できるようにしましょう。
・スプライトクラス(sys::Sprite)
スプライトはテクスチャと、描画する範囲(切り抜き)から成っています。つまり1枚のテクスチャには複数のスプライトの画像を収めることができます(描画時、テクスチャの切り替えにはコストがかかるので、なるべく少ないテクスチャにまとめておいた方が効率が良いです)。
Sprite.h
#ifndef ___SPRITE_H___
#define ___SPRITE_H___
#include "common.h"
#include "Texture.h"
namespace sys
{
/****************
スプライト
****************/
class Sprite
{
protected :
static u32 const* spr_color; // カラー
public :
// 原点位置
enum
{
X_CENTER = 0x00, // センタリング
X_LEFT = 0x01, // 左揃え
X_RIGHT = 0x02, // 右揃え
Y_CENTER = 0x00, // センタリング
Y_TOP = 0x10, // 上揃え
Y_BOTTOM = 0x20, // 下揃え
};
static void set_color(u32 _color = 0xffffffff); // カラー設定
static void set_color(u8 _r, u8 _g, u8 _b, u8 _a = 0xff)
{
set_color(RGBA(_r, _g, _b, _a));
}
static void set_color(u32 const*);
Texture* texture; // テクスチャ
GLfloat texcoord[4][XY]; // UV座標
short width, height; // 大きさ
short ox, oy; // 原点
void set(Texture*, SRect const*, int _origin = X_CENTER | Y_CENTER); // 設定
void set(Texture*, int _origin = X_CENTER | Y_CENTER); // 設定(テクスチャに合わせた大きさ)
void set(short, short, int _origin = X_CENTER | Y_CENTER); // 設定(テクスチャ無し)
void set(short, const void*, int _origin = X_CENTER | Y_CENTER);
void set_origin(int _origin = X_CENTER | Y_CENTER); // 原点位置設定
void draw(GLfloat*); // 描画
void draw(float, float);
void draw(float, float, float, float);
void draw(float _x, float _y, float _scl)
{
draw(_x, _y, _scl, _scl);
}
void draw(float, float, float, float, float);
void draw(float const*);
};
}
#endif
/****************** End of File ***************************************/
Sprite.cpp
コメントをする