Cubemap - Spiegelung ist falsch
Übersicht

barratatorBetreff: Cubemap - Spiegelung ist falsch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe ein kleines Problem mit den Cubemaps. Objekte tauchen mal auf einer Cube-Seite auf und verschwinden wieder, aber...es ist schwer zu erklären... Aber seht selbst: Code: [AUSKLAPPEN] Graphics3D 800,600,0,2 SetBuffer BackBuffer() cube_cam=CreateCamera() cube_tex=CreateTexture(256,256,1+128+256) cam = CreateCamera():MoveEntity cam,0,2,0 lig = CreateLight() mesh = CreateMesh() surf = CreateSurface(mesh) EntityTexture mesh,cube_tex Dim vertex(21,21) ;Erstellt ein paar Umgebungsobjekte For i = 1 To 100 c=CreateCube():ScaleEntity c,.1,.1,.1 PositionEntity c,Rnd(-10,10),Rnd(-10,10),Rnd(-10,10):EntityColor c,Rand(0,255),Rand(0,255),Rand(0,255) c=CreateSphere():ScaleEntity c,.1,.1,.1 PositionEntity c,Rnd(-10,10),Rnd(-10,10),Rnd(-10,10):EntityColor c,Rand(0,255),Rand(0,255),Rand(0,255) Next CameraClsColor cam,60,120,200 Repeat ;Steuerung mouse_x# = mouse_x#+MouseXSpeed() mouse_y# = mouse_y#+MouseYSpeed() RotateEntity cam,mouse_y#/4,mouse_x#/-4,0 MoveMouse 400,300 If KeyDown(17) Then MoveEntity cam,0,0,.1 If KeyDown(31) Then MoveEntity cam,0,0,-.1 If KeyDown(30) Then MoveEntity cam,-.03,0,0 If KeyDown(32) Then MoveEntity cam,.03,0,0 ; Water ClearSurface(surf) For x = 0 To 19 For y = 0 To 19 vertex(x,y) = AddVertex(surf, x-10,0,y-10) Next Next For y = 0 To 19 For x = 0 To 19 AddTriangle(surf,vertex(x,y),vertex(x,y+1),vertex(x+1,y)) AddTriangle(surf,vertex(x,y+1),vertex(x+1,y+1),vertex(x+1,y)) Next Next UpdateNormals(mesh) UpdateCubemap(cube_tex,cube_cam,mesh) ;Rendering RenderWorld Flip Cls Until KeyHit(1) End ; Funktion aus der Hilfe Function UpdateCubemap(tex,camera,entity) tex_sz=TextureWidth(tex) ; Show the camera we have specifically created for updating the cubemap ShowEntity camera ; Hide entity that will have cubemap applied to it. This is so we can get cubemap from its position, without it blocking the view HideEntity entity ; Position camera where the entity is - this is where we will be rendering views from for cubemap PositionEntity camera,EntityX#(entity),EntityY#(entity),EntityZ#(entity) CameraClsMode camera,False,True ; Set the camera's viewport so it is the same size as our texture - so we can fit entire screen contents into texture CameraViewport camera,0,0,tex_sz,tex_sz ; Update cubemap ; do left view SetCubeFace tex,0 RotateEntity camera,0,90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do forward view SetCubeFace tex,1 RotateEntity camera,0,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do right view SetCubeFace tex,2 RotateEntity camera,0,-90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do backward view SetCubeFace tex,3 RotateEntity camera,0,180,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do up view SetCubeFace tex,4 RotateEntity camera,-90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; do down view SetCubeFace tex,5 RotateEntity camera,90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ; Show entity again ShowEntity entity ; Hide the cubemap camera HideEntity camera End Function Die Objekte werden immer nur auf einem Face gespiegelt, wenn man die Kamera bewegt laufen die Objekte aus einem Face wieder raus (wie es ja auch sein sollte), jedoch kommen die auf dem nächstem Face nicht wieder :S Was mache ich falsch? Vielen Dank im vorraus ![]() Gruß Bastian |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn das später wasser sein soll, wovon ich ausgehe habe ich den code ein wenig angepasst und nun geht dieser:)
UpdateCubeMap(cube_tex, cube_cam, cam) das wasser soll ja spielen oder nicht? Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() cube_cam=CreateCamera() cube_tex=CreateTexture(256,256,1+128+256) cam = CreateCamera():MoveEntity cam,0,2,0 lig = CreateLight() mesh = CreateMesh():EntityFX mesh,1 surf = CreateSurface(mesh) EntityTexture mesh,cube_tex PositionEntity mesh,0,-10,0 Dim vertex(21,21) ;Erstellt ein paar Umgebungsobjekte For i = 1 To 100 c=CreateCube():ScaleEntity c,.1,.1,.1 PositionEntity c,Rnd(-10,10),Rnd(-10,10),Rnd(-10,10):EntityColor c,Rand(0,255),Rand(0,255),Rand(0,255) c=CreateSphere():ScaleEntity c,.1,.1,.1 PositionEntity c,Rnd(-10,10),Rnd(-10,10),Rnd(-10,10):EntityColor c,Rand(0,255),Rand(0,255),Rand(0,255) Next CameraClsColor cam,60,120,200 SetCubeMode cube_tex, 1 Repeat ;Steuerung mouse_x# = mouse_x#+MouseXSpeed() mouse_y# = mouse_y#+MouseYSpeed() RotateEntity cam,mouse_y#/4,mouse_x#/-4,0 MoveMouse 400,300 If KeyDown(17) Then MoveEntity cam,0,0,.1 If KeyDown(31) Then MoveEntity cam,0,0,-.1 If KeyDown(30) Then MoveEntity cam,-.03,0,0 If KeyDown(32) Then MoveEntity cam,.03,0,0 ; Water ClearSurface(surf) For x = 0 To 19 For y = 0 To 19 vertex(x,y) = AddVertex(surf, x-10,0,y-10) Next Next For y = 0 To 19 For x = 0 To 19 AddTriangle(surf,vertex(x,y),vertex(x,y+1),vertex(x+1,y)) AddTriangle(surf,vertex(x,y+1),vertex(x+1,y+1),vertex(x+1,y)) Next Next UpdateNormals(mesh) UpdateCubemap(cube_tex,cube_cam,cam) ;Rendering RenderWorld Flip Cls Until KeyHit(1) End ;selbst geschribene funktion, kürzer und unübersichtlich Function UpdateCubemap(tex,camera,entity) SetBuffer BackBuffer() tex_sz=TextureWidth(tex) ShowEntity camera : HideEntity entity PositionEntity camera, EntityX#(entity), EntityY#(entity), EntityZ#(entity) CameraViewport camera,0,0,tex_sz,tex_sz SetCubeFace tex,0 RotateEntity camera,0,90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,1 RotateEntity camera,0,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,2 RotateEntity camera,0,-90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,3 RotateEntity camera,0,180,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,4 RotateEntity camera,-90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,5 RotateEntity camera,90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ShowEntity entity : HideEntity camera End Function ich hatte mich mit dem problem schonmal rumgequält ![]() hatte mir dann ein paar funcs geschrieben. Code: [AUSKLAPPEN] ;Water-----------------------------------------------------------------------
Function WATER() End Function Global UsedWater = 0 Global WTStt = 0, WHeight# = 1 Global WatSiz = 32, WatMshSiz = 64 Dim WaterH#(96, 96, 2) Global WatMsh = CreateMesh() Global WTex = CreateTexture(512, 512, 128+256) Global WTex2= LoadAnimTexture("Gfx/Textures/Water.jpg", 2+256, 128, 128, 0, 25) TextureBlend WTex2, 3 HideEntity WatMsh EntityFX WatMsh, 16 EntityTexture WatMsh, WTex EntityTexture WatMsh, WTex2, WStt, 1 MoveEntity WatMsh, 0, -1000, 0 Engine_InitWater() Global WaterBank Dim NormalPos(0,0,0) Function Engine_InitWater() Dim WaterH#(WatSiz, WatSiz, 2) Dim NormalPos(WatSiz, WatSiz, 3) Local Surf = CreateSurface(WatMsh) MX = -WatSiz/2 MY = -WatSiz/2 OX = WatSiz-1 OZ = WatSiz-1 WaterBank = CreateBank((WatSiz+1) * (WatSiz+1) * 4) For X2 = 0 To OX TX# = X2/OX TX# = TX#*16 For Y2 = 0 To OZ TY# = Y2/OZ TY# = TY#*16 V1 = AddVertex(Surf, X2, WaterH#(X2 Mod WatSiz, Y2 Mod WatSiz, 0)*WHeight, Y2, TX#, TY#) PokeInt WaterBank, (Y2 * WatSiz + X2) * 4, V1 Next Next For X2 = 0 To OX-1 TX# = X2/OX TX# = TX#*16 For Y2 = 0 To OZ-1 TY# = Y2/OZ TY# = TY#*16 V0 = PeekInt(WaterBank, (Y2 * WatSiz + X2) * 4) V1 = PeekInt(WaterBank, (Y2 * WatSiz + (X2+1)) * 4) V2 = PeekInt(WaterBank, ((Y2+1) * WatSiz + X2) * 4) V3 = PeekInt(WaterBank, ((Y2+1) * WatSiz + (X2+1)) * 4) AddTriangle(Surf, V2, V1, V0) AddTriangle(Surf, V1, V2, V3) VertexNormal Surf, V0, X2, 0, Y2 NormalPos(X2, Y2, 0) = X2 NormalPos(X2, Y2, 1) = WaterH#(X2 Mod WatSiz, Y2 Mod WatSiz, 0) NormalPos(X2, Y2, 2) = Y2 Next Next UpdateNormals WatMsh ScaleEntity WatMsh, Float(WatMshSiz)/WatSiz, 1, Float(WatMshSiz)/WatSiz End Function Function Engine_CreateWater(WSizeX, WSizeZ, H#) Obj.Obj = New Obj Obj\Msh = CreatePivot() Obj\Typ = Wtr PositionEntity Obj\Msh, 0, H#, 0 For X = 0 To WSizeX-1 For Y = 0 To WSizeZ-1 TEMP = CopyEntity(WatMsh, Obj\Msh) PositionEntity TEMP, X*WatMshSiz, 0, Y*WatMshSiz EntityFX TEMP, 1+16 EntityType TEMP, 3 Next Next UsedWater = 1 Return Obj\Msh End Function Function Engine_UpdateWater() Local Surf = GetSurface(WatMsh, 1) ClearSurface Surf OX = WatSiz-1 OZ = WatSiz-1 Vertices = CreateBank() ;For X = 0 To W-1:For Y = 0 To H-1 ; V1 = AddVertex(Surf, X2, WaterH#(X2 Mod WatSiz, Y2 Mod WatSiz, 0), Y2, TX#, TY#) ; PokeInt Vertices, (Y2 *WatSiz +X2) *4, V1 ;Next:Next For X2 = 0 To OX TX# = X2/OX TX# = TX#*16 For Y2 = 0 To OZ TY# = Y2/OZ TY# = TY#*16 V0 = AddVertex(Surf, X2 , WaterH#(X2 Mod WatSiz , Y2 Mod WatSiz , 0)*WHeight, Y2 , TX#, TY#) V1 = AddVertex(Surf, X2 , WaterH#(X2 Mod WatSiz , (Y2+1) Mod WatSiz , 0)*WHeight, Y2+1, TX#, TY#) V2 = AddVertex(Surf, X2+1, WaterH#((X2+1) Mod WatSiz , Y2 Mod WatSiz , 0)*WHeight, Y2 , TX#, TY#) V3 = AddVertex(Surf, X2+1, WaterH#((X2+1) Mod WatSiz , (Y2+1) Mod WatSiz , 0)*WHeight, Y2+1, TX#, TY#) AddTriangle(Surf, V2, V1, V0) AddTriangle(Surf, V1, V2, V3) VertexNormal Surf, V0, X2, 0, Y2 Next Next UpdateNormals(WatMsh) For X = 0 To WatSiz-1 For Y = 0 To WatSiz-1 If WaterH#(X, Y, 1) = 0 And WaterH#(X, Y, 0) < WaterH#(X, Y, 2) WaterH#(X, Y, 0) = WaterH#(X, Y, 0) + Rnd(.005, .01) Else WaterH#(X, Y, 1) = 1 WaterH#(X, Y, 2) = Rnd(.05, .3) EndIf If WaterH#(X, Y, 1) = 1 And WaterH#(X, Y, 0) > -WaterH#(X, Y, 2) WaterH#(X, Y, 0) = WaterH#(X, Y, 0) - Rnd(.005, .01) Else WaterH#(X, Y, 1) = 0 WaterH#(X, Y, 2) = Rnd(.05, .3) EndIf Next Next For X = 0 To WatSiz WaterH#(X, WatSiz, 0) = WaterH#(X, 0, 0) Next For Y = 0 To WatSiz WaterH#(WatSiz, Y, 0) = WaterH#(0, Y, 0) Next WTStt = (WTStt + 1) Mod 24 End Function Function UpdateCubemap(tex,camera,entity) SetBuffer BackBuffer() tex_sz=TextureWidth(tex) ShowEntity camera : HideEntity entity PositionEntity camera, EntityX#(entity), EntityY#(entity), EntityZ#(entity) CameraViewport camera,0,0,tex_sz,tex_sz SetCubeFace tex,0 RotateEntity camera,0,90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,1 RotateEntity camera,0,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,2 RotateEntity camera,0,-90,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,3 RotateEntity camera,0,180,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,4 RotateEntity camera,-90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) SetCubeFace tex,5 RotateEntity camera,90,0,0 RenderWorld CopyRect 0,0,tex_sz,tex_sz,0,0,BackBuffer(),TextureBuffer(tex) ShowEntity entity : HideEntity camera End Function ~EDITIERT~ Codezeile gekürzt, hat das Layout zerschossen. hamZta |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group