Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt + OpenGL 3+ - Frustum not completely rendered



  • Hi everyone!

    I'm currently stuck with an issue when trying to draw a simple geometry in a QGLWidget. Indeed the frustum is not completely rendered.

    Actually I've set a perspective of 45°, my camera is translated to 4 units towards the negative Z axis and all my geometry is drawn on the z=0 plane. Thus, any point on this plane situated within a square from (-2, -2 (0)) to (2, 2, (0)) must be rendered as shown on my schematic:

    !http://imageshack.com/a/img843/8357/1n1t.png(Schem)!

    But actually my frustum is not totally rendered. Indeed i've created a simple trapezoidal geometry which is totally inside my frustum, but when rendering the geometry is incomplete as shown in the next screenshot:

    !http://imageshack.com/a/img845/9657/sdpt.png(sc)!

    So I'm wondering if I've missed a point since I'm not able to render all the content of my frustum.

    I've set my MVP matrix as:

    @void GLWidget::resizeGL(int w, int h)
    {
    // Set OpenGL viewport to cover whole widget
    glViewport(0, 0, w, h);

    // Calculate aspect ratio
    qreal aspect = qreal(w) / qreal(h); //qreal(h ? h : 1);
    
    // Set near plane to 3.0, far plane to 7.0, field of view 45 degrees
    const qreal zNear = 2.0, zFar = 7.0;
    qreal fov = 45.0;
    
    // Reset projection
    m_oProjection.setToIdentity();
    
    // Set perspective projection
    m_oProjection.perspective(fov, aspect, zNear, zFar);
    

    }@

    then in my paintGL() function I calculate the projection matrix as:

    @
    // Calculate model view transformation
    QMatrix4x4 matrix;
    matrix.translate(0.0, 0.0, -4.0f);

    // Set modelview-projection matrix
    m_oProgram.setUniformValue("mvp_matrix", m_oProjection * matrix);@
    

    And finally my geometry is set as:

    @
    // Initializing Vertices attributes: position and color
    VertexData vertices[numVertices] = {
    {QVector3D(-2, 1, 0), QVector2D(0, 1)}, //v0 - top left
    {QVector3D(-1, -1, 0), QVector2D(0, 0)}, //v1 - bottom left
    {QVector3D(1, -1, 0), QVector2D(1, 0)}, //v2 - bottom right
    {QVector3D(2, 1, 0), QVector2D(1, 1)} //v3 - top right
    };@

    Does anyone have ever encounter such an issue? Do you think I missed a parameter to set in my pipeline?

    Yhanks in advance for your answers!!


Log in to reply