Показать сообщение отдельно
Старый 29.06.2011, 01:49   #68
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Таки запустил это на хорсе >

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

Симпатичней чем на блице выглядит даже без изменений и задников
Кажется я не вернусь в блитз.

Люди, скажите сразу есть под блитцевское иде движок ищо лучше хорса?

Последний раз редактировалось dsd, 10.08.2011 в 03:06.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
h1dd3n (29.06.2011)