2016-09-29 2 views
1

Ich versuche Quadrics in C++ mit OpenGL zu zeichnen.Wie zeichne Hyperboloids mit OpenGL C++?

Quadrics sind die Kugel und Hyperboloides eines Blattes und zwei Blätter. Um sie zu zeichnen, verwende ich nur die parametrischen Gleichungen von jedem. Die Kugel, wenn ich zog

Beispiel: Die parametrischen Gleichungen der Kugel ist:

Sphere

Um die Kugel mit diesen Gleichungen zu zeichnen, was ich in OpenGL zu tun ist einfach dies für eine Kugel, das auf der Ursprung zeichnen x0, y0 und z0 gleich Null:

void Sphere(){ 
    GLfloat x, y, z, alpha, beta; // Storage for coordinates and angles 
    GLfloat radius = 1.0f; 
    int gradation = 20; 
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
    for (float alpha = 0.0; alpha < PI; alpha += PI/gradation) 
    { 
     glBegin(GL_TRIANGLE_STRIP); 
     for (beta = 0.0; beta < 2.01*PI; beta += PI/gradation) 
     { 
      x = radius*cos(beta)*sin(alpha); 
      y = radius*sin(beta)*sin(alpha); 
      z = radius*cos(alpha); 
      glVertex3f(x, y, z); 
     } 
     glEnd(); 
    } 
    glutSwapBuffers(); 
} 

I die Ergebnis ist dies (eine Kugel):

enter image description here

Problem:

Durch die gleiche Logik auf den zeichnen Anwendung Hyperboloide, ich weiß nicht, was ich will. Die parametrischen Gleichungen der Hyperboloides sind wie folgt:

enter image description here

Beim Versuch, den Hyperboloid ein Blattes mit den Gleichungen in dem Bild gezeigt zu zeichnen, ist dies das Ergebnis ist:

Wenn jemand etwas darüber weiß, bitte, wenn Sie mir dabei helfen können. Danke euch allen.

Hinweis: Ich weiß, es gibt andere Möglichkeiten, ein Hyperboloid zu zeichnen, aber die Art, wie ich sie zeichne, ist durch seine parametrischen Gleichungen.

Antwort

0

Welcher Code erzeugt diese Ausgabe, nicht der Code, der Ihre Kugel erzeugt? Bitte stellen Sie ein MCVE zur Verfügung.

Hier ist meine Vermutung: die Reichweite Ihres Loops erzeugt nur positive Werte von z, und Sie können den Bereich -PI-PI stattdessen versuchen.

+0

Der Code der Kugel ist, dass nur um 45 Grad relativ zur Achse gedreht Y –

+0

@ L.Flor ich fürchte, ich verstehe nicht. Können Sie einen MCVE bereitstellen, der die fehlerhafte Ausgabe generiert? – Davislor

+1

@ L.Flor, wenn Sie Hilfe benötigen, bieten Sie [Beispielcode mit, wie man und alles] (http://stackoverflow.com/help/mcve) alias "minimales, vollständiges und überprüfbares Beispiel". –