如何在QGLWidget中使用glScalef进行缩放时修复fustrum cut

时间:2013-11-25 03:13:23

标签: c++ opengl qglwidget

我正在使用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以上)时,通常会发生错误 enter image description here

1 个答案:

答案 0 :(得分:0)

如果不需要,请不要缩放Z轴。

变化:

glScalef(zoomFactor, zoomFactor, zoomFactor);

glScalef(zoomFactor, zoomFactor, 1.0f);