CreateWater()

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: CreateWater()

Beitrag 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?
I´a dllfreak2001
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: CreateWater()

Beitrag 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
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: CreateWater()

Beitrag von dllfreak2001 »

Es gab dazu auch mal ein anderes Paket in dem das Wasser genutzt wurde.
I´a dllfreak2001
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Re: CreateWater()

Beitrag 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:
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: CreateWater()

Beitrag von DarkDragon »

@grapy: Das Thema ist von 2009 ;-) .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Re: CreateWater()

Beitrag 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
Zuletzt geändert von grapy am 25.03.2011 19:33, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: CreateWater()

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Re: CreateWater()

Beitrag von grapy »

vielleicht finde ich da auch noch ein altes OGRE-Showcase :bounce:
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: CreateWater()

Beitrag 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.
I´a dllfreak2001
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Re: CreateWater()

Beitrag 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ß.
Antworten