▽OpenGLでテクスチャマッピング(その4)

MFCベースのプログラムでOpenGLを使用するときのサンプルです。skGLTextureのサンプルプログラム2種類を紹介します。

○パレットアニメーション

サンプルプログラムはこちら。

パレットアニメーション
sk00e-02.lzh

球に貼り付けられたテクスチャの文字の色が、パレットアニメーションでなめらかに変化するサンプルです。

パレットアニメーション
パレットアニメーションの図

特に凝った事はしていません。skGLTextureで毎回転送する形式でテクスチャを作成して、あとは、描画前に特定のパレットの色を書き換えているだけです。

色をなめらかに変化させるのに使っているのが、skHsv2Rgb()。テクスチャ座標付きで球を描くために使っているのがskGLDrawMapBall()です。どちらも、特に難しい事はしていないのでソースを見てもらえればどうやってるかはすぐわかるかと。

パレットアニメーションはあれば便利そうですが・・・ じつは、かなり使い道が限られるテクニックだったりします。特に、ゲームなど速度が最優先になる状況ではあらかじめテクスチャデータを複数用意しておいて、テクスチャ座標を書き換える方が速いような気が・・・ まぁ、このあたりは使用頻度との兼ね合いにもなりますが。

○テクスチャアニメーション

サンプルプログラムはこちら。

テクスチャアニメーション
sk00f-01.lzh

球の表面にマウスカーソルの周りの画像をリアルタイムで貼り付けるデモです。

魚眼レンズズーム状態
魚眼レンズズーム状態

これまでのサンプルの中で一番おもしろいかも。もうちょっとまじめに仕上げれば、これだけで、一発ネタとして使えそうな気もしますが、まぁ、そこまでしなくても良いでしょう。

こちらも、特に凝った事はしていません。skGLTextureで毎回転送する形式でテクスチャを作成して、あとは、マウスカーソルの周りを描画前に転送しているだけです。

たとえば、3Dのオブジェクトにムービーを貼り付ける場合など、このテクニックの応用で実現できます。まぁ、テクニックといえるほど凝った事はやってませんが(笑)

普通に、テクスチャアニメーションの手段として考えた場合、テクスチャのサイズとの兼ね合い次第ですが、この方法を選択しても悪くないでしょう。24ビットカラーのテクスチャでサイズが64x64ならば、1回の転送で12KByteです。60fpsで描画するとして、これだけで720KByte/秒。

AGPのx4なら帯域は1GByte/秒だから、計算上は余裕という事になります。まぁ、実際には、複数のアニメーションが重なる最悪のケースを考えないといけないのでもうちょっと考え方が複雑になりますが、まぁ、こういう事もできますよという事で。

○今後の予定

予想以上にOpenGLのテクスチャマッピングだけで時間がかかってますが・・・ もう一回、このネタをやる予定です。

あと、そろそろskLibとしてのまとめも必要かな、と。どっちが先になるかはわかりませんが。


[skLib] Presented by See.Ku [2005/1/25]