EasyGL の公開型はすべて std::shared_ptr のエイリアスです。メモリ管理は自動で行われます。
| 型 | 説明 |
|---|---|
EasyGL |
ライブラリのコンテキスト(OpenGL コンテキストを保持) |
EZ_Shader |
シェーダープログラム |
EZ_Texture |
テクスチャ |
EZ_Camera |
カメラ |
EZ_Light |
ライト |
EZ_Model |
3D モデル(メッシュ群) |
EZ_Object |
描画オブジェクト(モデル + テクスチャ + Transform) |
EZ_2D_Font |
フォント(FreeType) |
EZ_2D_Image |
2D 画像 |
OpenGL コンテキストを作成し、EasyGL を初期化します。描画を行う前に必ず呼び出してください。
bool EZ_Init(EasyGL *gl, SDL_Window *window, int window_width, int window_height);| 引数 | 型 | 説明 |
|---|---|---|
gl |
EasyGL * |
EasyGL コンテキスト |
window |
SDL_Window * |
SDL2 ウィンドウ |
window_width |
int |
ウィンドウ幅(ピクセル) |
window_height |
int |
ウィンドウ高さ(ピクセル) |
戻り値: 初期化に成功した場合 true
サンプル:
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow(
"Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 600, SDL_WINDOW_OPENGL);
EasyGL gl;
if (!EZ_Init(&gl, window, 800, 600)) {
SDL_DestroyWindow(window);
SDL_Quit();
// 初期化失敗
return -1;
}フレームバッファをクリアし、背景色を設定します。描画ループの先頭で毎フレーム呼び出します。
void EZ_BackgroundClear(int r, int g, int b, int a = 255);| 引数 | 型 | 説明 |
|---|---|---|
r |
int |
赤 (0–255) |
g |
int |
緑 (0–255) |
b |
int |
青 (0–255) |
a |
int |
アルファ (0–255, デフォルト 255) |
サンプル:
// ダークティール背景
EZ_BackgroundClear(22, 100, 100);
// 半透明の黒背景
EZ_BackgroundClear(0, 0, 0, 128);組み込みのデフォルトシェーダー(Phong シェーディング)を作成します。
EZ_Shader EZ_CreateShader();戻り値: 作成されたシェーダー
サンプル:
EZ_Shader shader = EZ_CreateShader();外部ファイルからカスタムシェーダーを作成します。
EZ_Shader EZ_CreateCustomShader(const char *vertex_file_path, const char *fragment_file_path);| 引数 | 型 | 説明 |
|---|---|---|
vertex_file_path |
const char * |
頂点シェーダーファイルのパス (.vert) |
fragment_file_path |
const char * |
フラグメントシェーダーファイルのパス (.frag) |
戻り値: 作成されたシェーダー
サンプル:
EZ_Shader shader = EZ_CreateCustomShader("shaders/toon.vert", "shaders/toon.frag");ソースコード文字列からシェーダーを作成します。
EZ_Shader EZ_CreateShaderFromSource(const char *vertex_shader_code,
const char *fragment_shader_code);| 引数 | 型 | 説明 |
|---|---|---|
vertex_shader_code |
const char * |
頂点シェーダーの GLSL ソースコード |
fragment_shader_code |
const char * |
フラグメントシェーダーの GLSL ソースコード |
戻り値: 作成されたシェーダー
サンプル:
const char *vert = R"(
#version 330 core
layout (location = 0) in vec3 aPos;
void main() {
gl_Position = vec4(aPos, 1.0);
}
)";
const char *frag = R"(
#version 330 core
out vec4 FragColor;
void main() {
FragColor = vec4(1.0, 0.5, 0.2, 1.0);
}
)";
EZ_Shader shader = EZ_CreateShaderFromSource(vert, frag);画像ファイルからテクスチャを作成します。JPEG, PNG などに対応(stb_image 準拠)。
EZ_Texture EZ_CreateTexture(const char *texture_file_path);| 引数 | 型 | 説明 |
|---|---|---|
texture_file_path |
const char * |
画像ファイルのパス |
戻り値: 作成されたテクスチャ
サンプル:
EZ_Texture tex = EZ_CreateTexture("assets/texture/brick.png");透視投影カメラを作成します。デフォルト位置は (0, 0, 10)、注視点は原点 (0, 0, 0)、FOV は 45 度です。
EZ_Camera EZ_CreateCamera(float window_width, float window_height);| 引数 | 型 | 説明 |
|---|---|---|
window_width |
float |
ウィンドウ幅(アスペクト比の計算に使用) |
window_height |
float |
ウィンドウ高さ(アスペクト比の計算に使用) |
戻り値: 作成されたカメラ
サンプル:
EZ_Camera camera = EZ_CreateCamera(800.0f, 600.0f);カメラのワールド座標を設定します。
void EZ_CameraSetPosition(EZ_Camera camera, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
camera |
EZ_Camera |
カメラ |
x |
float |
X 座標 |
y |
float |
Y 座標 |
z |
float |
Z 座標 |
サンプル:
// カメラを少し上から見下ろす位置に移動
EZ_CameraSetPosition(camera, 0.0f, 5.0f, 15.0f);カメラの注視点を設定します。
void EZ_CameraSetTargetPosition(EZ_Camera camera, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
camera |
EZ_Camera |
カメラ |
x |
float |
注視点 X 座標 |
y |
float |
注視点 Y 座標 |
z |
float |
注視点 Z 座標 |
サンプル:
// 特定のオブジェクトの方を向く
EZ_CameraSetTargetPosition(camera, 3.0f, 0.0f, 0.0f);カメラの視野角(Field of View)を設定します。
void EZ_CameraSetFov(EZ_Camera camera, float fov);| 引数 | 型 | 説明 |
|---|---|---|
camera |
EZ_Camera |
カメラ |
fov |
float |
視野角(度数法) |
サンプル:
// 広角に設定
EZ_CameraSetFov(camera, 90.0f);デフォルト設定のライトを作成します。デフォルト値は位置 (5, 5, 5)、色 白、環境光 0.3、鏡面反射 0.5 です。
EZ_Light EZ_CreateLight();戻り値: 作成されたライト
サンプル:
EZ_Light light = EZ_CreateLight();ライトのワールド座標を設定します。
void EZ_LightSetPosition(EZ_Light light, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
light |
EZ_Light |
ライト |
x |
float |
X 座標 |
y |
float |
Y 座標 |
z |
float |
Z 座標 |
サンプル:
// ライトを真上に配置
EZ_LightSetPosition(light, 0.0f, 10.0f, 0.0f);ライトの色を設定します。
void EZ_LightSetColor(EZ_Light light, int r, int g, int b);| 引数 | 型 | 説明 |
|---|---|---|
light |
EZ_Light |
ライト |
r |
int |
赤 (0–255) |
g |
int |
緑 (0–255) |
b |
int |
青 (0–255) |
サンプル:
// 暖色系のライト
EZ_LightSetColor(light, 255, 200, 150);環境光(Ambient)の強度を設定します。
void EZ_LightSetAmbientStrength(EZ_Light light, float strength);| 引数 | 型 | 説明 |
|---|---|---|
light |
EZ_Light |
ライト |
strength |
float |
環境光強度 (0.0–1.0) |
サンプル:
// 環境光を弱めにして陰影を強調
EZ_LightSetAmbientStrength(light, 0.1f);鏡面反射(Specular)の強度を設定します。
void EZ_LightSetSpecularStrength(EZ_Light light, float strength);| 引数 | 型 | 説明 |
|---|---|---|
light |
EZ_Light |
ライト |
strength |
float |
鏡面反射強度 (0.0–1.0) |
サンプル:
// 鏡面反射を強めてツヤのある質感に
EZ_LightSetSpecularStrength(light, 0.8f);OBJ ファイルから 3D モデルを読み込みます(Assimp 使用)。
EZ_Model EZ_CreateModel(string model_file_path);| 引数 | 型 | 説明 |
|---|---|---|
model_file_path |
string |
モデルファイルのパス(.obj など) |
戻り値: 作成されたモデル
サンプル:
// モデルだけを先に読み込み、複数のオブジェクトで共有する
EZ_Model model = EZ_CreateModel("assets/obj/tree.obj");モデルファイルとテクスチャファイルから描画オブジェクトを作成します。
EZ_Object EZ_CreateObject(const char *model_file, const char *texture_file);| 引数 | 型 | 説明 |
|---|---|---|
model_file |
const char * |
モデルファイルのパス |
texture_file |
const char * |
テクスチャファイルのパス |
戻り値: 作成されたオブジェクト
サンプル:
EZ_Object obj = EZ_CreateObject("assets/obj/cube.obj", "assets/texture/wood.png");既に読み込んだモデルとテクスチャファイルからオブジェクトを作成します。同じモデルを複数のオブジェクトで共有する場合に有効です。
EZ_Object EZ_CreateObjectFromModel(EZ_Model model, const char *texture_file);| 引数 | 型 | 説明 |
|---|---|---|
model |
EZ_Model |
既に作成済みのモデル |
texture_file |
const char * |
テクスチャファイルのパス |
戻り値: 作成されたオブジェクト
サンプル:
// 同じモデルを異なるテクスチャで複数配置
EZ_Model model = EZ_CreateModel("assets/obj/tree.obj");
EZ_Object tree1 = EZ_CreateObjectFromModel(model, "assets/texture/green.png");
EZ_Object tree2 = EZ_CreateObjectFromModel(model, "assets/texture/autumn.png");既に読み込んだモデルとテクスチャからオブジェクトを作成します。
EZ_Object EZ_CreateObjectFromModelTexture(EZ_Model model, EZ_Texture texture);| 引数 | 型 | 説明 |
|---|---|---|
model |
EZ_Model |
既に作成済みのモデル |
texture |
EZ_Texture |
既に作成済みのテクスチャ |
戻り値: 作成されたオブジェクト
サンプル:
// モデルとテクスチャの両方を事前に読み込んで共有
EZ_Model model = EZ_CreateModel("assets/obj/sphere.obj");
EZ_Texture tex = EZ_CreateTexture("assets/texture/earth.png");
EZ_Object earth = EZ_CreateObjectFromModelTexture(model, tex);オブジェクトのワールド座標を設定します。
void EZ_ObjectSetPosition(EZ_Object obj, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
obj |
EZ_Object |
オブジェクト |
x |
float |
X 座標 |
y |
float |
Y 座標 |
z |
float |
Z 座標 |
サンプル:
// オブジェクトを右に3単位移動
EZ_ObjectSetPosition(obj, 3.0f, 0.0f, 0.0f);オブジェクトの回転をオイラー角で設定します。
void EZ_ObjectSetRotation(EZ_Object obj, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
obj |
EZ_Object |
オブジェクト |
x |
float |
X 軸回転(度数法) |
y |
float |
Y 軸回転(度数法) |
z |
float |
Z 軸回転(度数法) |
サンプル:
// Y軸周りに45度回転
EZ_ObjectSetRotation(obj, 0.0f, 45.0f, 0.0f);オブジェクトのスケールを設定します。
void EZ_ObjectSetScale(EZ_Object obj, float x, float y, float z);| 引数 | 型 | 説明 |
|---|---|---|
obj |
EZ_Object |
オブジェクト |
x |
float |
X 軸スケール |
y |
float |
Y 軸スケール |
z |
float |
Z 軸スケール |
サンプル:
// 2倍に拡大
EZ_ObjectSetScale(obj, 2.0f, 2.0f, 2.0f);オブジェクトを単一のライトで描画します。
void EZ_DrawObject(EZ_Object obj, EZ_Shader shader, EZ_Camera camera, EZ_Light light);| 引数 | 型 | 説明 |
|---|---|---|
obj |
EZ_Object |
描画するオブジェクト |
shader |
EZ_Shader |
使用するシェーダー |
camera |
EZ_Camera |
使用するカメラ |
light |
EZ_Light |
使用するライト |
サンプル:
// 描画ループ内
EZ_BackgroundClear(22, 100, 100);
EZ_DrawObject(obj, shader, camera, light);
SDL_GL_SwapWindow(window);オブジェクトを複数のライトで描画します。
void EZ_DrawObject(EZ_Object obj, EZ_Shader shader, EZ_Camera camera, EZ_Light *lights, int num_lights);| 引数 | 型 | 説明 |
|---|---|---|
obj |
EZ_Object |
描画するオブジェクト |
shader |
EZ_Shader |
使用するシェーダー |
camera |
EZ_Camera |
使用するカメラ |
lights |
EZ_Light * |
ライトの配列 |
num_lights |
int |
ライトの数(最大 EZ_MAX_LIGHTS = 8) |
サンプル:
// 3つのライトでオブジェクトを描画
EZ_Light lights[3];
lights[0] = EZ_CreateLight();
lights[1] = EZ_CreateLight();
lights[2] = EZ_CreateLight();
EZ_LightSetPosition(lights[0], -5.0f, 5.0f, 5.0f);
EZ_LightSetPosition(lights[1], 5.0f, 5.0f, 5.0f);
EZ_LightSetPosition(lights[2], 0.0f, -5.0f, 5.0f);
EZ_LightSetColor(lights[0], 255, 100, 100); // 赤
EZ_LightSetColor(lights[1], 100, 255, 100); // 緑
EZ_LightSetColor(lights[2], 100, 100, 255); // 青
EZ_DrawObject(obj, shader, camera, lights, 3);2D 描画 API はスクリーン座標系(左上原点、右方向が +X、下方向が +Y)で動作します。色の範囲は 0.0–1.0 です。
2D 描画システムを初期化します。2D API を使用する前に呼び出してください。
bool EZ_2D_Init(int screen_width, int screen_height);| 引数 | 型 | 説明 |
|---|---|---|
screen_width |
int |
スクリーン幅(ピクセル) |
screen_height |
int |
スクリーン高さ(ピクセル) |
戻り値: 初期化に成功した場合 true
サンプル:
EZ_2D_Init(800, 600);矩形を描画します。
void EZ_2D_DrawRect(float x, float y, float width, float height, float r, float g, float b, float a);| 引数 | 型 | 説明 |
|---|---|---|
x |
float |
左上 X 座標 |
y |
float |
左上 Y 座標 |
width |
float |
幅 |
height |
float |
高さ |
r |
float |
赤 (0.0–1.0) |
g |
float |
緑 (0.0–1.0) |
b |
float |
青 (0.0–1.0) |
a |
float |
アルファ (0.0–1.0) |
サンプル:
// 画面左上に赤い矩形を描画 (100x50)
EZ_2D_DrawRect(10.0f, 10.0f, 100.0f, 50.0f, 1.0f, 0.0f, 0.0f, 1.0f);円を描画します。
void EZ_2D_DrawCircle(float x, float y, float radius, float r, float g, float b, float a);| 引数 | 型 | 説明 |
|---|---|---|
x |
float |
中心 X 座標 |
y |
float |
中心 Y 座標 |
radius |
float |
半径 |
r |
float |
赤 (0.0–1.0) |
g |
float |
緑 (0.0–1.0) |
b |
float |
青 (0.0–1.0) |
a |
float |
アルファ (0.0–1.0) |
サンプル:
// 画面中央に半透明の青い円を描画
EZ_2D_DrawCircle(400.0f, 300.0f, 50.0f, 0.0f, 0.0f, 1.0f, 0.5f);TrueType フォントファイルを読み込みます。UTF-8 テキストに対応しています。
EZ_2D_Font EZ_2D_CreateFont(const char *font_path, int font_size = 48);| 引数 | 型 | 説明 |
|---|---|---|
font_path |
const char * |
フォントファイルのパス (.ttf, .otf) |
font_size |
int |
フォントサイズ(デフォルト 48) |
戻り値: 作成されたフォント
サンプル:
// デフォルトサイズ(48)でフォントを読み込み
EZ_2D_Font font = EZ_2D_CreateFont("assets/fonts/NotoSansJP-Regular.ttf");
// サイズ指定で読み込み
EZ_2D_Font font_large = EZ_2D_CreateFont("assets/fonts/NotoSansJP-Bold.ttf", 72);テキストを描画します。UTF-8 文字列に対応しています。
void EZ_2D_DrawText(EZ_2D_Font font, float x, float y, const char *text, float size, float r, float g, float b, float a);| 引数 | 型 | 説明 |
|---|---|---|
font |
EZ_2D_Font |
使用するフォント |
x |
float |
左上 X 座標 |
y |
float |
左上 Y 座標 |
text |
const char * |
描画するテキスト(UTF-8) |
size |
float |
描画サイズ |
r |
float |
赤 (0.0–1.0) |
g |
float |
緑 (0.0–1.0) |
b |
float |
青 (0.0–1.0) |
a |
float |
アルファ (0.0–1.0) |
サンプル:
// 白色で日本語テキストを描画
EZ_2D_DrawText(font, 50.0f, 100.0f, "こんにちは世界!", 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);画像ファイルを 2D 描画用に読み込みます。
EZ_2D_Image EZ_2D_CreateImage(const char *image_path);| 引数 | 型 | 説明 |
|---|---|---|
image_path |
const char * |
画像ファイルのパス |
戻り値: 作成された画像
サンプル:
EZ_2D_Image logo = EZ_2D_CreateImage("assets/images/logo.png");画像を描画します。色パラメータは色調整(ティント)として機能し、(1.0, 1.0, 1.0) で元の色がそのまま表示されます。
void EZ_2D_DrawImage(EZ_2D_Image image, float x, float y, float width, float height, float r, float g, float b, float a);| 引数 | 型 | 説明 |
|---|---|---|
image |
EZ_2D_Image |
使用する画像 |
x |
float |
左上 X 座標 |
y |
float |
左上 Y 座標 |
width |
float |
幅(0 で元のサイズ) |
height |
float |
高さ(0 で元のサイズ) |
r |
float |
赤 (0.0–1.0) 色調整 |
g |
float |
緑 (0.0–1.0) 色調整 |
b |
float |
青 (0.0–1.0) 色調整 |
a |
float |
アルファ (0.0–1.0) |
サンプル:
// 元の色のまま 200x200 で描画
EZ_2D_DrawImage(logo, 10.0f, 10.0f, 200.0f, 200.0f, 1.0f, 1.0f, 1.0f, 1.0f);
// 元の画像サイズで描画(width, height に 0 を指定)
EZ_2D_DrawImage(logo, 10.0f, 10.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f);
// 赤みがかったティントをかけて半透明で描画
EZ_2D_DrawImage(logo, 10.0f, 10.0f, 200.0f, 200.0f, 1.0f, 0.5f, 0.5f, 0.7f);