Step1で物体の描画を学びました.ここでは同じ物体を何個も描画する方法を学びましょう.
C言語の繰り返しにはfor文, while文,do while文がありましたね.ここではfor文を使います.さっそくソースコードを見ていきましょう.
13行目のdsSetColor()は色を設定する関数です.引数は光の3原色の値を3個取り,1番目は赤,2番目は緑,3番目は青成分で0以上1以下の値となります.ちなみに,全部0だと黒,全部1.0だと白です.
15から18行目がfor文です.繰り返し回数はnum回,ここでは10行目でnumが11になっているので,11回ループが回ることになります.
16行目のp[1]は絶対座標系のy座標の値です.なお,p[0]にはx座標,p[2]にはz座標の値が入っていて,x座標は地面の中央マーカーから赤マーカーの方向,y座標は中央マーカーから青マーカーの方向,z座標は中央マーカーから上空方向になります.
17行目は直方体の描画です.
これで今回は終わりです.ホームワークは少し難しくします.
/* step2 物体の繰り返し表示 */ #include "dm2.h" double R[12]; // 回転行列の各要素が格納される配列 double p[3] = {0.0, 0.0, 0.05}; // 位置(x,y,z)[m] double sides[3] = {0.1, 0.1, 0.1}; // 直方体のサイズ(x, y, z)[m] void simLoop(int pause) /*** シミュレーションループ ***/ { int i, num = 11; // 直方体の数 dsSetColor(1.0, 0.0, 0.0); // 赤色の設定(赤,緑,青) for (i = 0; i < num; i++) { p[1] = i * 0.2; dsDrawBox(p,R,sides); // 直方体の表示 } } int main() /*** main関数 ***/ { dmLoop(800, 600); // シミュレーションループ ウインドウの幅,高 return 0; }
ホームワーク2
- step2-090612.zipをダウンロードして実行しよう.
- 赤い直方体の色を青に変えよう.
- 赤い直方体の位置を左にずらし,中央の直方体が原点に来るようにしましょう.
- 上の問題で,直方体の色を全て違う色にしょう.
- forループを2重にし,x軸方向にも直方体を描画し,合計121個の直方体を表示しよう.
- forループを3重にし,z軸方向にも直方体を描画し,直方体の間隔も調整して上図のようなピラミッドを作ろう.
昔エジプトに行きピラミッドに少しだけ登ったことがあります。遠くからはきれいな四角錐に見えますが、大きな立方体が積み重ねられできています。残念ながら今は登ることが禁止されているようですね。
コメント
たびたびすみません。
インクルードファイルあたりに原因があるのかと思いdm1.hもインクルードしてみるとビルドが通りました。
お騒がせしてすみませんでした。
ただ、根本的な原因がわからずじまいなのが残念です。。
こんにちは。
サンプルプログラムをDLしてstep2のビルドを実行してみましたが、
>step1.obj : error LNK2019: 未解決の外部シンボル “void __cdecl dmLoop(int,int)” (?dmLoop@@YAXHH@Z) が関数 _main で参照されました。
1>.\step1.exe : fatal error LNK1120: 外部参照 1 が未解決です
と出て実行ファイルが作成されません。
ただ、C:\ode-0.11.1:\lib:\DebugDoubleLib:\ode_double.libはあります。
また、このプロジェクトファイルの位置は
C:\ode-0.11.1:\mypgm:\step2 です。
いろいろやってみたものの一向に解決しないので、よろしくお願いします。