Показать сообщение отдельно
Старый 26.08.2012, 14:15   #1497
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Сообщение от Nex Посмотреть сообщение
Как делают волны на воде и их обрезание (уменьшение детализации меша) в зависимости от расстояния?
Делаешь квадратную равномерную сетку. Потом сжимаешь возле камеры ее так чтобы она слегка была шире поля обзора, а вдали нааоборот увеличиваешь расстояние между вершинами, тоже самое для рядов идущих перпендикулярно линии взгляда, те что возле камеры меньше расстояние, а те что вдали больше расстояние.

а потом анимировать можно как то так:

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


End Function
x00=cubedata#(i-1,0)
y00=cubedata#(i-1,1)

тут сохранены позиции точек поверхности воды до деформации.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
Nex (26.08.2012), St_AnGer (27.08.2012)