Seite 4 von 5

Re: CreateWater()

Verfasst: 09.11.2009 13:25
von dllfreak2001
Ist eine Rumpfuscherei in der Demodatei vom Terrain.

Die Skybox musst du raus machen wenn es laufen soll.

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Terrain
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 0.5
#MouseSpeed = 3

waterlevel = 15
IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D()
  Add3DArchive("Data", #PB_3DArchive_FileSystem)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()

    AmbientColor(RGB(255,255,255))
    
    CreateMaterial  (0, LoadTexture(0, "Terrain_Texture.jpg"))
    AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), #PB_Material_Add)
    
    CreateTerrain("terrain.png", MaterialID(0), 1, 1, 1, 20)

    CreateCamera(0, 0, 0, 100, 100)
    
    ;CameraLocate(0, 128, 128, 128)
    CameraFOV(0, 60)
    SkyBox("sun.png") ; Mach micht raus
    
    CreateWater(0, 455, waterlevel, 543, 255,#PB_World_WaterLowQuality| #PB_World_WaterSmooth|#PB_World_WaterSun )

    Sun(-100, 20, 300, RGB(255,255,200))
    
    camX.f = 0
    camY.f = 128
    camZ.f = 0
    
    vY.f = 0
    grav.f = 0.1
    
    Height.f = 0
    hot.f = 0
    Repeat
      Screen3DEvents()

      Height = TerrainHeight(CameraX(0), CameraZ(0))

      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          camX - #CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Right)
          camX + #CameraSpeed
        EndIf

        If KeyboardPushed(#PB_Key_W)
          camZ =camZ- Cos(2*#PI/360 * (MouseX))* #CameraSpeed
          camX =camX- Sin(2*#PI/360 * (MouseX))* #CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_S)
          camZ =camZ+ Cos(2*#PI/360 * (MouseX))* #CameraSpeed
          camX =camX+ Sin(2*#PI/360 * (MouseX))* #CameraSpeed
        EndIf
        
        If KeyboardPushed(#PB_Key_A)
          camZ =camZ- Cos(2*#PI/360 * (MouseX + 90))* #CameraSpeed
          camX =camX- Sin(2*#PI/360 * (MouseX + 90))* #CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_D)
          camZ =camZ+ Cos(2*#PI/360 * (MouseX + 90))* #CameraSpeed
          camX =camX+ Sin(2*#PI/360 * (MouseX + 90))* #CameraSpeed
        EndIf
        
        
        If KeyboardPushed(#PB_Key_Space) And canJump
            canJump = 0
            vY = 1
        EndIf
      EndIf
      
      If ExamineMouse()
        MouseX = MouseX-(MouseDeltaX()/10)*#MouseSpeed
        If MouseX > 360
          MouseX - 360
        ElseIf MouseX < 0
          MouseX + 360  
        
        EndIf
        
        MouseY = MouseY-(MouseDeltaY()/10)*#MouseSpeed
      EndIf

      camY + vY
      
      vY - grav
      
      If camY < Height
        camY = Height
        vY = 0
       
      Else
      
      EndIf
      
      If camy < waterlevel
       Fog($AFDB99, 150, 1, 100)
      Else
        Fog(0, 0, 1, 1)
      EndIf
      
      If camy = Height
        canJump = 1
      EndIf
      
      
      RotateCamera(0, MouseY, MouseX, 0, PB_Absolute)
      
      CameraLocate(0, camX, camY + 2, camZ)
      
      ;MoveCamera  (0, KeyX, -CameraY(0)+Height+8, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
      
      Delay(20)
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
Man kann nur eine Wasserfläche erstellen.
Die Skyboxdarstellung ist unter Wasser fehlerhaft.

Das Wasser spiegelt hat einen Wellengang und verzehrt wenn man hindurchschaut.
Außerdem kann man eine Sonnenspiegelung simulieren.

Für Caustics und Foam
Gibt es leider keine Info irgendwoe müssen da noch Texturen geladen werden... aber wie?

Hat jemand von euch noch den Link zum neuen Demo-Pack mit dem Panzerbeispiel und den anderen Kram?

Re: CreateWater()

Verfasst: 09.11.2009 14:08
von Rokur
Danke dir! Läuft aber leider immer noch nicht, hier die letzten beiden Zeilen aus der Ogre.log, falls damit jemand was anfangen kann:
12:58:41: [Hydrax] Creating water material...
12:58:41: OGRE EXCEPTION(2:InvalidParametersException): Named constants have not been initialised, perhaps a compile error. in GpuProgramParameters::_findNamedConstantDefinition at OgreGpuProgram.cpp (line 1079)
dllfreak2001 hat geschrieben: Man kann nur eine Wasserfläche erstellen.
Die Skyboxdarstellung ist unter Wasser fehlerhaft.
...
Für Caustics und Foam
Gibt es leider keine Info irgendwoe müssen da noch Texturen geladen werden... aber wie?
Jo, echt schade. Das Ganze scheint noch eine sehr unfertige Sache zu sein, hoffentlich gibt irgendwann eine bessere PB-eigene Unterstützung für Ogre, das Potential wäre da. :)

Interessant finde ich auch das im 3D-Demo-Paket folgende Bilder vorhanden sind, aber nirgends in den Beispielquellcodes vorkommen:
- Caustics_n.bmp (n = 0-31)
- Foam.png
- Fresnel.bmp

Re: CreateWater()

Verfasst: 09.11.2009 16:18
von dllfreak2001
Es gab dazu auch mal ein anderes Paket in dem das Wasser genutzt wurde.

Re: CreateWater()

Verfasst: 13.02.2011 15:08
von grapy
Hallo,

sieht doch eigentlich ganz passabel aus, wenn man de richtigen Content hat. ;-)
http://www.file-upload.net/download-321 ... e.zip.html

Bild

Gruß grapy :mrgreen:

Re: CreateWater()

Verfasst: 13.02.2011 17:04
von DarkDragon
@grapy: Das Thema ist von 2009 ;-) .

Re: CreateWater()

Verfasst: 13.02.2011 19:11
von grapy
und? ;-)

ist doch erst 17 Monate her. Wenn ich da an so manche
Projekte in der Arbeit denke, die sind nach vielen Jahren noch nicht abgeschlossen.
Außerdem ist Zeit relativ, irgendwenn interessiert es vielleicht ja doch,
nachdem es nie vernünftige Beispiele mit Content gab. (hab schon 5 Downloads)

:mrgreen:

P.S. Komm mal in mein Alter, da kommt Dir das wie gestern vor :D

Re: CreateWater()

Verfasst: 13.02.2011 20:38
von DarkDragon
grapy hat geschrieben:und? ;-)

ist doch erst 17 Monate her. Wenn ich da an so manche
Projekte in der Arbeit denke, die sind nach vielen Jahren noch nicht abgschlossen.
Außderdem ist Zeit relativ, irgendwenn interessiert es vielleicht ja doch,
nachdem es nie vernünftige Beispiele mit Content gab. (hab schon 5 Downloads)

:mrgreen:
Joa mag sein, aber dafür hätteste ein eigenes OGRE-Showcase Topic aufmachen können oder so ;-) .
grapy hat geschrieben:P.S. Komm mal in mein Alter, da kommt Dir das wie gestern vor :D
Mir kommts sowieso auch schon wie gestern vor.

Re: CreateWater()

Verfasst: 13.02.2011 21:22
von grapy
vielleicht finde ich da auch noch ein altes OGRE-Showcase :bounce:

Re: CreateWater()

Verfasst: 16.02.2011 11:59
von dllfreak2001
Sieht aber auch sehr gut aus und performt auch anständig.
Schade ist nur, wenn man mit der Kamera weiter nach oben geht sieht man allmählich die dunkle untere Hälfte der Skybox.

Re: CreateWater()

Verfasst: 16.02.2011 13:05
von grapy
ja, dafür such ich auch noch eine Lösung.
Eigentlich sollte die Skybox ja mitgehen,
aber darauf hat man ja so ohne weiteres
leider keinen Einfluß.