Cubemapping-Problem - Spiegelbildgröße[erledigt]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Blitzcoder

Newsposter

Betreff: Cubemapping-Problem - Spiegelbildgröße[erledigt]

BeitragFr, Aug 18, 2006 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 18, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Blitzcoder

Newsposter

BeitragFr, Aug 18, 2006 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragFr, Aug 18, 2006 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Blitzcoder

Newsposter

BeitragFr, Aug 18, 2006 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing


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
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group