Kameraposition und Licht(er)
-
Grüße,
ich hab folgendes Problem. Ich habe einen Ikosaeder eine Lichtquelle und eine Kamera(Blickfeld). Die Kamera "schaut" auf den Ikosaeder die Lichtquelle(Diffus) "scheint" von recht nach links auf den Körper.
So wenn ich aber die Kamera(gluLookAt) bewege änderst sich ja die Position meines Ikosaeders(oder jedes andere Objekt) und es sollte so aussehen als ob ich mich im Raum bewege. Nun da aber ja das Licht fix im Raum liegt schaut es so aus als ob sich der Ikosaeder bewegt(Schattenwurf auf dem W20). Mach ich da was falsch? oder gibt es ne möglichkeit das Licht mit einzubeziehen?Und noch was. Welche möglichkeiten hab ich noch auser gluLookAt()? glTranslatef
klar denke mit dieser Funktion ist auch gluLookAt aufgebaut oder? Gibts noch eine Möglichkeit die vielleicht sogar "besser" ist als mit glTranslatef?Danke Euch...
Gortosch.OpenGL = Noob; :p
-
ich hab zwar keine ahnung von glide, aber funktioniert das nicht auch so, dass wenn man die kamera bewegt ALLE objecte "bewegt" werden ? also auch die lichter.
axo es seih den du hast ein directional-light, dann kann es sein das du dann irgendwann die dunkle seite deines objects hast, bzw die schatten dann mehr siehst, ist ja auch logisch
du kannst ja die richtung des lichtes mit der kamera drehenaber das sind gedanken eines dx9 nubs :p
-
DEvent schrieb:
ich hab zwar keine ahnung von glide
GLIDE????
-
...hat echt keiner von den OpenGL Göttern eine Idee?
-
Hä, also ich kapier nicht worauf Du hinauswillst.
Wenn Du die Kamera bewegst (gluLookAt), dann sieht es schon so aus, als ob Du Dich im Raum bewegst. Dazu gehört ja auch, dass sich die Lichtquelle relativ zu Deiner Kameraposition bewegt, genau wie alle anderen Objekte..
-
DEvent schrieb:
ich hab zwar keine ahnung von glide
nunja, ich denke das ist heutzutage nicht ganz so schlimm
-
@durito nein du hast mich da falsch verstanden fix heist das die Lichtquelle sich eben nicht bewegt!!! Und daher schaut es so aus als ob sich NUR der Ikosaeder bewegt!
-
Hm, also wenn Du nur gluLookAt veränderst, dann bewegt sich tatsächlich nur die Kamera. Was wiederum bedeutet, dass sich relativ zur Kamera alle Objekte (inkl. Licht) bewegen, das kann gar nicht anders sein
-
Hier ist mein kleiner Quällcode
int DrawGLScene(GLvoid) { int b; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0.0f+Winkely, 0.0f, 10.0f+Winkelx, 0.0f+Winkely, 0.0f, 0.0f+Winkelx, 0, 1, 0); glRotatef(Winkelz,0.0f,0.0f,1.0f); for(b = 0; b < 5; b++) { glBindTexture(GL_TEXTURE_2D, texture[b]); glBegin(GL_TRIANGLES); glNormal3f( Normalen[b].x, Normalen[b].y, Normalen[b].z); glTexCoord2f(0.5f, 1.0f); glVertex3f(Wuerfel[0][0].x, Wuerfel[0][0].y, Wuerfel[0][0].z); glTexCoord2f(0.0f, 0.0f); glVertex3f(Wuerfel[1][b].x, Wuerfel[1][b].y, Wuerfel[1][b].z); glTexCoord2f(1.0f, 0.0f); glVertex3f(Wuerfel[1][(b+1)%5].x, Wuerfel[1][(b+1)%5].y, Wuerfel[1][(b+1)%5].z); glEnd(); }
Und so schaut es wirklich so aus als ob sich nur der Ikosaeder bewegt. Also die hellen und die dunklen Flächen ändern sich, wie wenn sich der Ikosaeder bewegt und die Lichtquelle fest währe.
de Gortosch
-
Sgt. Nukem schrieb:
DEvent schrieb:
ich hab zwar keine ahnung von glide
GLIDE????
? eben OGL
-
Warum machste das glRotate?
Du willst doch nur die camera bewegen (mit gluLookAt)...
-
@durito: Schonmal geguckt wie gluLookAt intern arbeitet? Ne? Dann mal lieber machen
cya
liquid
-
...also leute ihr meint das glLookAt() alles bewegt und ich einen fehler bzw. einen Knick in der Optik habe... hmmm... oder... naja welche Methoden benutzt ihr um euch im Raum zu bewegen? Ich meine es gibt doch bestimmt noch andere Möglichkeiten...
-
@LiquidAcid: Hm, warum? Natürlich auch mit Matrizenmultiplikationen, aber was hat das mit dem glRotate in gortosch's Quellcode zu tun?
@gortosch: Benutz für sowas gluLookAt, das ist am einfachsten. Könntest das was gluLookAt macht natürlich auch von Hand machen, aber warum auch..
Aber eben, warum hast Du da noch ein glRotate drin?
-
früher konnte man den Ikosaeder um die x y und z achse drehen... is nur für die Drehung des Ikosaeders... mit glLookAt() hat es nix zu tun...