Frage

Ich habe diese Frage in dem Sinne: Ich brauche eine Szene zu machen, das aussieht wie ein echter Himmel. Meine erste Idee war, einen Würfel zu machen und texturize es. Es war nicht so gut aus. Ich kam der Verwendung einer Kugel auf die Idee. Aber ich konnte es nicht Licht von innen. Ich habe die Kamera auf den Ursprung gesetzt beobachten (0,0, -100). Ambient und spiegelnde Lichtquelle auch am Ursprung. Kann nicht sehen, beleuchtet jede Sache! Was sind die Möglichkeiten, einen Himmel zu machen, und wie kann ich das Innere einer Kugel Licht?

War es hilfreich?

Lösung

Versuchen Sie, die Keulung-Modus zu ändern, da Sie auf der Innenseite der Kugel sind.

Ich bin ein XNA Typ, aber es scheint, dass dies wäre der

Andere Tipps

Versuchen Sie Flipping die Normalen der Kugel (mehr Suchergebnisse hier ). Im allgemeinen Rendering-Engines verwenden Algorithmen, um festzustellen, was unmöglich und so gesehen werden konnte nicht wiedergegeben werden; Eine solche Technik ist Backface-Culling. Ich vermute, dass die Kugel in die erstellt wird typische Art und Weise, wo die Normalen projiziert die Kugel heraus, vom Zentrum entfernt; Sie benötigen, um Ihre Normalen die entgegengesetzte Richtung gegenüber.

Wenn es von außen beleuchtet wird, aber dunkel von innen, dann ist es wahrscheinlich, dass die Normalen der Kugel in der falschen Richtung weisen.

Unter der Annahme, dass Sie tun phong / gouraud Beleuchtung, der Kosinus zwischen der normalen und der Blickrichtung wird irgendwo berechnet werden. Der Kosinus wird negativ und Ihre Grafikkarte auf Null, die Ergebnisse in der schwarzen Farbe festklemmen.

Also, wenn Ihr Normalen explizit angegeben werden, sollten Sie ihre Richtung versuchen Umkehren -> mehrfach mit -1. Wenn Sie nur Ecken und Flächen haben, möchten Sie vielleicht die Eckpunktreihenfolgeninformationen in den Gesichtern ändern. Schalten Sie einfach zwei Indizes. (1-2-3) -> (1-3-2). Dadurch ändert sich die Reihenfolge von den Uhrzeigersinn gegen den Uhrzeigersinn (oder umgekehrt). Ihre Ergebnisse zu testen, können Sie Backface-Culling-Schalter ein- und ausschalten und sehen, was passiert.

Problem gelöst. Dank aber Normalen sind nicht die Antwort. Ich benutze glutSolidSphere so Normalen sind nicht falsch. versuchen glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE) verwendet wird; das sollte für mich die Arbeit machen.

Wenn ich einen Himmel Kuppel, Sky-Box, oder Himmel Ebene machen, kann ich nicht wirklich Licht es. Ich habe nur eine Textur auf sie und machen es.

glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
Render sky dome
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);

Jedoch ist das Problem dabei ist, dass Zustandsänderung kann teuer werden. So eine Möglichkeit, die GL_CULL_FACE Zustandsänderung zu beseitigen ist, um sicherzustellen, dass Ihre Normalen sind, den richtigen Weg zeigen. Wenn CULL_FACE auf CCW gesetzt ist (gegen den Uhrzeigersinn), dann sollten die Normalen zu Ihnen zeigen. Wenn jedoch CULL_FACE auf CW (im Uhrzeigersinn) gesetzt ist, dann sollten die Normalen von euch weg zeigt. Der einzige Weg, ich sehe die GL_LIGHTING Zustandsänderung zu beseitigen ist Shadern zu verwenden und Ihr eigenes Beleuchtungsschema definieren. Aber ich weiß nicht, ob das mehr oder weniger teuer ist.

Der Himmel Box Ausgabe ist eine ähnliche Geschichte, aber es andere Probleme hat. Sie können in Verzerrung Probleme stoßen, wenn Ihre Sicht nicht in der Mitte ist. Was ich in der Regel tun, ist die Sky-Box machen erste, auf der Kamera zentriert, dann den Tiefenpuffer löschen und alles andere machen. Auf diese Weise Ihre Sky-Box muss nicht lächerlich groß sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top