OpenGL窗口切断了模型视图

时间:2012-06-04 12:15:57

标签: c++ qt opengl glulookat

我正在使用Qt和OpenGL(更具体地说,QGLWidget)用C ++编写台球游戏。我在某种程度上了解OpenGL,但不是太专业。

我做了什么: 使用Qt小部件(按钮,...)和QGLWidget(我自己的实现)创建一个Qt应用程序窗口。

问题: 我可以在这个窗口画一个球并旋转它,等等但是视图的宽高比不正确+我似乎无法使用整个空间。

Wrong aspect ratio 白色矩形是比赛场地(测量值:浮点坐标为1.4 x 2.7)

我可以改造模型但是它似乎被切断了: Model cut off

一旦我转换视图(检查下面的功能),我的模型的一部分似乎被切断了。

这是矩形(在这些坐标内正确绘制球):

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);

1 个答案:

答案 0 :(得分:1)

你的问题在于:

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -0.05, +1.45, -0.05, +2.75, 0.0, 50.0 );

投影的左/右或上/下限应与视口的宽高相匹配。那些硬编码值将无法适应窗口几何体的变化。

还要确保近处和远处的平面不会切入可见的场景范围。