影をつける2010年1月7日 | |
![]() ファイル見所トーラスの影を、光源に対する床へのトーラスの写像として描画しています (床の高さにペッタンコのトーラスを描画している)。床からはみ出る部分は、ステンシルバッファを使って描画しないようにしています。 内容OpenGL は光源による濃淡は計算してくれますが、影までは描いてくれません。ここでは、簡易的に影をつける方法を試してみます。GLUT の examples に影を描くプログラムが含まれていますので、それを参考にします。 影の描画に使う関数は shadowMatrix() と findPlane() です。まず、findPlane で影を描く平面を用意します。 findPlane(floorPlane, (GLfloat *)floorVertex[0], (GLfloat *)floorVertex[1], (GLfloat *)floorVertex[2]); 引数には平面を受け取る配列、そして床面の 3 点を渡します。そして、影を表現するための変換行列を計算します。 shadowMatrix(floorShadow, floorPlane, light0Position); 引数には変換行列を受け取る配列、影を描く平面、光源の位置を渡します。最後に、次のように影を描画します。 glPushMatrix(); glColor3f(0., 0., 0.); glMultMatrixf(&floorShadow[0][0]); glTranslatef(0., 0.7, 0.); glutSolidTorus(0.1, 0.5, 20, 20); glPopMatrix(); 変換行列をかけてトーラスを描画することで、トーラスが影のような形で床面に描画されます。影を描くとき、光源は無効にしておきます。 「影」は床をはみ出た部分にも描画されますので、ステンシルバッファを使って描画領域を床のみに制限しています。 | |
| PENGUINITIS | |