この演習で体験すること
どんなCG 画像でも、基本的には描画領域を構成するすべての画素(ピクセル)に対して何らかの方法で決定された色をあてはめる(発光させる)作業によって作成されています。平面を単色で塗りつぶす場合も陰影や光沢のある立体表現も、ただ単なる画素の色の配列にしかすぎません。画素の色の決め方は、直接数値で指定する方法から複雑な計算式を用いて決定する方法までたくさんあります。ここでは、プログラミングをベースとした画像生成の基礎として、自分で各画素の色を直接指定することで画像を作ります。次に、各画素の色の決定を数式あるいは単純なルールを用いて行ない、2 次元パターンを作成します。第1回目より少し複雑なパターンに挑戦します。
「数式」や「プログラミング」と聞くと難しそうな印象をもつかもしれませんが、これまでに学んだ知識で十分対応できる内容なので、コンピュータがつくり出すいくつものパターンを楽しむことが出来ると思います。
今回の演習で使用する教材
以下のリストに載っているプログラムをダウンロードして、演習を行ってください。04生の人は、Visual Studio 6用のものを用意してありますので、次の章を参考のリストに載っているプログラムをダウンロードして、演習を行ってください。
今回の演習で使用する教材(04生用)
04生の人は、ノートパソコンにVisual Studio .netがインストールされています。Visual Studio 6とはちょっと異なっている部分があるので、再履修生用にVisual Studio 6用のものを用意してありますので、以下のリストに載っているプログラムをダウンロードして、演習を行ってください。本文中の説明では、.net用のものになっているので、適当に読み替えて進めるようにしてください。基本的には、ダウンロードするファイルが異なることと、Visual Studioを起動する際には、Visual Studio Solutionではなく"何とか.dsw"をクリックするか、または読み込むことです。
前提確認テスト
今回の演習を行う上で、必要な知識を持っているかの確認テストです。
挑戦してみてください。
ドット絵を描こう
コンピュータで表示される画像は、画素毎に色を指定することで作り出すことが出来ます。これを実際に体験するために、ドット絵を描くことに挑戦してみましょう。この授業では、pset関数を使用することによって、指定した位置に点を打つことが出来ます。
課題
- プログラム2a0を実行して、どんな画像が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、このような画像が描かれることを確認してください。
- このプログラムの内容(main.c)を変更して、一番最初のガイダンスの際に課題として出された、ドット絵を表示するプログラムをしてください。このプログラムでは点の座標の値は、x座標、y座標とも0以上63以下の整数となっています。
出来たら、担当の先生かTAの人に確認をしてもらって下さい。
- 上で修正したmain.cファイルを添付ファイルとして、kadai@sato-lab.jpまで送ってください。電子メールでの提出は今週中に出してもらえればOKです。
ストライプ(stripe)
ストライプ(stripe)とは、複数(通常は2つ)の異なる色領域を一定の規則に基づいて繰り返し表示さて出来る模様のことです。
このような模様を作り出すためには、グラデーションの時と同じように、
画素の位置情報(x, y)によって色情報(R, G, B)を変化させます。
ストライプ模様作成プログラムの観察
まず簡単なストライプを作成するプログラムを実行してみよう。
- プログラム2aを実行して、どんなストライプ模様が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、どうしてこのようなストライプ模様が出来るのかを考えてみて下さい。
- [HINT]
-
C言語では、int型の値をint型の値で割ると、その結果はint型になります。従って、xが0〜31の時はx/32の値は0となり、xが32〜63の時はx/32の値は1となります。%はあまりを求める計算を表しています。
簡単なストライプ模様を作ろう
次の図ようなストライプ模様を作って見て下さい。
- 作業に必要なプログラム2bをダウンロードして、解凍する。
- 帯状の模様のRGB値を確認する。
- 変化の規則性、変化する方向などを考えてみて下さい。
- 観察結果から、どんなプログラムにしたらよいかを考えてみて下さい。
- 実際にプログラムを実行して、正しく表示されることを確認する。プログラム2bに必要な部分を付け加えること。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
グラデーションとストライプ模様の合体
第1段階
ちょっと複雑なストライプを作成するプログラムを実行してみよう。ここでは、前回体験したグラデーションを作る方法とストライプ模様を作る方法をあわせたものです。
- 作業に必要なプログラム2cをダウンロードして、解凍する。
- プログラム2cを実行して、どんなストライプ模様が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、どうしてこのようなストライプ模様が出来るのかを考えてみて下さい。
- [Hint]
-
xが0〜15の時に16で割ると0になり、これを2で割った余りは0であるから、この時には“色領域1”が描画されることになる。またxが16〜31の時に16で割ると1になり、これを2で割った余りは1であるから、この時には“色領域2”が描画されることになる。つまり,16ごとに2つが交互に描画されています。後は、“色領域1”と“色領域2”でのグラデーションの様子を考えてみて下さい。
第2段階
第1段階のプログラムを変更して、ストライプの幅(2倍程度)を広くした模様を作ってみて下さい。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
第2段階3
次の図のような模様を表示するプログラムを作って下さい。
- 作業に必要なプログラム2dをダウンロードして、解凍する。
- 作る模様の変化の規則性、変化する方向などを考えてみて下さい。
- 観察結果から、どんなプログラムにしたらよいかを考えてみて下さい。
- 実際にプログラムを実行して、正しく表示されることを確認する。プログラム2dに必要な部分を付け加えること。
- [Hint]
-
第1段階の模様とどこが違う(色の注目)のかを良く観察して下さい。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
第4段階
次の図のような模様を表示するプログラムを作って下さい。プログラム2dに必要な部分を付け加えること。
- 作る模様の変化の規則性、変化する方向などを考えてみて下さい。
- 観察結果から、どんなプログラムにしたらよいかを考えてみて下さい。
- 実際にプログラムを実行して、正しく表示されることを確認する。プログラム2dに必要な部分を付け加えること。
- [Hint]
-
第1段階の模様や第3段階の模様とどこが違うのかを良く観察して下さい。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
市松模様
色の違う2種類の四角形を交互に並べた碁盤の目ような模様を市松模様と言います。寛保年間、京の人気役者・佐野川市松
が江戸中村座に出演した際着用した衣裳袴の格子縞が評判だった事から、「市松模様」という名称が使われるようになったと言われています。
第1段階
まず簡単な市松模様を作成するプログラムを実行してみよう。
- 作業に必要なプログラム2eをダウンロードして、解凍する。
- プログラム2eを実行して、どんな市松模様が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、どうしてこのような市松模様が出来るのかを考えてみて下さい。
第2段階
プログラム2eを変更して、次の図のような市松模様を作って下さい。色が変化していることに注意して下さい。
- 模様の出来る位置を確認して下さい。図の四隅の色とそのRGBの数値を確認する。
- 色の変化の様子を観察して下さい。ピンク色から赤色に変化しているので、RGB値の変わるのはどの部分でしょうか?
- プログラムに記す数式を決定する。
- 実際にプログラムを実行して、正しく表示されることを確認する。プログラム2eに必要な部分を付け加えること。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
円状模様
上からみたドーナッツのような円状模様を作ることに挑戦します。
複雑な(?)模様を描画する際には、今まで使ってきた下左図のような座標の取り方より、今まで使い慣れてきた下右図の方が考え易いと思います。しかし、pset関数を使ってウィンドウ上に画素を表示するにためには、下左図のような座標系を使わなくてはいけません。そこで、このような場合には、下右図での点の座標値を、下左図での点の座標に変換しなければなりません。
pset関数の座標系
|
今回使用したい座標系
|
|
|
以下のような式を利用すれば、この目的を達することが出来ます。どうして、この式で良いかは、各自で考えてみて下さい。
- [HINT]
-
-
4隅の点の座標がどのように変わるかを考えてみて下さい。後は、直線の方程式を思い出せばOK。
第1段階
まず簡単な円状模様を作成するプログラムを実行してみよう。
- 作業に必要なプログラム2fをダウンロードして、解凍する。
- プログラム2fを実行して、どんな円状模様が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、どうしてこのような円状模様が出来るのかを考えてみて下さい。プログラム中で利用さている関数double length(double x,double y)は原点から点(x,y)までの長さを計算する関数です。
第2段階
プログラム2fを変更して、次の図のような円状模様を作って下さい。色が変化していることに注意して下さい。
注:配布したテキストでは、色の変化が判りづらかったので、色を変更しました。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
第3段階
円状模様を作成するプログラムを実行してみよう。
- 作業に必要なプログラム2gをダウンロードして、解凍する。
- プログラム2gを実行して、どんな円状模様が出来るかを確認して下さい。
- プログラムの内容(main.c)を見て、どうしてこのような円状模様が出来るのかを考えてみて下さい。プログラム中で利用さている関数double angle(double x,double y)は原点と点(x,y)を結ぶ線分がx軸となす角度を計算する関数です。角度の単位は弧度法となっています。すなわち、0oは弧度法では0,90oは弧度法ではπ/2,180oは弧度法ではπ,360oは弧度法では2πとなっています。
このプログラムの動作を理解するためには、弧度法を知らないとちょっと難しいかもしれません。また、極座標表示という考えを知っていると理解しやすいかもしれません。
もっと模様を作ろう
- 作業に必要なプログラム2hをダウンロードして、解凍する。
- プログラム2hを実行して、どんな模様が出来るかを確認して下さい。
挑戦してみよう
次のようなグラデーションを作って見て下さい。プログラム2eやプログラム2hなどに変更を加えたり、追加したりすること。この演習は出来そうな問題だけやってもらえれば結構です。ちょっと難しいものもありますから。
このプログラムは出来ましたか?出来たと思ったら、担当の先生かTAの人に確認をしてもらって下さい。
謝辞
今回のリテラシ課題を準備するにあたり、東京工科大学の渕上季代絵先生からのご指導を頂きました。
ここに、感謝の気持ちを表したいと思います。
なお、渕上先生は2004年8月16日にご逝去されました。普段から色々な面で励ましを頂いていたので、とても残念です。
回の利用がありました。