2017-10-30 1 views
-1

Ich mache dieses OpenGL-Projekt für meine Computer Graphics-Klasse, wo ich ein Objekt anzeigen und ich es drehen und Sachen, die Sache ist, dass zu Beginn des Projekts wir glOrtho() verwendet und es sah wirklich toll aus.Warum wird dieses Objekt anders gezeichnet, wenn ich glFrustum verwende?

glOrthoOBJ

Aber jetzt der Lehrer sagte, dass wir glFrustum() für Perspektive verwenden, und wenn ich diese Funktion verwenden, wird das Objekt wie folgt gezeichnet und ich weiß wirklich nicht, warum dies geschieht:

glFrustumOBJ

Dies ist mein Code aus der init() Funktion, in der alles verändert:

void init (void) 
{ 
    /* select clearing (background) color  */ 
    glClearColor (0.0, 0.0, 0.0, 0.0); 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-100.0, 100.0, -60.0, 160.0, -100.0, 100.0); 
    //glFrustum(-100, 100 ,-100 ,100 ,1 , 40); 


    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glRotatef(90,0,1,0); 
} 

Ich würde Ihre Hilfe zu schätzen wissen.

EDIT: Wenn ich glFRustum (-100, 100, -100, 100, 20, 200) verwende, sieht es so aus, als ob ich näher komme, aber was ist mit den linken, rechten, oberen und unteren Parametern? Sind sie mit diesen Werten in Ordnung?

enter image description here

+0

Probieren Sie für ein näheres Nah-zu-Fern-Verhältnis aus, Sie erhalten ein genaueres Ergebnis der orthografischen Projektion. Versuchen Sie zum Beispiel glFRustum (-100, 100, -100, 100, 20, 150). 40 zu 1 ist extrem. – Victor

+1

Ich nehme an, dass das Objekt in der Mitte der Szene ist, bei (0,0,0). Entfernen Sie sich vom Objekt 'glMatrixMode (GL_MODELVIEW); glLoadIdentity(); glTranslatef (0,0, -100,0f); glRotatef (90,0,1,0); ' – Rabbid76

+1

@Victor: Das' far/near'-Verhältnis macht eine perspektivische Projektion in keiner Weise näher an eine orthonognale, noch ist ein Verhältnis von 40: 1 in irgendeiner Weise "extrem" . – derhass

Antwort

0

Es ist schwer, ohne weitere Informationen sicher zu sein. Vielleicht könnte das Modell einen Einblick geben. Aber ich vermute, dass es vielleicht mit Ihren Clipping-Ebenen zu tun hat (nearVal und farVal wie beschrieben here) Argumente übergeben an glFrustum (1, 40). Versuchen Sie vielleicht, sie auf einen größeren Bereich wie Ihren glOrtho Aufruf einzustellen: 1, 150 (Hinweis: weder nearVal noch farVal können negativ sein, wenn sie an glFrustum übergeben werden).

Dies hängt alles von der Größe des Modells und seiner Positionierung relativ zur Kamera ab. Wenn ein Teil des Modells außerhalb der Clipping-Ebenen liegt, wird es, naja, abgeschnitten.

Verwandte Themen