- 描画をする前の初期化 -
[ ソース ]
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()でモデルビュー行列を対象として描画。

初期化関数はこのような感じです。


inserted by FC2 system