2009-05-05 24 views
2

Ich versuche zu lernen, OpenGL-Apps für das iPhone zu schreiben. Wie kann ich den folgenden Code portieren, um mit OpenGL-ES zu arbeiten? Ich weiß, dass ich die Scheitelpunkte in einem Array speichern und dann glDrawArrays() aufrufen muss, aber gibt es dafür einen optimalen Weg? Mein Gedanke ist, ein sehr großes Array zu erstellen und einfach einen Zähler zu halten, wie viele Felder gefüllt sind. Das da ein besserer Ansatz? Was ist mit der Verwendung eines NSArray und der anschließenden Konvertierung in ein c-Array?OpenGL zu OpenGL-ES - glBegin();

glBegin(GL_LINE_STRIP); 

z = -50.0f; 
for(angle = 0.0f; angle <= (2.0f*3.1415f)*3.0f; angle += 0.1f) 
    { 
    x = 50.0f*sin(angle); 
    y = 50.0f*cos(angle); 

    // Specify the point and move the Z value up a little 
    glVertex3f(x, y, z); 
    z += 0.5f; 
    } 

// Done drawing points 
glEnd(); 

Antwort

1

Wenn Sie genügend Speicherplatz haben und die maximale Größe des Arrays kennen, ist es am einfachsten, ein großes statisch zugewiesenes Array zu verwenden und nur die aktuelle logische Größe zu verfolgen.

Wenn Speicher knapp ist, aber Prozessorressourcen reichlich vorhanden sind, packen Sie das Array im laufenden Betrieb und registrieren Sie die Arrays und rufen Sie glDrawArrays() auf.

Der hybride Ansatz wäre die Verwendung eines dynamisch zugewiesenen Arrays, das (falls erforderlich) aktualisiert werden kann. Sie können dies manuell tun, indem Sie ein dynamisches Array neu zuweisen, wenn es sich voll wird, oder indem Sie ein NSMutableArray einer bestimmten Art verwenden. (N. B. NSArray ist für statische Arrays; NSMutableArrays (Unterklasse) dynamisch sind See here..)

Hope this half :)

1

Klingt wie der klassische Geschwindigkeit/Speicher-Kompromiss aus. Wenn der Speicher sehr knapp ist, versuchen Sie, eine dynamische Datenstruktur zu verwenden. Wenn Sie eine vernünftige Grenze für die Größe des Arrays haben, und aus dieser Gleichung wissen Sie genau, wie viele Verts Sie brauchen, dann verwenden Sie einfach eine einfache alte statische Array mit einem Zähler wie Sie vorgeschlagen.

Sieht so aus, als ob Sie die Arrays kennen und Arrays zeichnen, also werde ich nicht darauf eingehen.

Viel Glück!