JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Licht in 2D ?
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 19:16    Titel: Antworten mit Zitat

Ich weiß nicht, ob du was mit OpenGL Code anfangen kannst. Hier :

Code:

class cLightLayer: public cLayer
{
private:
   std::list<cStaticLight*> m_statics;
   std::list<cDynamicLight*> m_dynamics;
   cDynamicImage* m_image;
   
public:
   cLightLayer()
   {
      m_image = new cDynamicImage( );
   }
   virtual ~cLightLayer(){};
   void Initialize()
   {
      //Erzeuge eine Textur 512x512 mit 4Bytes Farbtiefe (RGBA)
      m_image->Load( "512 512 4" );
   }
   // Wird aufgerufen, bevor die Szene gerendert wird
   void PreRender()
   {
      // Sichere den vorherigen Blend Mode
      graphics::SaveBlendMode();      

      //Render die Texturen aller dynamischen Lichter
      std::list<cDynamicLight*>::iterator diter;
      for( diter=m_dynamics.begin(); diter!=m_dynamics.end(); ++diter )
      {
         // PreRender rendert die Textur für das jeweilige licht.
         (*diter)->PreRender();
      }

      //Setze Blend Mode auf Additive Color glBlendFunc( GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR );
      graphics::SetBlendMode( graphics::AdditiveColor );

      //Starte das Rendern in die textur
      m_image->BeginRender();
      // Fülle die Textur mit dem Ambient Light
      graphics::SetClearColor( ambient );
      graphics::ClearBuffer();
      
      // Gehe dich alle dynamischen und statischen lichter und lasse diese Rendern
      std::list<cStaticLight*>::iterator siter;
      for( siter=m_statics.begin(); siter!=m_statics.end(); ++siter )
      {
         (*siter)->Render();
      }
      for( diter=m_dynamics.begin(); diter!=m_dynamics.end(); ++diter )
      {
         (*diter)->Render();
      }

      //Speicher die textur
      m_image->EndRender();

      // Setze alle werte zurück
      graphics::RestoreBlendMode();
      graphics::SetClearColor( cColor( 0, 0, 0 ) );
      graphics::ClearBuffer();
   }
   // wird aufgerufen, nachdem der beleuchtete Teil der Szene gerendert wurde
   void Render()
   {
      graphics::SaveBlendMode();
      // Setze Blend mode auf Multiply Color glBlendFunc( GL_DST_COLOR, GL_ZERO );
      graphics::SetBlendMode( graphics::MultiplyColor );
      
      // Zeichne die gespeicherte Textur über den ganzen Bildschirm
      m_image->DrawPosWH( 0, 0, 1280, 960 );
      
      graphics::RestoreBlendMode();
   }


Ich hoffe du kannst etwas damit anfangen. Viel OpenGL ist ja nicht drin, weil der meiste code gewrapped ist.
Viel mehr code kann ich dir nicht anbieten, weil das glaube ich den Rahmen hier ein wenig sprengen würde. Da ich das ganze in eine art Layer System eingebaut habe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 19:55    Titel: Antworten mit Zitat

Also, wenn ich das richtig verstanden habe:

- m_image ist eine textur, wo die lightmaps draufgerendert werden
(warum ist die 512x512 groß, wenn doch die auflösung 1280x960 is, wie man am ende sieht?)
- bei (*sinter)->render() werden die lightmaps mit additive (was vorher eingestellt wurde) auf diese textur gerendert
- und am schluss die ganze textur auf den bildschirm mit multiply
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 15.02.2004, 20:06    Titel: Antworten mit Zitat

Die Auflösung ist so gewählt weil die Texturen nicht eine so ungewöhnliche Grösse gemacht werden sollten (2^n)
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 20:28    Titel: Antworten mit Zitat

Fallen Angel hat recht. Außerdem kann man der armen grafikkarte auch nicht so viele hochauflösende texturen zumuten.
vor allem nicht, wenn man die vorher noch rendert. außerdem sieht man sowieso im endeffekt keinen unterschied ob 512x512 oder 1024x1024.
man kann sogar auf 256x256 runter gehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 20:41    Titel: Antworten mit Zitat

also wird diese textur dann auf die bildschirmgröße skaliert... an welche positionen werden denn dann die lichter gerendert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 20:51    Titel: Antworten mit Zitat

das ist in opengl recht praktisch:
Die Projektionsmatrix bleibt gleich.
nur der viewport, also die ausgabegröße verändert sich.
Das heißt, ich brauche gar nicht die koordinaten ändern.
Wenn ich die textur danach wieder auf den ganzen bildschirm skaliere, dann ist alles wieder am rechten platz Wink

Ich habe egal bei welcher auflösung immer ein konstantes koordinatensystem von 1280x960.
das bild wird dann nur bei geringer auflösung etwas verschwommener, aber sonst ist alles gleich groß.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 15.02.2004, 20:52    Titel: Antworten mit Zitat

Die Texturen werden dann dahin gesetzt wo sie auch hinkommen sollten eben vieleicht nur etwas in blockform also gröber. Wenn man auf diese Grösse rendert dann werden dann alle Renderoutputpositionen angepasst.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 16.02.2004, 11:52    Titel: Antworten mit Zitat

Noch ne frage: wie stell ich denn Additive oder Multiply rendern für D3DXSPRITE bei d3d9 ein?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 14:26    Titel: Antworten mit Zitat

Weiß das denn keiner?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.02.2004, 14:58    Titel: Antworten mit Zitat

Mit SetRenderState
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 17:07    Titel: Antworten mit Zitat

danke .. Wink
und die Parameter? ich hab mal in der MSDN geguckt, aba net ganz verstanden, von wegen (1, 1, 1, 1) oder (1-A, 1-A, 1-A, 1-A) oder so
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.02.2004, 17:17    Titel: Antworten mit Zitat

1 ist der maximale Farbwert zum Beispiel 255
aus (1,1,1,1) würde RGBA->(255,255,255,255)
also das maximale*den Wert

1-A würde bedeuten das vom Farbwert der Alphawert abgezogen wird.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 20:31    Titel: Antworten mit Zitat

Jaaaa, aber wie bekomm ich denn z.B. Additive oder Multiply?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 18.02.2004, 12:47    Titel: Antworten mit Zitat

Da kann ich dir leider auch nicht helfen :/. Vielleicht weiß das Google Orakel etwas Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum