2010-12-11 5 views
1

Ich habe vor kurzem gelernt OpenGL zu lernen, und es scheint so intuitiv, aber das bin ich fest. Wie kann ich die Einstellungen so ändern, dass OpenGL ein pixelbasiertes Koordinatensystem anstelle dessen verwendet, was es jetzt verwendet? Zum Beispiel zieht dieser Code ein Rechteck etwa 10x20 Pixel:Setzen Sie das Koordinatensystem auf Pixel in OpenGL für Cocoa

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+0.05, player.y, 0); 
    glVertex3f(player.x+0.05, player.y+0.1, 0); 
    glVertex3f(player.x, player.y+0.1, 0); 
} 

Wie kann ich es so machen, dass dieser Code:

glBegin(GL_QUADS); { 
    glVertex3f(player.x, player.y, 0); 
    glVertex3f(player.x+10.0, player.y, 0); 
    glVertex3f(player.x+10.0, player.y+20.0, 0); 
    glVertex3f(player.x, player.y+20.0, 0); 
} 

würde im Grunde das Gleiche produzieren? Vielen Dank.

EDIT: Ich sah jemand vorschlagen, glOrtho() irgendwo, aber sie gaben keine Informationen darüber, wie man das macht. Würde das funktionieren und wenn ja, wie würde ich es tun?

Antwort

2

Tut mir leid, wenn ich mich kurz anhört; Es stellt sich heraus, dass Safari auf dem iPad die Eingabe wegwirft, wenn es wahrscheinlich durch Speicherwarnungen ausgelöst wird.

Annahmen: Sie haben die Frage iPhone markiert, so sprechen Sie über Cocoa Touch (mit dem Ursprung in der oberen linken, positiv auf der y-Achse ist unten). Ebenso möchten Sie wahrscheinlich Punkte, nicht Pixel - also 320x480 davon auf dem Bildschirm, ob auf einem Retina-Display oder nicht.

glOrtho ist genau das, was Sie wollen - siehe die man-Seite unter http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.html. Wahrscheinlich möchten Sie das also mit Ihrem Projektionsstack machen:

glOrthof (0, 320, 480, 0, 1, 1000);

Und dann tun dies einmal auf Model-View:

glTranslatef (0, 0, -500)

und alle zukünftigen Geometrie ohne z-Komponente vor.

Dies ist ein Viewport ohne Perspektive eingerichtet (dh, z Position hat keinen Einfluss auf die Objektgröße), mit der linken Kante des Bildschirms bei x = 0, rechts bei x = 320, die Spitze bei y = 0 und die untere bei y = 480. Es legt willkürlich die Nahe-Clip-Ebene in einer Entfernung von 1 und die Ferne in einer Entfernung von 1000, da sie irgendwo sein müssen. Aber dann übersetzt es sich auf halbem Weg (okay, nicht ganz genau) zwischen den beiden und wenn du also keine weiteren z Koordinaten eingibst, wird deine ganze Geometrie sichtbar sein und du hast einen gewissen Spielraum für Rotationen um y oder x wenn du will diese.

Warnung: glVertex-Aufrufe sind auf iOS nicht verfügbar, da sie nicht Teil von OpenGL ES sind. Sie sind auch in modernen OpenGL veraltet. Die kurze Version ist, dass sie wirklich ineffizient und hart für einen Fahrer sind, um schnell fertig zu werden. GlVertexPointer ist die zu verwendende Sache, die in einem C-Array von Zahlen übergeben wird.

+0

Arbeitete perfekt. Vielen Dank! – Jumhyn