Include "xors3d.bb"
Global pivot,camera,mxs#,mys#,Light,watermesh,watertex
Dim plane#(0,0)
Dim noise#(0)
xGraphics3D(800, 600, 32, False, 0)
watermesh=preparations()
While(Not (xKeyHit(KEY_ESCAPE) Or xWinMessage("WM_CLOSE")))
GrimMagicWater(watermesh,3,6,10,Rnd(0.05,0.0
,1)
xUpdateWorld
xRenderWorld()
Control(0.2,1)
xFlip()
Wend
End
Function GrimMagicWater(meshid,waveheight#,horizwave#,wavel ength#,Noiseamplitude#,speed#)
xPointEntity light,camera
xPositionEntity (light,225*Sin(xMillisecs()/30),145,225*Cos(xMillisecs()/30))
xPositionEntity (watermesh,xEntityX(camera,1),0,xEntityZ(camera,1) )
xRotateEntity (watermesh,0,xEntityYaw(camera,1)-45,0 )
If xEntityY(camera,1)<1 Then xPositionEntity camera,xEntityX(camera,1),1,xEntityZ(camera,1),1
xScaleTexture watertex,1+Sin(xMillisecs()/100)/10,1+Cos(xMillisecs()/50)/10
;waveheight#=1
;horizwave#=3
;Noiseamplitude#=0.14
;wavelength#=10 ; ìåíüøåå çíà÷åíèå îçíà÷àåò áîëüøóþ äëèíó
wavehorizlength#=35
;speed#=1
time#=xMillisecs()*speed
mesh=meshid
meshsurf=xGetSurface(mesh,0)
qvert=xCountVertices(meshsurf)
For i=0 To qvert-1
x000#=plane#(i,0)
y000#=plane#(i,2)
z000#=0
xTFormPoint (x000,z000,y000,mesh,0)
x00#=xTFormedX()
y00#=xTFormedZ()
z01#=waveheight*Cos(time/wavelength+x00*wavelength/3)+horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
x01#=x00-waveheight*Cos(time/wavelength+x00*wavelength/3)+Noiseamplitude*Cos(noise#(i)+time/4)
y01#=y00-horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
xTFormPoint (x01,z01,y01,0,mesh)
xVertexCoords meshsurf,i,xTFormedX(),xTFormedY(),xTFormedZ()
xVertexTexCoords meshsurf,i,x00/25,y00/25
Next
xUpdateNormals mesh
End Function
Function preparations()
pivot=xCreatePivot()
camera = xCreateCamera(pivot)
light = xCreateLight()
watermesh = xLoadMesh("mesh/water.b3d")
xPositionEntity(watermesh, 0.0, 0.0, 0.0)
watertex=xLoadTexture("maps/water.jpg")
xEntityTexture (watermesh,watertex)
mesh=watermesh
meshsurf=xGetSurface(mesh,0)
qvert=xCountVertices(meshsurf)
Dim plane#(qvert,3)
Dim noise#(qvert)
For i=0 To qvert-1
plane#(i,0)=xVertexX(meshsurf,i) ;x
plane#(i,1)=xVertexY(meshsurf,i) ;x
plane#(i,2)=xVertexZ(meshsurf,i) ;x
noise#(i)=Rnd(0,359.99)
Next
Return watermesh
End Function
Function control(speed#,mousesensitivity#)
If xKeyDown(key_1) Then xWireframe(True) Else xWireframe(False)
xText(10, 10, "FPS: " + xGetFPS())
xText(10,30,"Trisinview: "+xTrisRendered ())
mxs#=mxs#+(xMouseXSpeed()/5.0)
mys#=mys#+(xMouseYSpeed()/5.0)
xRotateEntity (camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0)
xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
If xKeyDown(17) Or xKeyDown(200) xMoveEntity camera,0,0,speed#
If xKeyDown(31) Or xKeyDown(20
xMoveEntity camera,0,0,-speed#
If xKeyDown(30) Or xKeyDown(203) xMoveEntity camera,-speed#,0,0
If xKeyDown(32) Or xKeyDown(205) xMoveEntity camera,speed#,0,0
xPositionEntity pivot,xEntityX#(camera,1),xEntityY#(camera,1),xEnt ityZ#(camera,1)
xPositionEntity camera,0,0,0
End Function