[ ソース ]
void init()
{
float aspect = (float)GLWINDOW_WIDTH / (float)GLWINDOW_HEIGHT;
glClearColor(0.0, 0.0, 0.0, 1.0);
/*ウインドウに表示する画像の範囲。この場合は画面全体を指している*/
glViewport(0, 0, GLWINDOW_WIDTH, GLWINDOW_HEIGHT);
if(LBUTTON_MODE != MODE03_MOVEJOINT_GLSELECTIONMODE &&
LBUTTON_MODE != MODE15_ADDWEIGHT_MOVEWEIGHTBOX_SURFACE_GLSELECTIONMODE &&
LBUTTON_MODE != MODE19_MOVEJOINT_ROTARIONJOINT_SELECTION &&
LBUTTON_MODE != MODE22_ADDWEIGHT_SELECT_VERTEX_SELECTION &&
LBUTTON_MODE != MODE24_ADDWEIGHT_SELECT_JOINT_SELECTION &&
LBUTTON_MODE != MODE29_EDIT_ROTATIONAXIS_SELECTION)
{
glMatrixMode(GL_PROJECTION); /*投影変換行列スタックを操作対象とする*/
glLoadIdentity(); /*P行列スタックをクリア(単位行列にする)*/
}
gluPerspective(50.0, aspect, 1.0, 30.0);
glMatrixMode(GL_MODELVIEW); /*幾何変換スタックの操作を対象とする*/
[ 解説 ]
aspectを取得(OpenGL縦幅 / 横幅)で求められる。
glClearColorで画面全体を黒で塗りつぶす。
glViewport()でOpenGL画面の中で実際にOpenGL描画関数で描画する範囲を決める。
OpenGLのセレクションモードだった場合、投影変換行列を初期化しない。
glMatrixMode()をGL_PROJECTIONにした後、glPushMatrix()で投影変換行列を保存させるため、ここでは初期化せず、
(void)glRenderMode(GL_SELECT)を呼んだ後にglMatrixMode()→glPushMatrix()→glLoadIdentity()の順で初期化します。
最後にgluPerspective()で描画の為の設定を行い、glMatrixMode()でモデルビュー行列を対象として描画。
初期化関数はこのような感じです。
|