2017-05-12 5 views
0

Diese kein glViewport hat und zieht richtig:einfachen Aufruf zu glViewport verursacht leeren Bildschirm

glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 

glColor3f(1.0f, 0,0); 
glBegin(GL_TRIANGLES); 
{ 
    glVertex3f( 0.0, 1, 0.0); 
    glVertex3f(-0.2, -0.3, 0.0); 
    glVertex3f( 0.2, -0.3 ,0.0); 

} 

Die Koordinaten der Eckpunkte sind alle innerhalb von -1 und 1, so habe ich ein Ansichtsfenster, die sie enthalten sollte:

glViewport(-1,-1,2.0,2.0); 

glClearColor(0, 0, 0, 0); 
glClear(GL_COLOR_BUFFER_BIT); 

glColor3f(1.0f, 0,0); 
glBegin(GL_TRIANGLES); 
{ 
    glVertex3f( 0.0, 1, 0.0); 
    glVertex3f(-0.2, -0.3, 0.0); 
    glVertex3f( 0.2, -0.3 ,0.0); 

} 

Sobald ich dies tue, ist der Bildschirm leer. Ohne das Ansichtsfenster scheint der Bildschirm in Einheiten zu zeichnen, so dass die Bildschirmbreite und -höhe 2 sind, wie das Demo-Dreieck zeigt. Ich kann auch etwas auf -1, -1 setzen und es befindet sich in der linken unteren Ecke, weshalb meine glViewport auch die untere linke Koordinate ist. Was ist der offensichtliche Grund, dass nach dem Viewport nichts angezeigt wird?

Antwort

3

Scheint zu missverstehen, was glViewport tut: Es definiert, welche Pixel koordiniert den sichtbaren NDC-Bereich ([-1, 1]) sollte zugeordnet werden. Wenn Sie [-1, -1, 2, 2] verwenden, wird das gesamte Bild von Pixel -1 auf Pixel 1 im Fenster gezeichnet.

Wenn Sie angeben möchten, welcher Bereich Ihres Weltkoordinatensystems dem sichtbaren NDC-Bereich zugeordnet wird, sollten Sie eine geeignete Projektionsmatrix verwenden.

+1

Ich denke 'glOrtho' oder' glTranslatef' und 'glScalef' sind erwähnenswert. – lisyarus

+0

Vielen Dank, wie sich herausstellen würde, dass mein Fehler auf ein Problem mit meiner vorhandenen Orthoprojektion mit GLKit unter OSX zurückzuführen ist. Ich habe eine neue Frage eröffnet. – johnbakers

+3

@lisyarus Alle drei dieser Funktionen sind veraltet und im Kern-OpenGL nicht verfügbar. Sie verwenden eine Bibliothek wie GLM besser. –

Verwandte Themen