Qt と OpenGL (具体的には QGLWidget) を使用して、C++ でビリヤード ゲームをプログラミングしています。私は OpenGL の使い方をある程度知っていますが、あまり専門的ではありません。
私がやったこと:Qtウィジェット(ボタンなど)とQGLWidget(私自身の実装)を含むQtアプリウィンドウを作成します。
問題: このウィンドウにボールを描画して回転させることはできますが、ビューの縦横比が正しくありません + スペース全体を使用できないようです。
白い四角形は競技場です (寸法: float 座標で 1.4 x 2.7)
モデルを変換できますが、途切れているようです:
ビューを変換するとすぐに (関数については以下を確認してください)、モデルの一部が切り取られたように見えます。
これは長方形です (ボールはこれらの座標内で正しく描画されます):
glBegin(GL_LINE_LOOP);
glColor3f(255.0, 255.0, 255.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.4, 0.0, 0.0);
glVertex3f(1.4, 0.0, 0.0);
glVertex3f(1.4, 2.7, 0.0);
glVertex3f(1.4, 2.7, 0.0);
glVertex3f(0.0, 2.7, 0.0);
glVertex3f(0.0, 2.7, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glEnd();
OpenGL のサイズ変更機能:
void GLWidget::resizeGL( int width, int height )
{
int side = qMin( width, height );
glViewport( (width - side) / 2, (height - side) / 2, side, side );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -0.05, +1.45, -0.05, +2.75, 0.0, 50.0 );
//glFrustum( -0.05, +1.45, 0.0, 0.0, 0.0, 50.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
そして最後に、ビューに関連するレンダー関数の一部:
gluLookAt(0.0, 0.0, 1.0, 0.0, -0.70, 0.0, 0.0, 1.0, 0.0 ); // This is the cut of part
//gluLookAt(0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); // Normal but weird rectangle
glScalef( 1.0, 1.0, 1.0);