<OpenGLを用いた回転計算> ・回転計算は gl.glRotated で行えるが、毎回更新しなくてはならない回転計算のあとに 平行移動計算を行わなくてはならないのがネックである。 そこで、直近の回転情報だけを格納する配列(4×4行列を表すもの) rotateMatrix を 用意し、 MODELVIEW_MATRIX を初期化 → MODELVIEW_MATRIX に rotateMatrix を乗算 → axis, angle を基に gl.glRotated で MODELVIEW_MATRIX に更に回転を加える → その行列を rotateMatrix に上書き → MODELVIEW_MATRIX を初期化 → offset を基に MODELVIEW_MATRIX を平行移動 → MODELVIEW_MATRIX に rotateMatrix を乗算 という流れで計算を進めるようにした。 見たところ充分に回転と平行移動はできている気がするのだが、これだと不都合が あるのだろうか。(もちろんこれだと四元数の勉強にはならない。プログラムとしての問題はあるのだろうかという疑問。) ↓ プログラムとしては,このようなやり方(回転をOpenGLに任せる)でも良い.括弧内にあるように回転/姿勢の勉強のための導入と思ってもらえばよい. <四元数> ・そういえば、四元数をもちいた計算はジンバルロックの回避にも使えると聞きましたが、どういう事でしょうか? ↓ 回転変換を x軸,y軸,z軸の各軸周りの回転で表現しようとすると,回転が一意に定まらない状況が起こりうる.回転軸と回転量という指定方法であれば問題ないのだが,行列で回転を扱おうとすると,軸周りの回転を組み合わせることが多くなる(たとえば教科書の第11章)ので,気をつける必要がある. <透視投影の効果> ・透視投影だと、物体が中央から離れるほど投影された図は歪んで見える。 平行移動ではなく、視点位置を中心とした回転を行えば、歪むことはない(表示位 置が変わるだけ)と考えられる。 なお、この歪んだ図を見るときに画面の正面ではなく斜め横(平行移動の反対方 向)から見ると、歪んでいないように見える。 ・透視投影では、視点と物体の各点を結ぶ直線と投影面の交点を求めることで描画する。そのため、正面 からずれた物体ほど引き伸ばされて表示されることになる(図 3)。歪んでいないように見るには、描画時の視点(図 3 の eye)の位置から見ればよい。つまり、画面に近づ いてウインドウの中央が正面に来るように見ればよい。 ↓ 描画する際の視点(カメラ位置)と投影面との相対的な位置関係と,実際に画面を見るときの目の位置と画面との相対的な位置関係が一致していないとおかしなことが起きる.上記の 2番目の考察のように,実際に自分で投影している状況を描いててみると良いだろう. <奥行き方向の平行移動> ・プログラムを実行して色々な方向に動かすと、ある位置では以下のように物 体が消えてしまう。これの原因は、なぜだかよくわからなかった。 ↓ 奥行き方向に前方クリッピング面/後方クリッピング面があるため,クリッピング面の外に出ると表示されなくなる. <入力イベント - キーの押下> ・Shift を押した場合という場合分 けが全くなされていないこと。 ↓ Shiftキーを押したか否かは,MouseEvent の modifiers と SHIFT_MASK (InputEventクラス参照)によって確認できる. <Javaの文法> ・/=,+=が何を表しているのか分からなかった。 ↓ ちょっと検索してみると,色々と説明が出てくると思う.たとえば,http://www.javaroad.jp/java_operator6.htm など. <HSBとRGB> ・教科書では getRGBComponents をどうやって使えばいいかが明示的に書いておらず(p15 に用途 はありましたが、どうやって作用させるか、どこに格納されるのかがありませんで した)、説明がいただきたかったです。 ↓ Java の API仕様書を自分で読む癖をつけよう.http://java.sun.com/javase/ja/6/docs/ja/api/index.html 特に今回は.http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Color.html