Skip to content

Latest commit

 

History

History
827 lines (578 loc) · 19 KB

File metadata and controls

827 lines (578 loc) · 19 KB

API リファレンス

型一覧

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 画像

初期化

EZ_Init

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;
}

EZ_BackgroundClear

フレームバッファをクリアし、背景色を設定します。描画ループの先頭で毎フレーム呼び出します。

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);

シェーダー

EZ_CreateShader

組み込みのデフォルトシェーダー(Phong シェーディング)を作成します。

EZ_Shader EZ_CreateShader();

戻り値: 作成されたシェーダー

サンプル:

EZ_Shader shader = EZ_CreateShader();

EZ_CreateCustomShader

外部ファイルからカスタムシェーダーを作成します。

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_CreateShaderFromSource

ソースコード文字列からシェーダーを作成します。

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);

テクスチャ

EZ_CreateTexture

画像ファイルからテクスチャを作成します。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");

カメラ

EZ_CreateCamera

透視投影カメラを作成します。デフォルト位置は (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);

EZ_CameraSetPosition

カメラのワールド座標を設定します。

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);

EZ_CameraSetTargetPosition

カメラの注視点を設定します。

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);

EZ_CameraSetFov

カメラの視野角(Field of View)を設定します。

void EZ_CameraSetFov(EZ_Camera camera, float fov);
引数 説明
camera EZ_Camera カメラ
fov float 視野角(度数法)

サンプル:

// 広角に設定
EZ_CameraSetFov(camera, 90.0f);

ライト

EZ_CreateLight

デフォルト設定のライトを作成します。デフォルト値は位置 (5, 5, 5)、色 白、環境光 0.3、鏡面反射 0.5 です。

EZ_Light EZ_CreateLight();

戻り値: 作成されたライト

サンプル:

EZ_Light light = EZ_CreateLight();

EZ_LightSetPosition

ライトのワールド座標を設定します。

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);

EZ_LightSetColor

ライトの色を設定します。

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);

EZ_LightSetAmbientStrength

環境光(Ambient)の強度を設定します。

void EZ_LightSetAmbientStrength(EZ_Light light, float strength);
引数 説明
light EZ_Light ライト
strength float 環境光強度 (0.0–1.0)

サンプル:

// 環境光を弱めにして陰影を強調
EZ_LightSetAmbientStrength(light, 0.1f);

EZ_LightSetSpecularStrength

鏡面反射(Specular)の強度を設定します。

void EZ_LightSetSpecularStrength(EZ_Light light, float strength);
引数 説明
light EZ_Light ライト
strength float 鏡面反射強度 (0.0–1.0)

サンプル:

// 鏡面反射を強めてツヤのある質感に
EZ_LightSetSpecularStrength(light, 0.8f);

モデル

EZ_CreateModel

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");

3D オブジェクト

EZ_CreateObject

モデルファイルとテクスチャファイルから描画オブジェクトを作成します。

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_CreateObjectFromModel

既に読み込んだモデルとテクスチャファイルからオブジェクトを作成します。同じモデルを複数のオブジェクトで共有する場合に有効です。

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_CreateObjectFromModelTexture

既に読み込んだモデルとテクスチャからオブジェクトを作成します。

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);

EZ_ObjectSetPosition

オブジェクトのワールド座標を設定します。

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);

EZ_ObjectSetRotation

オブジェクトの回転をオイラー角で設定します。

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);

EZ_ObjectSetScale

オブジェクトのスケールを設定します。

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);

EZ_DrawObject(単一ライト)

オブジェクトを単一のライトで描画します。

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);

EZ_DrawObject(複数ライト)

オブジェクトを複数のライトで描画します。

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 描画

2D 描画 API はスクリーン座標系(左上原点、右方向が +X、下方向が +Y)で動作します。色の範囲は 0.0–1.0 です。

EZ_2D_Init

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);

EZ_2D_DrawRect

矩形を描画します。

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);

EZ_2D_DrawCircle

円を描画します。

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);

EZ_2D_CreateFont

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);

EZ_2D_DrawText

テキストを描画します。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);

EZ_2D_CreateImage

画像ファイルを 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");

EZ_2D_DrawImage

画像を描画します。色パラメータは色調整(ティント)として機能し、(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);