テクスチャを読み込んでUV座標を指定して表示

その3 テクスチャ作成あれこれ

板ポリゴンの表示はできました。今度はテクスチャ(画像)を読み込んで表示させてみたいと思います。

たかだかテクスチャ表示させるだけなのにこれまた凄い時間がかかりました。。ゲームプログラミングってめちゃくちゃ勉強し辛いです。

とりあえず以下のようなテクスチャを用意しました。



これを読み込んで文字別に表示させます。

AとBとCのそれぞれの座標の指定はとりあえず以下のようにごり押しで記述しました。

int texId = rand()%3;
m_uvRc.right  = 50;
m_uvRc.bottom = 70;
m_uvRc.top    = 0;
m_uvRc.left   = 0;
if( texId == 0 ) {
    m_uvRc.right  = 50;
    m_uvRc.bottom = 70;
    m_uvRc.top    = 0;
    m_uvRc.left   = 0;
}
else if( texId == 1 ) {
    m_uvRc.right  = 102;
    m_uvRc.bottom = 70;
    m_uvRc.top    = 0;
    m_uvRc.left   = 52;
}
else if( texId == 2 ) {
    m_uvRc.right  = 157;
    m_uvRc.bottom = 70;
    m_uvRc.top    = 0;
    m_uvRc.left   = 107;
}

またこの座標をUV座標に変換する処理は以下になります。

RECT rc = m_box[i].getUvRect();
// UV座標の設定
v[0].u = rc.right/256.0f;
v[0].v = rc.top/256.0f;
v[1].u = rc.right/256.0f;
v[1].v = rc.bottom/256.0f;
v[2].u = rc.left/256.0f;
v[2].v = rc.top/256.0f;
v[3].u = rc.left/256.0f;
v[3].v = rc.bottom/256.0f;

256で割っているのはテクスチャのサイズが256だからです。あまり綺麗な処理では無いですが、今はとにかく実現したいことを優先してるのでしょうがないですね。慣れてきたら色々ライブラリ化していきたいと思います。

前回作ったランダム長方形を表示させるプログラムを流用し、画面の中央に向かって移動する処理も追加してみました。


実行結果



今回は動画を撮ってみました。本来はもっと動きが早いのですが、デスクトップキャプチャがかなりメモリを喰うみたいで凄く重いです・・・。