vielleicht hab ich das ganze auch falsch verstanden, aber wär es nicht auch möglich die ganzen Lichttexturen auf einer 2. Texturebene ( glActiveTextureARB(GL_TEXTURE1_ARB)), entsprechend der Verzerrung durch die Objekte, zu rendern und dann am ende einmal mit Blending auf die Scene zu rendern?
wenn ich jetzt mal das projezieren eines Bildes weglasse und nur einen entsprechenden "Lichtschein" (runderkreis), da wo der Lichtkegel auf die Objekte trifft simuliere.. ist das dann irgendwie einfacher lösbar? Vielleicht über irgendeine Schattentechnik? Ich will einfach das sich der Spot des Lichts korrekt auf meine Objekte abbildet.. Projezierte bilder sind jetzt erstmal zweitrangig...
BTW: Ich habe gerade mal nachgeschaut, jede Textur-Unit hat einen eigenen Stack, zumindest in OpenGL ES....aber dann sollte das auch in OpenGL so sein. Du kannst also auch mit der FixedFunktionPipeline bis zu GL_MAX_TEXTURE_UNITS Scheinwerfer auf einmal rendern.
Zitat:
ist das dann irgendwie einfacher lösbar? Vielleicht über irgendeine Schattentechnik?
Das mit der projizierten Textur ist ja eine 2D-Schattentechnik.
Edit: Ähm...du kannst natürlich ein OpenGL Spotlicht nehmen, wenn du nur einen Kreis willst. Da gibt es aber natürlich keinen Schatten, d.h Licht scheint durch Objekte hindurch und beleuchtet auch die Objekte dahinter. Das wäre mit der projizierten Textur auch der Fall, da es eine 2D-Technik ist. Für echte Schatten musst du das mit ShadowMapping verbinden, was bedeutete die Szene aus der Perspektive jeder Lichtquelle einmal zu rendern.
OpenGL Spotlicht wäre ja nicht verkehrt, doch da hab ich doch max nur 8 stück oder?
Ja, aber Szene mehrfach rendern mit additivem Blending geht immer. Ansonsten mit Shadern kannst du quasi beliebig viele Spotlichter implementieren.
Zitat:
lässt sich das nicht irgendwie über Stencil machen?
Naja, Stencil-Shadows, also Volumenschatten. Wäre eine Technik als alternative zu den ShadowMaps. Aber das dürfte bei so vielen Lichtern massiv auf die Füllrate gehen. Daher eher nicht zu empfehlen.
Der Shader kann Direktional- und Punktlicht. Wenn du den Direktional-Kram raus nimmst musst du nur noch aus dem Punkt-Licht ein Spot-Licht machen, sprich den Öffnungswinkel beschränken. Wenn du mehr als 8 Lichtquellen einbauen willst musst du natürlich die benötigten Lichtdaten selbst als Uniform übergeben. (gl_LightSource[], gl_FrontLightProduct usw. sind ja nur Arrays der Größe 8 )
Somit habe ich die Matrizen immer aus der Sicht des Scheinwerfers... Diese übergebe ich dann anschließen in einem Array zusammen mit der zu projezierenden Textur dem o.g. Shader und lasse ihn projezieren..
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.