<Windowsでの実行環境について> Windowsでのインストールに苦労している人が多いようだが,どうも複数のJavaをインストールして しまっているケースが多いように想像しています.ターミナルでJavaを利用している場合には, 以下のコマンドを実行することによって,自分の使っているJavaを確認できます. C:\>where javac C:\>where java <授業の目的について> ・この授業と「図形科学II」との間に何か関連はあるのでしょうか。科目名の類似性の割に内容が 全く異なるように感じます。 ↓ 「図形科学II」は応用プログラムを利用して図形科学の勉強をするものなのに対して, 「図形科学演習II」は,計算機による立体図形の表示や処理について勉強することによって,図形科学を学ぼうというものです. 名称だけで言えば「図形科学演習I」の方がもっと近いが,内容はもっと違っています. <AWTを使った理由> ・最初から JOGL を使わなかったのはなぜでしょうか。 ↓ 画面上の表示はピクセルという整数座標系で行なわれることを理解して欲しかったためです. <立体データの意味について> ・章末課題で四角形あるいは三角形が描画されるかどうかの違いがさっぱりわからなかった。 ↓ 四角形以上の多角形は三角形に分割されて描画される.その分割の仕方と, 分割後の三角形上での頂点列の順序によって,描画されるものが決まってくる. 多くの例を試しながら,規則について考えてみよう. <四面体の立体データの意味について> ・四面体の描画で,三角形の場合には,どのように頂点をとっても囲まれるため, 頂点が外から見て反時計回りになるようには定められていない. ↓ そんなことはないはず.四面体(三角形)の場合であっても、頂点の順序は意味があるはずで. プログラムを書き変えて試してみましょう. <JOGLと曲線/曲面について> ・OpenGLが頂点の集まりとして描画をしているのなら、 やっぱり円を描画しようと思 うと多数の頂点の多角形として表現するほかないのでしょうか。 ↓ そのとおりで,有限可算個の頂点によって表現されます.円だけでなく球も多角形で近似されます. <GL2オブジェクト> ・GL が OpenGL を利用 するためのインターフェイスであるのはわかったが、GL2 オブジェクトが何な のかいまいちわからない ↓ OpenGL 2.0 以降のインタフェース. <OpenGLの描画要素> ・OpenGLにはGraphicsクラスのdrawOvalメソッドのように、球や立方体を描くようなメソッドはあるのか疑問です。 ↓ OpenGLの図形要素は第8に挙げたものに限られるが,これらを組み合わせて立体を描画する関数なども用意されている. 厳密に言えば,OpenGLの範囲外ではあるが,GLUTで検索すると良いだろう. <頂点によるポリゴンの指定> ・頂点が与えられた時、その頂点を結ぶポリゴンの描き方は一意でない。 ・頂点を結ぶ直線がねじれの位置にある場合は、平面だけで頂点を結ぶことが出来なくなる。 ↓ 4角形以上の場合に,どのように分割するか,あるいは同一平面でない場合に何がおきるかという疑問と思われる. 一般的に3Dグラフィクスでは3角形に分割(tesselationと呼ばれる)してから描画することで, これらの問題に対処する(3角形への分割は一意ではなくシステム依存である). <配列による頂点や色の指定> ・gl.glVertex3fv(vertices[faces[i][j]], 0);の「, 0」の部分がどういう意味なのかがよく分からなかった。 3f ではなく 3fv としている ことに関係があるのだろうか...。(教科書 p.61 の offset 値?) ↓ 配列で与えたときに配列の何番目の要素から利用するのか(offset)を指定している(授業でも説明したと思う). <glColor4fの引数について> ・glColor4f()の4番目の引数の透明度がよくわからない。 ↓ 実際には,ブレンド関数と呼ばれる(すでに描画されている色と新たに描画する)色の混ぜ合せが明示的に指定されないと効果が現れない. 透明度を明示的に利用するのは,第9章のプログラムにある.興味があれば試してみよう. <gluLookAtについて> ・0 7 0のY軸の正の 方向から見た時だけ何も表示されなかった。バグであろうか。 ↓ up vector の指定と矛盾するために,カメラの姿勢を定義できていない.バグではありません. <gluLookAtのup vector> ・各軸方向から見た場合は、y 軸から見た時だけ何も見えなかった。 Web 上のコメントでは「up vector の指定と矛盾するためにカメラの姿勢を定義できていない」と 書いてあったがちょ っと意味がよく分からなかった ・gluLookAtでy軸正方向が画面上方になるように設定されているのがよくわかるが視点を y軸と完全に 一致させてしまうと投影されないのが疑問です ↓ プログラムでは画面内の上方向(up vector)を y軸に指定している.視線軸をy軸に一致させてしまうと,up vectorの指定が実現できなくなる(矛盾してしまう). ・サンプルプログラムにおいて、gluLookAtの引数の上方ベクトル(upx, upy, upz)が(0, 1, 0)になっていたが、 個人的には(0, 0, 1)の方が考えやすいと思う。 ↓ 3次元空間のことだけ考えるとz軸を鉛直方向にするのが一般的だが,投影面を xy平面と捉えると, y軸が鉛直方向上向きになるのが自然であり,3Dグラフィクスではy軸を鉛直方向にとることが多い. <gluLookAtとgluPerspectiveについて> ・x=y=z=12 に設定したときになぜか上の写真のような四面体の構造 になってしまった。 ↓ gluPerspectiveで定められている奥行きのクリッピング面によって, 立方体がクリッピングされて,三角錐(四面体風)に見えます. <OpenGLに関連して> ・OpenGLには以前作ったVector2DやMatrix2X2のような、ベクトル・行列の演算に関するメソッドなどはないのでしょうか。 ↓ OpenGLにはVector2Dのようなものは用意されていない.行列計算はできないわけではないが,基本的には表示専用となっている. <Javaのプログラミングについて> ・実行時のエラーってどう対処すれば治りますか? ↓ 実行時に発生するエラーこそ,プログラムのバグと言って良く,これを取り除くことは概して難しい. プログラムの実行途中の状況を確認していくのが一般的でしょう.ところどころに System.out.println を入れて,値を確認刷るのが手っ取り早いでしょう.統合環境では デバッガという機能が提供されていて,実行を途中でとめたり,変数の値を確認できたりします. <Javaの命名規則> ・「単語ごとに大文字なのになぜか最初は小文字から始まる」様式の命名規則はJavaの伝統的 なものなのでしょうか ↓ Javaでは最初を大文字にするのはクラス名という約束がある.