Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Dither 0
Dim plane#(0,0)
Dim noise#(0)
Dim CubeData#(0,0)
Global pivot,camera,mxs#,mys#,Light,timer3,debugcam,water mesh,watertex,dsd
pivot=CreatePivot()
PositionEntity pivot,0,3,-10
camera=CreateCamera(pivot)
CameraClsColor camera,0,75,151
light=CreateLight()
MeshLight=CreateSphere(6,light)
;ScaleMesh meshlight,0.3,0.3,0.3
EntityFX meshlight,1
watermesh=LoadMesh("mesh/water.b3d")
testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()
dsd=CreatePivot()
cubecount=100
Dim cubedata#(cubecount,2)
For i=0 To cubecount
dh=CreateCube(dsd)
PositionEntity dh,Rand(-90,90),Rand(50,90),Rand(-90,90)
EntityColor dh,Rand(0,255),Rand(0,255),Rand(0,255)
ScaleEntity dh,Rnd(0.5,2),Rnd(0.5,2),Rnd(0.5,2)
cubedata#(i,0)=EntityX(dh,1)
cubedata#(i,1)=EntityZ(dh,1)
Next
watertex=LoadTexture("maps/water.jpg")
SetCubeMode watertex,1
EntityTexture watermesh,watertex,0,1
normaltex = LoadTexture("maps/waternormal.png")
TextureBlend normaltex,4
EntityTexture watermesh,watertex,0,0
preparations(watermesh)
While Not ((KeyDown(56) And KeyHit(62)) Or (KeyHit(56) And KeyDown(62)) Or KeyHit(1))
timer3=MilliSecs()
GrimMagicWater(watermesh)
UpdateWorld
RenderWorld
control(0.5,1.4)
Flip 0
Wend
End
Function GrimMagicWater(meshid)
PointEntity light,camera
PositionEntity light,225*Sin(MilliSecs()/30),15,225*Cos(MilliSecs()/30)
PositionEntity watermesh,EntityX(camera,1),0,EntityZ(camera,1)
RotateEntity watermesh,0,EntityYaw(camera,1)-45,0
If EntityY(camera,1)<1 Then PositionEntity camera,EntityX(camera,1),1,EntityZ(camera,1),1
ScaleTexture watertex,1+Sin(MilliSecs()/100)/10,1+Cos(MilliSecs()/50)/10
waveheight#=8
horizwave#=6
Noiseamplitude#=0.2
wavelength#=10 ; ìåíüøåå çíà÷åíèå îçíà÷àåò áîëüøóþ äëèíó
wavehorizlength#=35
speed#=1
time#=MilliSecs()*speed
mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
;òåïåðü ìàãèÿ
For i=0 To qvert-1
x000#=plane#(i,0)
y000#=plane#(i,2)
z000#=0
TFormPoint x000,z000,y000,mesh,0
x00#=TFormedX()
y00#=TFormedZ()
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)
TFormPoint x01,z01,y01,0,mesh
VertexCoords meshsurf,i,TFormedX(),TFormedY(),TFormedZ()
VertexTexCoords meshsurf,i,x00/25,y00/25
Next
UpdateNormals mesh
For i=1 To CountChildren(dsd)
child=GetChild(dsd,i)
x00=cubedata#(i-1,0)
y00=cubedata#(i-1,1)
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)
PositionEntity child,x01,z01,y01,1
Next
End Function
Function preparations(meshid)
mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
Dim plane#(qvert,3)
Dim noise#(qvert)
For i=0 To qvert-1
plane#(i,0)=VertexX(meshsurf,i) ;x
plane#(i,1)=VertexY(meshsurf,i) ;x
plane#(i,2)=VertexZ(meshsurf,i) ;x
noise#(i)=Rnd(0,359.99)
Next
End Function
Function control(speed#,mousesensitivity#)
If KeyDown(2) WireFrame True Else WireFrame False
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
If KeyDown(17) Or KeyDown(200) MoveEntity camera,0,0,speed#
If KeyDown(31) Or KeyDown(20
MoveEntity camera,0,0,-speed#
If KeyDown(30) Or KeyDown(203) MoveEntity camera,-speed#,0,0
If KeyDown(32) Or KeyDown(205) MoveEntity camera,speed#,0,0
PositionEntity pivot,EntityX#(camera,1),EntityY#(camera,1),Entity Z#(camera,1)
PositionEntity camera,0,0,0
Text 100,10,"polygons in view "+TrisRendered()
If (MilliSecs()-timer3)<>0 Text 100,40,"Frames per second is: "+1000/(MilliSecs()-timer3)
End Function