Unebene Flächen+CubeMap = Ebene Reflektion

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Devils Child

Betreff: Unebene Flächen+CubeMap = Ebene Reflektion

BeitragSa, Mai 21, 2005 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi blitzer!
Ich hab hier mal n'prob:
ich hab ein water-terrain und ne cubemap, die reflektionen sehen aus wie von einem flchen
spiegel, obwohl das wasser volkommen uneben ist

Code: [AUSKLAPPEN]
Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()

;Camera
Cam = CreateCamera()
CameraRange Cam, .1, 1000000
CameraClsColor Cam, 255, 255, 0

;SkyBox
Mesh = CreateMesh()
s = CreateSurface(Mesh, LoadBrush("Sky_FT.bmp", 49)): AddVertex s, -1, 1, -1, 0, 0:  AddVertex s, 1, 1, -1, 1, 0:  AddVertex s, 1, -1, -1, 1, 1:  AddVertex s, -1, -1, -1, 0, 1: AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
s = CreateSurface(Mesh, LoadBrush("Sky_BK.bmp", 49)): AddVertex s, 1, 1, 1, 0, 0:    AddVertex s, -1, 1, 1, 1, 0:  AddVertex s, -1, -1, 1, 1, 1:  AddVertex s, 1, -1, 1, 0, 1:   AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
s = CreateSurface(Mesh, LoadBrush("Sky_LF.bmp", 49)): AddVertex s, 1, 1, -1, 0, 0:   AddVertex s, 1, 1, 1, 1, 0:   AddVertex s, 1, -1, 1, 1, 1:   AddVertex s, 1, -1, -1, 0, 1:  AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
s = CreateSurface(Mesh, LoadBrush("Sky_RT.bmp", 49)): AddVertex s, -1, 1, 1, 0, 0:   AddVertex s, -1, 1, -1, 1, 0: AddVertex s, -1, -1, -1, 1, 1: AddVertex s, -1, -1, 1, 0, 1:  AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
s = CreateSurface(Mesh, LoadBrush("Sky_UP.bmp", 49)): AddVertex s, -1, 1, 1, 0, 1:   AddVertex s, 1, 1, 1, 0, 0:   AddVertex s, 1, 1, -1, 1, 0:   AddVertex s, -1, 1, -1, 1, 1:  AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
s = CreateSurface(Mesh, LoadBrush("Sky_DN.bmp", 49)): AddVertex s, -1, -1, -1, 1, 0: AddVertex s, 1, -1, -1, 1, 1: AddVertex s, 1, -1, 1, 0, 1:   AddVertex s, -1, -1, 1, 0, 0:  AddTriangle s, 0, 1, 2: AddTriangle s, 0, 2, 3
ScaleMesh Mesh, 1000, 1000, 1000
FlipMesh Mesh
EntityFX Mesh, 1

;Water
Dim height#(1024, 1024), hcnt#(1024, 1024)
WaterGridSize = 64
Water = CreateTerrain(WaterGridSize)
TerrainDetail Water, 10000
For x = 1 To WaterGridSize
  For z = 1 To WaterGridSize
    height#(x, z) = Rand(-100, 100)
    height#(x, z) = height#(x, z) / 100
  Next
Next

;Water Reflections
RefCam2 = CreateCamera()
CameraRange RefCam2, 1, 1000000
RefTex2 = CreateTexture(256, 256, 385)
EntityTexture Water, RefTex2

;Configuration
Cfg_Speed# = .5
Cfg_MouseSmooth# = 15

fps = 1000

While Not KeyHit(1)
If KeyDown(28) Then SaveBuffer(BackBuffer(), Str$(Rand(1, 10000000)))
  Cls
  ;Camera bewegung
  For i = 1 To Int(100 / fps)
    If KeyDown(17) Or KeyDown(200) Then MoveEntity Cam, 0, 0, Cfg_Speed:  If KeyDown(42) Then MoveEntity Cam, 0, 0, Cfg_Speed
    If KeyDown(31) Or KeyDown(208) Then MoveEntity Cam, 0, 0, -Cfg_Speed: If KeyDown(42) Then MoveEntity Cam, 0, 0, -Cfg_Speed
    If KeyDown(30) Or KeyDown(203) Then MoveEntity Cam, -Cfg_Speed, 0, 0: If KeyDown(42) Then MoveEntity Cam, -Cfg_Speed, 0, 0
    If KeyDown(32) Or KeyDown(205) Then MoveEntity Cam, Cfg_Speed, 0, 0:  If KeyDown(42) Then MoveEntity Cam, Cfg_Speed, 0, 0

    ;Mausbewegung
    xs# = (MouseXSpeed() - xs#) / 7 + xs#
    ys# = (MouseYSpeed() - ys#) / 7 + ys#
    TurnEntity Cam, ys#, 0, 0, 0
    TurnEntity Cam, 0, -xs#, 0, 1
    If EntityPitch(Cam) + y_speed# < -85
      pitch = -85
      flipped = True
    ElseIf EntityPitch(Cam) + y_speed# > 85
      pitch = 85
      fliped = True
    Else
      pitch = EntityPitch(Cam) + myspeed
      flipped = False
    EndIf
    If flipped Then RotateEntity Cam, pitch, EntityYaw(Cam) - MouseXSpeed(), 0
    MoveMouse GraphicsWidth() / 2, GraphicsHeight() / 2
    RotateEntity Cam, EntityPitch(Cam), EntityYaw(Cam), 0

    ;Wireframe
    If KeyHit(57) Then
      wf = Not(wf)
      WireFrame wf
    EndIf
  Next

  ;FPS
  time# = MilliSecs()
  If time# - oldtime# <> 0 Then fps =  Int(1 / (time# - oldtime#) * 1000)
  If fps = 0 Then fps = 1
  oldtime# = MilliSecs()

  Gosub UpdateWater
  UpdateReflections(RefTex2, RefCam2, Water)

  ;Render-System
  UpdateWorld
  RenderWorld
  Flip
Wend
End

.UpdateWater
size = TerrainSize(Water)
For x = 1 To size
  For z = 1 To size
    hcnt#(x, z) = hcnt#(x, z) + 1
    height#(x, z) = Sin((x * z) + hcnt#(x, z))
    ModifyTerrain Water, x, z, height#(x, z)
  Next
Next
Return

Function UpdateReflections(tex, Camera, Entity)
tex_sz = TextureWidth(tex)
CameraProjMode Camera, 1
HideEntity Entity
PositionEntity Camera, EntityX#(Entity), EntityY#(Entity), EntityZ#(Entity)
CameraClsMode Camera, False, True
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
CameraProjMode Camera, 0
End Function
[/syntax]

was tun?
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Devils Child

Betreff: Re: Unebene Flächen+CubeMap = Ebene Reflektion

BeitragSa, Mai 21, 2005 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
entschuldigt für den doppelpost, aber ich hab mal ne waterengine gesehen, wo
die reflectionen funktionieren, woran liegt das?
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Mr.Keks

BeitragSa, Mai 21, 2005 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
woah, bist wohl der erste, der so etwas mit einem blitzterrain macht!

naja, du musst vermutlich ql:terrainshading aktivieren, damit blitz dem terrains auch normals zuweist. die werden für cubemapping benötigt. habe jetzt allerdings deinen code nicht genau gelesen... vielleicht auch mal mit ql:setcubemode rumprobieren.
MrKeks.net

Devils Child

BeitragSa, Mai 21, 2005 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
wow, mit terrainshaddin funtzt es wunderbar! DANKE Very Happy
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group