|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 08.11.2008, 08:43 Titel: OpenGL Beleuchtung |
|
|
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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 08.11.2008, 11:58 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.11.2008, 13:00 Titel: |
|
|
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
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 |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 08.11.2008, 13:05 Titel: |
|
|
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 |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 10.11.2008, 23:42 Titel: |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.11.2008, 09:10 Titel: |
|
|
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 |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 12.11.2008, 11:25 Titel: |
|
|
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 |
|
|
|
|
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
|