OpenGL - Zuordnung zwischen x und y in glVertex2f (x, y) zu Ganzzahlkoordinaten

  • Ich würde gerne wissen, wie die Scheitelpunkte von glVertex2f(x, y) den tatsächlichen Ganzzahlkoordinaten zugeordnet werden.

    Ich beabsichtige, eine komplexe Ebene zu verwenden mit minR, minI und maxR, maxI (I und R - Imaginary und Real Part), sodass die Ebene auf dem Bildschirm auf 512 x 512 Pixel abgebildet wird. Ich habe Punkte von 512 Schritten zwischen den Werten min und max.

    Die Zuordnung zwischen den Scheitelpunkten ist unklar, da ich mein planares Bild mit glScalef(100, 100, 0) skalieren musste, um es zu erhalten grob auf den Bildschirm passen. Trotzdem bleibt ein großer Teil davon leer.

    Bitte beachten Sie, dass ich die Routine glBegin(GL_POINTS) verwende, um die Punkte in der Ebene auf dem Bildschirm abzubilden. Der Code sieht folgendermaßen aus:

     for (X = 0; X < 512; X++)
        for (Y = 0; Y < 512; Y++)
        glVertex2f (Complexplane[X][Y].real, Complexplane[X][Y].imag);
     

    PS:

     Complexplane[0][0].real = -2, Complexplane[0][0].imag = -1.2
    Complexplane[511][511].real = 1.0, Complexplane[0][0].imag = 1.8
     
    22 November 2011
    James
2 answers
  • Ich gehe davon aus, dass Sie keine Projektions- oder Modelview-Matrizen festgelegt haben - diese werden standardmäßig auf die Identitätsmatrix gesetzt ...

    Für X , Y-Koordinaten, ein Punkt ist sichtbar, wenn: -1 <= X <= 1, -1 <= Y <= 1

    Die glViewport beschreibt, wie dieser Bereich dem Fenster zugeordnet wird. Es wird anfänglich auf (0, 0, window_width, window_height) gesetzt, wenn der GL-Kontext erstellt wird. Die Tatsache, dass glScale(100, 100, 0) nur einen Teil des Fensters einnimmt, legt nahe, dass Sie eine andere Transformation an anderer Stelle anwenden.

    22 November 2011
    Brett Hale
  • Die Zuordnung hängt von den gesetzten Transformationsmatrizen ab. In OpenGL-2 ist die Pipeline

     v_eye = ModelviewMatrix * v
    v_projected = ProjectionMatrix * v_eye
    v_clipped = clip(v_projected)
    v_NDC.xyzw = v_clipped.xyzw / v_clipped.w
     

    Die Standardmatrizen sind Identität, daher ist die einzige Operation die in Der Standardzustand ist das Clipping. v_NDC durchläuft dann die Viewport-Transformation:

     p.xyz = (v_NDC.xyz + 1) * viewport.wh / 2 + viewport.xy
     
    22 November 2011
    datenwolf