performance-openGL
-
Hallochen!
u. a. Folgende Funktion zeichnet das Gradnetz der Erde:void Earth::GrosskreiseZeichnenR(void)
{
double x, y, z;for ( int i = 0; i < 360; i ++)
{
if ((i % 10) == 0)
glColor3f(0.0f,1.0f,1.0f);
else
glColor3f(0.0f,0.5f,0.5f);
glBegin(GL_LINE_STRIP);
for (int k = 0; k < 180; k++)
{x = VectorGrosskreis[i][k][0];
y = VectorGrosskreis[i][k][1];
z = VectorGrosskreis[i][k][2];glVertex3f( x , y, z );
}
glEnd();
}
}Die Koordinaten wurden bei Programmstart berrechnet,
der Aufruf erfolgt 1x pro Frame.
Wie kann ich nun die Performance steigern? Z.b. indem die Kordinaten
im Video-Ram abgelegt werden? Wie ginge das? Oder eine andere Möglichkeit?
Dnke fürs reinschaun!
-
Original erstellt von Tommileinspilot:
**
Wie kann ich nun die Performance steigern? Z.b. indem die Kordinaten
im Video-Ram abgelegt werden?**Das wäre eine vernünftige Idee.
-
Ja und wie geht das denn nun mit OpenGL?
-
Original erstellt von Tommileinspilot:
Ja und wie geht das denn nun mit OpenGL?Keine Ahnung, benutze ich nicht, sollte doch aber in der Doku stehen.
-
Erstmal würde ich nie etwas mit Immediate Mode rendern.
Berechne die Vertices und render sie als Vertex Array.
Das sollte schon einen ordentlichen Performanceboost geben.
Wenn das aber noch nicht reicht, kannst du die compiled_vertex_array-Extension benutzt. Im Net sollten sich eigentlich
Infos dazu finden lassen.
-
Wenn das teil statisch ist, sind nicht Vertex Arrays das richtig, sondern display lists. Weil schneller.
Schau mal bei nehe.gamedev.net .
-
Ok, Display Lists sind in dem Fall wirklich einfacher zu benutzen.
Ich würde das aber mit vorsicht genießen, je nach Treiber verbrauchen die
Dinger absurd viel Speicher.