2019年12月31日)2008-08-31立方体の描画Pygameプリミティブの描画(2008/8/24)で使った四角形を6枚張り合わせて立方体を作ってみます。main()立方体の描画OpenGLでは、上のようにX軸、Y軸、Z軸の3次元空間が表せます。右向きがX軸の正の方向、上向きがY軸の正の方向、そして手前向きがZ軸の正の方向になります。このようにX軸とY軸を配置したとき手前向きにZ軸の正の方向がくる座標系は右手系と呼ばれます。OpenGLは右手系です。右手系と呼ばれるかと言うと・・・右手をパーにして薬指と小指を折ります。中指を半分くらいまで折って人指し指と直角になるようにしてください。親指をX軸の正の向き、人指し指をY軸の正の向きに合わせると中指がZ軸の正の向きになっています。左手でやるとZ軸の正の方向は逆方向になります。立方体はdraw_cube()関数の中で描画しています。display()からdraw_cube()を呼び出すと立方体が描けます。6つの面から構成されるので四角形を6つ描きます。頂点と四角形の対応関係は上の図を見てください。立方体の外側がポリゴンの表になるように反時計回りに頂点を指定するのがポイントです。各面はいろいろな色で塗りつぶしています。隠面消去3次元空間ではあるオブジェクトの背後にあるオブジェクトは陰に隠れてしまい見えなくなります。これを隠面消去と呼びます。OpenGLで隠面消去を有効にするには、デプスバッファを使います。デプスは深さって意味なので画面の奥行きという感じでしょうか。追加しなければならないコードは以下の3つです。GL_DEPTH_BUFFER_BIT)glutInitDisplayMode()でGLUT_DEPTHを指定し、glEnable()でGL_DEPTH_TESTを有効にします。あとglClear()で画面をクリアするときにGL_DEPTH_BUFFER_BITを指定してデプスバッファをクリアします。カメラの移動プログラム中の下のコードはカメラの位置をセットしています。あり、Z軸の負の向きを向いています。今回は、立方体を原点に配置しているためそのままでは立方体の中にカメラが入ってしまいます。カメラを移動する関数がgluLookAt()です。引数は、最初の3つがカメラの座標、次の3つがカメラの向き、最後の3つがカメラの上方向を表すベクトルです。狙って撮影しています。カメラは立方体の右斜め上の方にあります。0.0)、つまりY軸の正の方向にしています。ふつうはこの方向です。カメラの位置を変えてみます。今度は、立方体の左斜め後ろから撮影しています。下のようにちゃんと立方体の後ろ側が写りますね!こういうカメラの移動は、視野変換と呼ばれています。視野変換するときは下のようにモデルビュー行列GL_MODELVIEWをglLoadIdentity()で初期化してからgluLookAt()を呼び出して設定します。投影変換OpenGLで3次元空間を表せるといってもやはりコンピュータのスクリーンに表示しているのだから最終的には2次元の絵になります。3次元の空間を2次元の平面に投影することを投影変換と呼びます。投影変換の設定は、init()の下の部分です。投影変換は、gluPerspective()で設定します。第1引数の45.0度は視野角、第2引数はアスペクト比です。最後の2つは重要で、カメラからの距離が0.1から100.0の間の空間にあるオブジェクトが描画されることを意味しています。カメラからの距離が0.1より近いものや100.0より遠い場所にあるオブジェクトは画面に描画されません。gluPerspective()は、透視投影と呼ばれる遠近法(近いものは大きく、遠いものは小さく見える)を用いた投影方法です。遠近法を使うため2次元平面に描画されても3次元空間っぽく見えるわけです。投影変換を設定するときは、投影行列(GL_PROJECTION)をglLoadIdentity()で初期化してからgluPerspective()を呼び出して設定します。リサイズコールバック関数メイン関数でリサイズコールバック関数reshape()をglutReshapeFunc()で登録しています。100.0)この関数は、ウィンドウのサイズを変更したときに自動的に呼ばれるコールバック関数です。ウィンドウサイズが変わると座標軸の長さが変わってしまうためウィンドウの幅widthと高さheightのアスペクト比に応じて投影変換をglutPerspective()で再設定しています。上の図は、ウィンドウサイズを変えたときの様子です。リサイズコールバック関数を呼び出して、投影変換を再設定しないと左のように各座標軸の長さが変わってしまい、立方体が歪んでしまいます。再設定すると右のように歪みません。10:41立方体の描画Tweet広告を非表示にする関連記事2008-10-18キーボードの利用キーボードを使う方法です。ティーポットがキーボードによって...2008-09-15神々のトライフォース某ゲームのあれです。三角形を3つ書いて回転させるだけです。»プロフィールid:aidiary人工知能とその関連分野に興味があります。)はてなブログをはじめよう!aidiaryさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。