Hallo alle.
Ich arbeite gerade an einer Gravitationssimulation mit n Körpern im Raum. In meinem Beispielprojekt gibt es derzeit 3 Körper. Ohne Einfluss auf die Berechnungen kann ich in meinem Fenster einstellen, ob ich eine normale Darstellung der Kugeln wünsche (dann nutze ich gluSphere) oder eine Darstellung als "Metaballs" (dann nutze ich Vertex-, Normal- und Colorarrays). Dazu habe ich den "Marching Cubes Algorithmus" implementiert. Klappt auch alles soweit super, ich habe allerdings ein Problem mit den Lichtverhältnissen. Und zwar verstehe ich trotz langem Suchen und Überlegen nicht, warum die beiden Darstellungen unterschiedliche Lichtverhältnisse zeigen, obwohl die Generierung des Lichts beide Male identisch ist. Zunächst dachte ich an Fehler in der Berechnung meiner Normalen während der Darstellung im Metaball-Mode, aber ich habe sie mir anzeigen lassen und die Berechnung stimmt.
Ich habe ein allgemeines Lichtmodell angeschaltet:
Zusätzlich ein Licht 0 aktiviert:
Arbeite mit Color Material und setze die Farbe dann mit glColor4v:
Zunächst wird der Beobachter gesetzt:
Alles anzeigen
So stelle ich grundsätzlich die Metaballs dar:
Alles anzeigen
Und so alternativ die gluSpheres:
Ich habe mich jetzt auf die aus meiner Sicht relevanten Befehle beschränkt zu Gunsten der Übersichtlichkeit. Es st ein altes Projekt und ich weiß, dass manches vielleicht "depraced" ist. Daher würden mich natürlich vornehmlich Ideen zu den unterschiedlichen Lichtverhältnissen interessieren, weniger allgemeine Verbesserungsvorschläge, außer wenn es damit zusammenhängt. Auch wenn manchem Profi wahrscheinlich die Haare zu Berge stehen wegen des alten Codes.
Ich hänge nochmal zwei Bilder an, um zu zeigen, wo mein Problem mit dem Licht liegt. Erklären kann ich es mir nicht.
Über alle Ideen bin ich sehr dankbar.
Liebe Grüße.
Ich arbeite gerade an einer Gravitationssimulation mit n Körpern im Raum. In meinem Beispielprojekt gibt es derzeit 3 Körper. Ohne Einfluss auf die Berechnungen kann ich in meinem Fenster einstellen, ob ich eine normale Darstellung der Kugeln wünsche (dann nutze ich gluSphere) oder eine Darstellung als "Metaballs" (dann nutze ich Vertex-, Normal- und Colorarrays). Dazu habe ich den "Marching Cubes Algorithmus" implementiert. Klappt auch alles soweit super, ich habe allerdings ein Problem mit den Lichtverhältnissen. Und zwar verstehe ich trotz langem Suchen und Überlegen nicht, warum die beiden Darstellungen unterschiedliche Lichtverhältnisse zeigen, obwohl die Generierung des Lichts beide Male identisch ist. Zunächst dachte ich an Fehler in der Berechnung meiner Normalen während der Darstellung im Metaball-Mode, aber ich habe sie mir anzeigen lassen und die Berechnung stimmt.
Ich habe ein allgemeines Lichtmodell angeschaltet:
Zusätzlich ein Licht 0 aktiviert:
Arbeite mit Color Material und setze die Farbe dann mit glColor4v:
Zunächst wird der Beobachter gesetzt:
Quellcode
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
- gluLookAt([[[observer spacePoint] position] x], [[[observer spacePoint] position] y],
- [[[observer spacePoint] position] z],
- [[observer lookAt] x],
- [[observer lookAt] y],
- [[observer lookAt] z],
- [[[observer spacePoint] up] x],
- [[[observer spacePoint] up] y],
- [[[observer spacePoint] up] z]);
So stelle ich grundsätzlich die Metaballs dar:
Quellcode
- glEnableClientState(GL_COLOR_ARRAY);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glPushMatrix();
- glVertexPointer(3, GL_DOUBLE, sizeof(vertex), &([[[observer owner] mc] vertices][0].pos[0]));
- glNormalPointer(GL_DOUBLE, sizeof(vertex), &([[[observer owner] mc] vertices][0].norm[0]));
- glColorPointer(3, GL_FLOAT, sizeof(vertex), &([[[observer owner] mc] vertices][0].color[0]));
- glDrawArrays(GL_TRIANGLES, 0, [[[observer owner] mc] verticesCount]);
- glPopMatrix();
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
Und so alternativ die gluSpheres:
Ich habe mich jetzt auf die aus meiner Sicht relevanten Befehle beschränkt zu Gunsten der Übersichtlichkeit. Es st ein altes Projekt und ich weiß, dass manches vielleicht "depraced" ist. Daher würden mich natürlich vornehmlich Ideen zu den unterschiedlichen Lichtverhältnissen interessieren, weniger allgemeine Verbesserungsvorschläge, außer wenn es damit zusammenhängt. Auch wenn manchem Profi wahrscheinlich die Haare zu Berge stehen wegen des alten Codes.
Ich hänge nochmal zwei Bilder an, um zu zeigen, wo mein Problem mit dem Licht liegt. Erklären kann ich es mir nicht.
Über alle Ideen bin ich sehr dankbar.
Liebe Grüße.