OpenGL Renderreichweite



  • wenn ich durch die gegend fliege, werden objekte in der entfernung nicht mehr gezeichnet...

    wie kann ich manuell festlegen bis zu welcher entfernung die objekte noch gezeichnet werden sollen?



  • Du kannst die Sichtweite festlegen, indem du den View-Frustum einstellst.

    Mit dieser Methode sollte es funktionieren:
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.5f, 1.0f, 1000.0f );

    1.0f ist die vordere Clipping-Ebene.
    1000.0f ist die hintere Clipping-Ebene.




  • Mod

    falls du glFrustum(left, right, bottom, top, near, far); nutzt, mußt du die far veriable vergrößern

    rapso->greets();



  • Oder du nutzt gluPerspective, und gibst die Far Plane direkt als letzten wert ein 😉



  • ich hab ma glfrustum probiert
    dann veränderts aber auch die perspektive und damit auch schrift und objektauswahl

    die perspektive soll aber gleich bleiben und nur auch objekte in weiterer entfernung rendern



  • wie kann ich eigentlich die aktuellen werte der perspektive bekommen?



  • Kannst du ohne Probleme 🙂
    Allerdings weiß ich es jetzt nur mit Matritzen.

    In dem Code, wie man das Frustum ausliest, kannst du es auslesen:

    void CCLipper::BuildFrustum()
    {
        static SMatrix proj, modl, clip;
        static CMatrix cMat;
    
        // projection matrix auslesen
        glGetFloatv( GL_PROJECTION_MATRIX, (float*)&proj.vec );
    
        // modelview matrix auslesen 
        glGetFloatv( GL_MODELVIEW_MATRIX, (float*)&modl.vec );
    
        cMat.Mul( clip, modl, proj );
    
        // und ebenen gleichungen bauen !
        // RIGTH PLANE
        frustum[0][0] = clip.vec[ 3] - clip.vec[ 0];
        frustum[0][1] = clip.vec[ 7] - clip.vec[ 4];
        frustum[0][2] = clip.vec[11] - clip.vec[ 8];
        frustum[0][3] = clip.vec[15] - clip.vec[12];
    
        // LEFT PLANE
        frustum[1][0] = clip.vec[ 3] + clip.vec[ 0];
        frustum[1][1] = clip.vec[ 7] + clip.vec[ 4];
        frustum[1][2] = clip.vec[11] + clip.vec[ 8];
        frustum[1][3] = clip.vec[15] + clip.vec[12];
    
        // DOWN PLANE
        frustum[2][0] = clip.vec[ 3] + clip.vec[ 1];
        frustum[2][1] = clip.vec[ 7] + clip.vec[ 5];
        frustum[2][2] = clip.vec[11] + clip.vec[ 9];
        frustum[2][3] = clip.vec[15] + clip.vec[13];
    
        // UP PLANE
        frustum[3][0] = clip.vec[ 3] - clip.vec[ 1];
        frustum[3][1] = clip.vec[ 7] - clip.vec[ 5];
        frustum[3][2] = clip.vec[11] - clip.vec[ 9];
        frustum[3][3] = clip.vec[15] - clip.vec[13];
    
        // FAR PLANE
        frustum[4][0] = clip.vec[ 3] - clip.vec[ 2];
        frustum[4][1] = clip.vec[ 7] - clip.vec[ 6];
        frustum[4][2] = clip.vec[11] - clip.vec[10];
        frustum[4][3] = clip.vec[15] - clip.vec[14];
    
        // NEAR PLANE
        frustum[5][0] = clip.vec[ 3] + clip.vec[ 2];
        frustum[5][1] = clip.vec[ 7] + clip.vec[ 6];
        frustum[5][2] = clip.vec[11] + clip.vec[10];
        frustum[5][3] = clip.vec[15] + clip.vec[14];
    }
    

    In der Near und Far Plane findest du die Informationen, über die Renderreichweite



  • kewl danke... werd ich gleich mal ausprobiern


Anmelden zum Antworten