Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic サンプル」を参照すること。
このサンプル プログラムでは、パレット変更でアニメ エフェクトを作成する方法について示す。
ソース ファイル :(SDK ルート)\Samples\Multimedia\DDraw\Src\Wormhole
実行可能ファイル :(SDK ルート)\Samples\Multimedia\DDraw\Bin\Wormhole.exe
プログラムを終了するには、F12 キーまたは Esc キーを押す。
4 色の 4×4 のディスプレイを考える。色を設定すると次のようになる。
ここで、各行のすべての色を右に循環できる。右側の 1 つは左へ覆う。
この循環を続けると、右に移動するアニメーションされた行を取得できる。同様にして、下に向かう行をアニメーションすることができる。
ここで、パレットを 16 色に拡張すると、同時に下と右への移動を結合できる。
右に移動
下に移動
右下に移動
ここで、これらの 4×4 ブロックの端と端にタイルを張り、上記のように循環させると、動く千鳥格子を取得できる。虫の掘った穴も同様に作成できるが、15×15 ブロック (225色) を使用して、平面でブロックの端と端にタイルを張る代わりに、虫の掘った穴の中央で 3-D 収束の内側にタイルを張る。
以下に示すコードで、前述の 15×15 グリッドを使用する 3-D の虫の掘った穴を生成できる。
// 全タスク // r、θ、z を x、y、x に変換して、x、y を隠す // ポイントをプロットする // =-1.0+(log(2.0*j/DIVS) は、プロット用の math eqn を設定する行 // 自由に、他の関数も試すこと // 柱座標。たとえば、z=f(r,theta) #define STRETCH 25 #define PI 3.14159265358979323846 #define XCENTER 160 #define YCENTER 50 #define DIVS 1200 #define SPOKES 2400 void transarray(void) { float x,y,z; int i,j,color; for(j=1;j<DIVS+1;j++) for(i=0;i<SPOKES;i++) { z=-1.0+(log(2.0*j/DIVS)); x=(320.0*j/DIVS*cos(2*PI*i/SPOKES)); y=(240.0*j/DIVS*sin(2*PI*i/SPOKES)); y=y-STRETCH*z; x+=XCENTER; y+=YCENTER; color=((i/8)%15)+15*((j/6)%15)+1; if ((x>=0)&&(x<=320)&&(y>=0)&&(y<=200)) plot((int) x,(int) y,color); } }
ビットマップを DirectDraw サーフェスにロードした後にすべきことは、色を回転させ、虫の掘った穴を取得するだけである。