JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=fb561bda68fc3808743e0bab531c353cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

OpenGL Beleuchtung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2008, 08:43    Titel: OpenGL Beleuchtung Antworten mit Zitat

Hi
mein Problem ist, wenn ich reinzoome wird die Welt dunkler.
CPP:
void Game::Render()
{
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   float Position[4]={0, 2, 10.f, 1.f};
   float Ambient[4]={0.5, 0.5, 0.5, 1.f};
   float Diffuse[4]={1.f, 1.f, 1.f, 1.f};
   glLightfv(GL_LIGHT0, GL_AMBIENT , Ambient);
   glLightfv(GL_LIGHT0, GL_DIFFUSE, Diffuse);
   glMaterialf(GL_FRONT, GL_SHININESS, 1.f);



   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(-8, 8, -6, 6, -100, 100);
   //gluPerspective(90, 4.0f/3.0f, 0.1, 100);


   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glRotatef(m_CameraAngel.x, 1, 0, 0);//48,5=4:3, 30=2:1 //ansich kippen
   glRotatef(m_CameraAngel.z, 0, 0, 1); //45 grad drehen
   glTranslatef(-m_ScrollPos.x, -m_ScrollPos.y, 0);

   glLightfv(GL_LIGHT0, GL_POSITION, Position);

   glScalef(m_CameraZoom, m_CameraZoom, m_CameraZoom); //etwas herauszoomen




   m_SceneManager.Render();
   //m_TestModel.Render();
   m_SceneManager.RenderDebugInfos();

   glDisable(GL_LIGHTING);

   m_Cursor.Render(m_CursorPos);
}

In der Doku steht was von, dass das Licht beim setzen mit der aktuellen Weltmatrix multipliziert wird. Ich habe jetzt schon glLightfv(POSITION) quasi an jeder Stelle getestet, aber das Ergebnis ist immer gleich. Sobald ich reinzoome, also m_CameraZoom verändere wird die Szene dunkler bzw. heller.
Irgendwelche Ideen?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 08.11.2008, 11:58    Titel: Antworten mit Zitat

Hab noch nie mit OGL gearbeitet, aber bei D3D gibt es einen render state, der, wenn er aktiviert ist dafür sorgt, dass die Normalenvektoren nach der Transformation in den Raum in dem das Licht berechnet wird (bei D3D view space) nochmal normiert werden. Ist der nicht an beeinflusst die Skalierung, die in der Transformation steckt die Lichtintensität. Würde dir raten bei OGL mal nach was ähnlichem zu suchen.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 08.11.2008, 13:00    Titel: Antworten mit Zitat

Ja, ich glaube auch das es daran liegt, ich hab mal ein bisschen rumgetestet und erst sah es sehr gut aus, nur jetzt stürzt mal wieder alles ab und ich weiß nicht wieso Very Happy

Das zusätzliche normalisieren ist ja ein wenig aufwändig, aber man muss das immer machen, wenn eine Skalation im Spiel ist, oder? Was ja theoretisch relativ oft vorkommen kann.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 08.11.2008, 13:05    Titel: Antworten mit Zitat

Du kannst die GL auch dazu anhalten selbstständig zu normalisieren, einfach GL_NORMALIZE setzen. Was für dich günstiger ist, musst du entscheiden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 10.11.2008, 23:42    Titel: Antworten mit Zitat

Hi,
da du ja nur uniforum-scaling benutzt kannst du auch glEnable(GL_RESCALE_NORMAL); benutzen. Dabei extrahiert OpenGL einen Skalierungsfaktor aus der Modelviewmatrix und skaliert die Normalvektor lediglich, was natürlich günstiger gegenüber GL_NORMALIZE sein sollte.
Um den Normalisierungsprozess kommt man soweit ich weiß auch nicht wirklich umzu, eine Möglichkeit wäre es natürlich eine weitere Modelviewmatrix ohne Skalierung zu speichern. Dass das aber bei einem komplexen Programm auch eine Menge Programmier-, Rechen-und Speicheraufwand kostet, sollte klar sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.11.2008, 09:10    Titel: Antworten mit Zitat

Klingt gut. Also so lange ich alle Achsen immer gleich stark Strecke, reicht das aus und alle anderen Transformationen kann ich ganz normal weiter benutzen?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 12.11.2008, 11:25    Titel: Antworten mit Zitat

Was meinst du mit "andere Transformationen"? Wenn du Shearing verwendest müsstest du wohl auch wieder GL_NORMALIZE benutzen.
Funktioniert es denn jetzt eigentlich wie gewünscht?
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 -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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