gibt es ein paar Möglichkeiten, dies von der Technik ohne Abweichen zu beseitigen Sie verwenden (Legacy-Pipeline) ..
Der folgende Code wird zwei Dreiecke zeichnen .. so:
Jedes Dreieck mit 1 Zeichenaufruf pro Dreieck wiedergegeben wird:
void onDisplayRefreshSO(void* ctx)
{
//Setup OpenGL once..
static std::once_flag flag;
std::call_once(flag, []{
GLfloat view_port[4] = {0};
glGetFloatv(GL_VIEWPORT, &view_port[0]);
GLfloat screen_width = view_port[2] - view_port[0];
GLfloat screen_height = view_port[3] - view_port[1];
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, screen_width/screen_height, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
});
/** Setup Drawing Triangles **/
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
GLfloat normals[] = {
0, 0, 1, 0, 0, 1, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0, 0, 1
};
GLfloat colors[] = {
1, 1, 1, 1, 1, 0, 1, 0, 0,
0, 1, 1, 0, 1, 0, 0, 0, 1
};
GLfloat vertices[] = {
1, 1, 1, -1, 1, 1, -1,-1, 1,
1, 1, 1, 1, -1, 1, -1,-1, 1
};
//9 floats per triangle.. 3 * (X, Y, Z)..
for (int i = 0; i < sizeof(vertices)/sizeof(vertices[0])/9; ++i)
{
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 0, normals + (i * 9));
glColorPointer(3, GL_FLOAT, 0, colors + (i * 9));
glVertexPointer(3, GL_FLOAT, 0, vertices + (i * 9));
glPushMatrix();
glTranslatef(-1.0f, 0.0f, -6.0f);
glDrawArrays(GL_TRIANGLES, 0, 3); //3 vertices (X, Y, Z) per triangle..
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
}
}
alle in einem einzigen Zeichenaufruf gemacht Dreiecke:
void onDisplayRefreshSO2(void* ctx)
{
//Setup OpenGL once..
static std::once_flag flag;
std::call_once(flag, []{
GLfloat view_port[4] = {0};
glGetFloatv(GL_VIEWPORT, &view_port[0]);
GLfloat screen_width = view_port[2] - view_port[0];
GLfloat screen_height = view_port[3] - view_port[1];
glMatrixMode(GL_PROJECTION);
gluPerspective(45.0, screen_width/screen_height, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
});
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
/** Setup Drawing Triangles **/
GLfloat normals[] = {
0, 0, 1, 0, 0, 1, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0, 0, 1
};
GLfloat colors[] = {
1, 1, 1, 1, 1, 0, 1, 0, 0,
0, 1, 1, 0, 1, 0, 0, 0, 1
};
GLfloat vertices[] = {
1, 1, 1, -1, 1, 1, -1,-1, 1,
1, 1, 1, 1, -1, 1, -1,-1, 1
};
//Draw both triangles in a single call..
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glNormalPointer(GL_FLOAT, 0, normals);
glColorPointer(3, GL_FLOAT, 0, colors);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glPushMatrix();
glTranslatef(-1.0f, 0.0f, -6.0f);
glDrawArrays(GL_TRIANGLES, 0, (sizeof(vertices)/sizeof(vertices[0]))/3); //6 vertices (X, Y, Z) for 2 triangles..
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
}
@Brandon Möchten Sie eine Antwort bilden ? Sieht so aus, als hättest du eine Ahnung, wie es geht. –
Ich bin mir nicht sicher, was Sie versuchen zu tun. Ich schätze, du willst drei Linien für jedes Dreieck rendern? Von Knoten 0 zu 1, 1 zu 2 und 2 zu 0? Zur Zeit übergeben Sie den Zeiger an einen Eckpunkt und teilen OpenGL mit, dass er 3 Eckpunkte daraus lesen soll. Für die letzten beiden Iterationen lesen Sie zumindest außerhalb Ihres Gedächtnisses. – BDL
@ BDL. Ich möchte mehrere unabhängige Dreiecke darstellen. Und drei Ecken bilden eins. –