WaterEffect
Publié : mer. 05/avr./2006 7:08
Voilà, je voudrais faire un effet d'eau (comme celui ci en Blitz3D : http://www.blitzbasic.com/codearcs/code ... ?code=1110 )
Mais je n'ai pas du comprendre comment fonctionner la 3D en Pure car ca ne marche pas
Mais je n'ai pas du comprendre comment fonctionner la 3D en Pure car ca ne marche pas
Code : Tout sélectionner
Define.f KeyX, KeyY,KeyXCam, KeyYCam, MouseX, MouseY
Define.l actif
Global actifmesh.s
IncludeFile "Screen3DRequester.pb"
Declare WaterEffect()
#PB_Entity_StaticBody = 1
#PB_Entity_BoxBody = 2
#PB_Entity_SphereBody = 3
#PB_Shadow_None = 0
#PB_Shadow_Modulative = 1 ; Black shadow (fast)
#PB_Shadow_Additive = 2 ; Additive translucent shadow (more expensive with severl lights)
#PB_Entity_Solid = 0
#PB_Entity_Wireframe = 1 << 0
#PB_Entity_Plot = 1 << 1
#PB_Entity_CastShadow = 1 << 2
#PB_3DArchive_Recursive = 2
Enumeration
#TrackEntity
#OgreEntity
#CubeEntity
#NinjaEntity
#SphereEntity
EndEnumeration
actif=#CubeEntity
actifmesh="Cube"
If InitEngine3D()
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Dragon.zip", #PB_3DArchive_Zip)
Add3DArchive("Data\Ogre\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Circuit\", #PB_3DArchive_FileSystem)
Add3DArchive("Data\Cube\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Ninja\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Sphere\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
AmbientColor(RGB(128,128,128))
EnableWorldPhysics(1)
WorldShadows(#PB_Shadow_Additive)
EnableWorldCollisions(1)
OgreMesh = LoadMesh(#PB_Any, "OgreHead.mesh")
TrackMesh = LoadMesh(#PB_Any, "racingcircuit.mesh")
CubeMesh = LoadMesh(#PB_Any, "Cube.mesh")
SphereMesh = LoadMesh(#PB_Any, "Sphere.mesh")
Text = LoadTexture(#PB_Any, "r2skin.jpg")
Mat = CreateMaterial(#PB_Any, TextureID(Text))
Steel = LoadTexture(#PB_Any, "RustySteel.jpg")
SteelMaterial = CreateMaterial(#PB_Any, TextureID(Steel))
DisableDebugger
CreateEntity(#OgreEntity , MeshID(OgreMesh), 0, 10, 0, 0)
CreateEntity(#TrackEntity , MeshID(TrackMesh), 0, 0, 00, 0)
CreateEntity(#CubeEntity , MeshID(CubeMesh), MaterialID(Mat), 20, 0, 0)
CreateEntity(#SphereEntity, MeshID(SphereMesh), MaterialID(SteelMaterial), 0, 0, 0)
EnableDebugger
EntityPhysicBody(#TrackEntity, #PB_Entity_StaticBody)
EntityRenderMode(#TrackEntity, 0)
EntityRenderMode(#OgreEntity, 0)
ScaleEntity(#OgreEntity, 0.1, 0.1, 0.1)
EntityRenderMode(#SphereEntity,0)
ScaleEntity(#SphereEntity, 0.05, 0.05, 0.05)
EntityRenderMode(#CubeEntity,0)
ScaleEntity(#CubeEntity, 0.1, 0.1, 0.1)
Fog(RGB(50,100,150),1,-100,200)
CreateLight(0, RGB(255,255,255), 100.0, 100, 0)
SkyBox("desert07.jpg")
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,30)
Repeat
Screen3DEvents()
ClearScreen(RGB(0, 0, 0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Pad1) Or KeyboardPushed(#PB_Key_1)
actif=#CubeEntity
actifmesh="Cube"
ElseIf KeyboardPushed(#PB_Key_Pad2) Or KeyboardPushed(#PB_Key_2)
actif=#SphereEntity
actifmesh="Sphere"
ElseIf KeyboardPushed(#PB_Key_Pad3) Or KeyboardPushed(#PB_Key_3)
actif=#OgreEntity
actifmesh="Ogre"
EndIf
If KeyboardPushed(#PB_Key_Left)
KeyX = -1
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 1
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -1
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 1
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_A)
KeyXCam = -1
ElseIf KeyboardPushed(#PB_Key_D)
KeyXCam = 1
Else
KeyXCam = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyYCam = -1
ElseIf KeyboardPushed(#PB_Key_S)
KeyYCam = 1
Else
KeyYCam = 0
EndIf
If KeyboardPushed(#PB_Key_Space)
MoveEntity(#OgreEntity, 10, 40, 0)
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf
RotateCamera(0, MouseX, MouseY, 0)
MoveCamera (0, KeyXCam, 0, KeyYCam)
MoveEntity(actif,KeyX, 0, KeyY)
WaterEffect()
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Procedure WaterEffect()
gw=WindowWidth(0)
gh=WindowHeight(0)
CreateSprite(0,gw,gh)
GrabSprite(0,0,0,gw,gh)
StartDrawing(SpriteOutput(0))
underw_a=(underw_a+4)
steph.f=gh/32
mu8.f=gh/60
If underw_a>359
underw_a=0
EndIf
iiff=Int((gh-4)*100)
For iif=0 To iiff Step 1
int.l=Int(underw_a+iif)
mod=int % 360
wsin.f=Sin(mod)*mu8
ClipSprite(0,0,iif, gw,steph+4)
DisplaySprite(0,0,iif+wsin)
Next
StopDrawing()
FreeSprite(0)
EndProcedure