2017-01-15 1 views
3

Siehe meinen Code (in OpenGL, C++) die blaue Kugel ist breiter [gestreckt], wie kann ich es beheben, brauche ich Übersetzung ohne Dehnung: können Sie meinen Code beheben, um Dehnung zu vermeiden? mein Code:glTranslatef dehnt meine Sphäre, wie kann ich Sphere übersetzen, ohne sie zu dehnen?

#include <GL/glut.h> 

static void resize(int width, int height) 
{ 
    const float ar = (float) width/(float) height; 
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); 
} 

static void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor3d(0,0,1); 
    glPushMatrix(); 
     glTranslatef(3.0, 0.0, -6.0); 
     glutSolidSphere(1,50,50); 
    glPopMatrix(); 

    glColor3d(1,0,0); 
    glPushMatrix(); 
     glTranslatef(0.0, 0.0, -6.0); 
     glutSolidSphere(1,50,50); 
    glPopMatrix(); 
    glutSwapBuffers(); 
} 

int main(int argc, char *argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitWindowSize(1200,1200); 
    glutCreateWindow("gggggggggggg"); 
    glutReshapeFunc(resize); 
    glClearColor(1,1,1,1); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
} 
+0

Ich fühle mich gezwungen, dies zu fragen: Gibt es einen Grund, warum Sie OpenGL-Code verwenden, der seit über einem Jahrzehnt veraltet ist? – GraphicsMuncher

+0

Nein. Ich weiß nichts über andere Optionen. Was empfehlen Sie zu verwenden? Ich versuche eine 3D-Kollisionssimulation von 2 Ellipsoiden zu machen, die sich um ihren Schwerpunkt drehen (um eine bestimmte Achse) und aufeinander traslatieren. –

+0

Ich denke, es wurde auf OpenGL 4.0 oder neuer und wahrscheinlich Core-Profil gerichtet, die GLSL benötigt. OpenGL 1.0 ist immer noch gültig, wenn Sie funktionierende Apps haben wollen ... OpenGL 4.0 und höher wird immer noch nicht gut von den gfx-Anbietern unterstützt. Sie können leicht mit unvorhergesehenen HW-Inkompatibilität Gfx-Probleme enden. Wenn Sie Spiele programmieren, ist es in Ordnung, da erwartet wird, dass Sie eine gültige GPU haben, aber davon abgesehen (zum Beispiel in der Manufaktur) gibt es noch Tonnen von nutzlosem Intel und Toshiba Zeug, wo neuere GL Sachen nicht funktionieren. – Spektre

Antwort

1

Die Verzerrung kommt aus glFrustum. Dies ist ein Beispiel für eine Projektion, die das tut, was Sie fragen.

glOrtho(-5, 5, -5/ar, 5/ar, -20, 20); 
+0

Vielen Dank. –

Verwandte Themen