我正在使用QGLWidget绘制一个简单的图像查看器,绘制两个三角形,然后用纹理渲染它们。
该程序允许用户通过向下/向上滚动来缩放图像,然后使用glScalef更改缩放系数。
到目前为止它的效果很好,除非我遇到了我的视锥体切割的问题。
这是我的代码
void GLWidget::paintGL()
{
// scrollOffset has the coordinates of horizontal and vertical scrollbars
glViewport(0 - scrollOffset.x(), 0 + scrollOffset.y(), this->width(), this->height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, this->width(), this->height(), 0); // flip the y axis
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// zooming, error happens when the factor is above 3.0
glScalef(zoomFactor, zoomFactor, zoomFactor);
glEnable(GL_NORMALIZE);
glClear(GL_COLOR_BUFFER_BIT);
// Draw something...
}
截图,当缩放因子非常大(3.0 / 4.0以上)时,通常会发生错误
答案 0 :(得分:0)
如果不需要,请不要缩放Z轴。
变化:
glScalef(zoomFactor, zoomFactor, zoomFactor);
到
glScalef(zoomFactor, zoomFactor, 1.0f);