Cubemapping-Problem - Spiegelbildgröße[erledigt]
Übersicht

![]() |
BlitzcoderNewsposterBetreff: Cubemapping-Problem - Spiegelbildgröße[erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Ich versuche gerade einen anständigen Wassereffekt hinzubekommen. Zum Spiegeln braucht man ja Cubemaps. Klar, ich kann damit umgehen, und habe sie desöfteren schon benutzt, aber immer nur auf Kugeln autos etc. Wenn man allerdings eine Fläche nimmt, ich hab einfach mal einen Cube genommen, funkioniert es nicht richtig. Die Kamera sitzt logischerweise in der mitte. Allerdings, wenn z.B. auf einem spiegelnden Boden ein Tonne steht, müsste die Breite des Spiegelbildes genauso groß sein, wie das Original. So: Bild Allerdings kommt die Größe immer darauf an, wie weit das zu spiegelnde Objekt von der kamera, also von der Mitte des Bodens, weg ist. Gibt es dafür irgendein Möglichkeit, wie man dies verhindern kann? Sicher, bei Kugeln und runden Dingen, ist es sicher das gleiche Problem, aber aufgrund der rundung fällt es nicht auf. Sogar wenn man im Code von Blitzbase.de den spiegelnden teapot durch etwas flaches ersetzt, ist es falsch. MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
- Zuletzt bearbeitet von Blitzcoder am Fr, Aug 18, 2006 17:07, insgesamt einmal bearbeitet
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, wenn du ne ebene unter dir hast und die spiegeln soll, geht das wie folgt:
du musst die cubemap von der an der fläche gespiegelten koordinate der kamera aus rendern. also, der code sollte bei einer wagerechten fläche so aussehen:Code: [AUSKLAPPEN] PositionEntity Cube_cam, EntityX(cam), -EntityY(cam)+2*EntityY(water),EntityZ(cam)
des weiteren ist zu beachten, dass man besser alles hiden sollte, was unterhalb der wasserfläche ist, da es sonst zu doofen darstellungsfehlern kommt. |
||
MrKeks.net |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich die Zeile im Code ändere, hab ich immer noch das Problem.
Ich hab gerade mal das Blitzbase bsp ein bisschen umgebaut, sodass ich keine Models brauche, und meinen unübersichtlichen Code nicht zerfleddern muss; Hier: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
AppTitle "Cubemapping" Global cam=createcamera() PositionEntity cam,0,3,-15 Global cube_cam=createcamera() HideEntity cube_cam Global cube = CreateSphere(100) ScaleEntity cube,10,0.2,10 Global tex_size=512 Global tex=createtexture(tex_size,tex_size,1+128+256) SetCubeMode tex,3 EntityTexture cube,tex sp=createsphere() ScaleEntity sp,1,5,1 PositionEntity sp,0,3,7 sky=createsphere() ScaleEntity sky,300,300,300 FlipMesh(sky) EntityColor sky,255,0,255 SetBuffer BackBuffer() While Not KeyDown(1) If KeyDown(203) Then MoveEntity sp,0.3,0,0 If KeyDown(205) Then MoveEntity sp,-0.3,0,0 If KeyDown(208) Then MoveEntity sp,0,0,0.3 If KeyDown(200) Then MoveEntity sp,0,0,-0.3 cubemap() UpdateWorld() RenderWorld() Flip Wend End Function cubemap() Pitch=entitypitch(cam) yaw=entityyaw(cam) roll=entityroll(cam) PointEntity cam,cube PositionEntity cube_cam,EntityX(cube),EntityY(cam)+2*EntityY(cube),EntityZ(cube) hideentity cube HideEntity cam ShowEntity cube_cam CAMERACLSMODE cube_cam,FALSE,TRUE CameraViewport cube_cam,0,0,tex_size,tex_size SETCUBEFACE tex,0 ROTATEENTITY cube_cam,0,90,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) SETCUBEFACE tex,1 ROTATEENTITY cube_cam,0,0,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) SETCUBEFACE tex,2 ROTATEENTITY cube_cam,0,-90,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) SETCUBEFACE tex,3 ROTATEENTITY cube_cam,0,180,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) SETCUBEFACE tex,4 ROTATEENTITY cube_cam,-90,0,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) SETCUBEFACE tex,5 ROTATEENTITY cube_cam,90,0,0 RENDERWORLD COPYRECT 0,0,tex_size,tex_size,0,0,BACKBUFFER(),TEXTUREBUFFER(tex) showentity cube HideEntity cube_cam ShowEntity cam RotateEntity cam,Pitch,yaw,roll End Function Pfeiltasten bewegt die "Kugel". Die Spiegelung ist einfach zu groß. Der Rest wird aber gespiegelt(Himmel). Die himmeltextur habe ich jetzt aber durch ein schickes rosa ersetzt ![]() MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, erstens hast du meine zeile falsch umgesetzt. die muss in diesem konkreten beispiel so aussehen:
Code: [AUSKLAPPEN] PositionEntity cube_cam,EntityX(cam,1),-EntityY(cam,1)+2*EntityY(cube,1),EntityZ(cam,1)
2. musst du bei setcubemode natürlich modus 1 setzen, wenn du spiegelung willst. (3 = brechung..) soha, also, bei mir funktionierte es supi, nachdem ich den code so verbesser hatte. |
||
MrKeks.net |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
OK. Ich hatte mich vertan, und die ganze Zeit die Koordinaten des Cubes genommenn und nicht die der Cam. Deswegen ist mir die Änderung auch bist auf den Y Wert nicht aufgefallen ![]() Vielen Dank, funktioniert wirklich super. MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group