我正在使用 Qt 和 OpenGL(更具体地说,QGLWidget)用 C++ 编写台球游戏。我对 OpenGL 有一定了解,但不是太专业。
我所做的:创建一个 Qt 应用程序窗口,其中包含 Qt 小部件(按钮,...)和一个 QGLWidget(我自己的实现)。
问题:我可以在这个窗口中画一个球并旋转它,等等,但是视图的纵横比不正确+我似乎无法使用整个空间。
白色矩形是比赛场地(尺寸: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);