forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Глобальные волны синусом (http://forum.boolean.name/showthread.php?t=8781)

Mr_F_ 27.07.2009 22:40

Глобальные волны синусом
 
надо бы сделать чтоб синус делал одинаковые волны вне зависимости от позиции меша воды
у меня в цикле так делаются волны
y#=Sin(z#*1000)
на каждый вертекс

надо чтоб меш двигался а волны на нём были как в глобальном пространстве
если делать
TFormPoint x#,y#,z#,mesh,0
gz#=TFormedZ#()
y#=Sin(gz#*1000)

то чето чем дальше я меш от нуля отодвигаю по z тем быстрей эти волны по нему двигаются) т.е. через пару координат уже со скоротсю света летят

ничего не понимаю

Цитата:

graphics3d 1280,1024,32

cam=createcamera()
moveentity cam,250,10,0
CameraClsColor cam,100,100,100

lit=createlight()

Global height#=1

high=CreateLODedWater()

pointentity cam,high

Wireframe 1

While Not KeyHit(1)

If KeyDown(KEY_W) moveentity cam,0,0,1
If KeyDown(KEY_S) moveentity cam,0,0,-1

If KeyDown(KEY_A) moveentity high,0,0,-.1
If KeyDown(KEY_D) moveentity high,0,0,.1

UpdateWater2(high)

renderworld
text 0,0,TrisRendered()
Flip
Wend


Function CreateFace(segs,double,parent)
;segs=24
mesh=CreateMesh()
surf=CreateSurface( mesh )
stx#=-.5
sty#=stx
stp#=Float(1)/Float(segs)
y#=sty
For a=0 To segs
x#=stx v#=a/Float(segs)
For b=0 To segs
u#=b/Float(segs)
AddVertex(surf,x,0,y,u,v)
x=x+stp
Next
y=y+stp
Next
For a=0 To segs-1
For b=0 To segs-1
v0=a*(segs+1)+b:v1=v0+1
v2=(a+1)*(segs+1)+b+1:v3=v2-1
AddTriangle( surf,v0,v2,v1 )
AddTriangle( surf,v0,v3,v2 )
Next
Next

Scaleentity mesh,50,height#,50
;rotateentity mesh,180,0,0
Return mesh
End Function

Function UpdateWater2(m)

surf=GetSurface(m,0)

cnt=CountVertices(surf)-1
For k=0 To cnt
x#=VertexX(surf,k)
z#=VertexZ(surf,k)
TFormPoint x#,0,z#,m,0
gz#=TFormedZ#()
y#=Sin((Float(gz#)*1000))*1
VertexCoords surf,k,x,y,z
Next


End Function


Function CreateLODedWater()
height#=1
high=CreateFace(24,0,0)
Return high
End Function
кнопки A,D - двигать меш

impersonalis 27.07.2009 22:58

Ответ: Глобальные волны синусом
 
Пример крешится.
http://ru.wikipedia.org/wiki/Волновое_уравнение не поможет? Насколько я понял, тебе нужны выдержки из мат.физики.

SBJoker 27.07.2009 23:07

Ответ: Глобальные волны синусом
 
Потому что у тебя синус возведён в зависимость от координаты Z. Как то так..

Mr_F_ 28.07.2009 23:35

Ответ: Глобальные волны синусом
 
да вроде да. но как бы это исправить)

jimon 29.07.2009 00:23

Ответ: Глобальные волны синусом
 
хм ?
y#=Sin((Float(VertexZ(surf,k)-EntityZ(m))*1000))*1

Mr_F_ 14.08.2009 01:00

Ответ: Глобальные волны синусом
 
хм, Джимоновский способ не проканал, но проканало это:
xTFormPoint(x#,0,z#,m,0)
gx#=xTFormedX#()
gz#=xTFormedZ#()

y#=Sin( (MilliSecs()/30+gz+gx*0.5)*6 )

НО почему-то в с++ не пашет то же самое:

y=sin( (jMillisecs64f()*0.0011f+gz+gx) *6 );

константу, на которую множить миллисекс я подогнал немного, а то иначе скорость отличалась. До жмиллисекса юзал time(), то же самое было

Mr_F_ 14.08.2009 02:09

Ответ: Глобальные волны синусом
 
хмм если убрать *6 то пашет. возможно в с++ есть какие то неведомые блицу ограничения по sin?

jimon 14.08.2009 02:22

Ответ: Глобальные волны синусом
 
Mr_F_
в C++ в радианах надо задавать углы

Mr_F_ 14.08.2009 02:47

Ответ: Глобальные волны синусом
 
а я не помню что такое радианы :-D
пофиксил всё-таки, меняя константы:

y=sin( ((jMillisecs64f()/700.0f+gz+gx*.5f)*0.5f) );

Damp 14.08.2009 09:55

Ответ: Глобальные волны синусом
 
Небольшое отступление, сори:
Интересно, кто-нибудь пробовал делать воду с попощью анимации.
Допустим плэйн 100х100 и 10-20 костей, так подумать кажется может получиться достаточно быстрая вода, а кости можно и програмно двигать и заранее анимацию сделать, все не соберусь попробовать, может кто уже делал...?

Knightmare 14.08.2009 09:58

Ответ: Глобальные волны синусом
 
Цитата:

Сообщение от Damp (Сообщение 114225)
Небольшое отступление, сори:
Интересно, кто-нибудь пробовал делать воду с попощью анимации.
Допустим плэйн 100х100 и 10-20 костей, так подумать кажется может получиться достаточно быстрая вода, а кости можно и програмно двигать и заранее анимацию сделать, все не соберусь попробовать, может кто уже делал...?

Проще вертексы двигать (желательно в шейдере). Скелетка это то же перемещение вершин + обсчет иерархии скелета. К тому же простое перемещение по синусоиде будет всяко быстрее трансформации позиции матрицей.

Tadeus 14.08.2009 11:09

Ответ: Глобальные волны синусом
 
Цитата:

Сообщение от Mr_F_ (Сообщение 114218)
а я не помню что такое радианы :-D
пофиксил всё-таки, меняя константы:

y=sin( ((jMillisecs64f()/700.0f+gz+gx*.5f)*0.5f) );

радиан=угол*pi/180

эт если еще надо )

Mr_F_ 14.08.2009 14:23

Ответ: Глобальные волны синусом
 
Цитата:

Проще вертексы двигать (желательно в шейдере).
да, но мне к сожалению нужно взаимодействие физики с поверхностью воды) приходится извращатся с обычным двиганием вертексов. ваще есть такая прикольная вещь - projected grid т.е. вертексы проецируются регулярной сеткой в пространстве камеры, в результате волей-неволей получается что вблизи детально, а вдалеке нет. но похоже в ксорсе сделать такое нереал.
щас у меня пока много квадратных кусков воды, которые стыкуются друг с другом, лодятся/выгружаются и на них собсвтенно этот синус. однака надо поискать какой-то более прикольный алгоритм для генерации процедурных волн, вон в том же крайзисе (:-D) намного лучше выглядит (да даже в санандреасе).

Mr_F_ 14.08.2009 14:50

Ответ: Глобальные волны синусом
 
http://en.wikipedia.org/wiki/Sea_state

тут наверное ключ к прикольным волнам.
но я ничего не понимаю в этих форумулах и как их превратить в xyz вертекса :-D

Mr_F_ 14.08.2009 20:28

Ответ: Глобальные волны синусом
 
в общем в папере Tessendorf'а 99 года всё написано про крутые процедурные волны. тут имплементация:
http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm

однака я всё ещё хз как эти формулы понимать :-D


Часовой пояс GMT +4, время: 04:01.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot