Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 27.07.2009, 22:40   #1
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Глобальные волны синусом

надо бы сделать чтоб синус делал одинаковые волны вне зависимости от позиции меша воды
у меня в цикле так делаются волны
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 - двигать меш
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 27.07.2009, 22:58   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Глобальные волны синусом

Пример крешится.
http://ru.wikipedia.org/wiki/Волновое_уравнение не поможет? Насколько я понял, тебе нужны выдержки из мат.физики.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 27.07.2009, 23:07   #3
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Глобальные волны синусом

Потому что у тебя синус возведён в зависимость от координаты Z. Как то так..
__________________
(Offline)
 
Ответить с цитированием
Старый 28.07.2009, 23:35   #4
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

да вроде да. но как бы это исправить)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 29.07.2009, 00:23   #5
jimon
 
Сообщений: n/a
Ответ: Глобальные волны синусом

хм ?
y#=Sin((Float(VertexZ(surf,k)-EntityZ(m))*1000))*1
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (29.07.2009)
Старый 14.08.2009, 01:00   #6
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

хм, Джимоновский способ не проканал, но проканало это:
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(), то же самое было
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 02:09   #7
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

хмм если убрать *6 то пашет. возможно в с++ есть какие то неведомые блицу ограничения по sin?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 02:22   #8
jimon
 
Сообщений: n/a
Ответ: Глобальные волны синусом

Mr_F_
в C++ в радианах надо задавать углы
 
Ответить с цитированием
Старый 14.08.2009, 02:47   #9
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

а я не помню что такое радианы
пофиксил всё-таки, меняя константы:

y=sin( ((jMillisecs64f()/700.0f+gz+gx*.5f)*0.5f) );
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 09:55   #10
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Глобальные волны синусом

Небольшое отступление, сори:
Интересно, кто-нибудь пробовал делать воду с попощью анимации.
Допустим плэйн 100х100 и 10-20 костей, так подумать кажется может получиться достаточно быстрая вода, а кости можно и програмно двигать и заранее анимацию сделать, все не соберусь попробовать, может кто уже делал...?
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 09:58   #11
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Глобальные волны синусом

Сообщение от Damp Посмотреть сообщение
Небольшое отступление, сори:
Интересно, кто-нибудь пробовал делать воду с попощью анимации.
Допустим плэйн 100х100 и 10-20 костей, так подумать кажется может получиться достаточно быстрая вода, а кости можно и програмно двигать и заранее анимацию сделать, все не соберусь попробовать, может кто уже делал...?
Проще вертексы двигать (желательно в шейдере). Скелетка это то же перемещение вершин + обсчет иерархии скелета. К тому же простое перемещение по синусоиде будет всяко быстрее трансформации позиции матрицей.
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 11:09   #12
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: Глобальные волны синусом

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

y=sin( ((jMillisecs64f()/700.0f+gz+gx*.5f)*0.5f) );
радиан=угол*pi/180

эт если еще надо )
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 14:23   #13
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

Проще вертексы двигать (желательно в шейдере).
да, но мне к сожалению нужно взаимодействие физики с поверхностью воды) приходится извращатся с обычным двиганием вертексов. ваще есть такая прикольная вещь - projected grid т.е. вертексы проецируются регулярной сеткой в пространстве камеры, в результате волей-неволей получается что вблизи детально, а вдалеке нет. но похоже в ксорсе сделать такое нереал.
щас у меня пока много квадратных кусков воды, которые стыкуются друг с другом, лодятся/выгружаются и на них собсвтенно этот синус. однака надо поискать какой-то более прикольный алгоритм для генерации процедурных волн, вон в том же крайзисе () намного лучше выглядит (да даже в санандреасе).
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 14:50   #14
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

http://en.wikipedia.org/wiki/Sea_state

тут наверное ключ к прикольным волнам.
но я ничего не понимаю в этих форумулах и как их превратить в xyz вертекса
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 14.08.2009, 20:28   #15
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Глобальные волны синусом

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

однака я всё ещё хз как эти формулы понимать
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После войны - граммофон BoB Личное творчество 11 20.10.2008 18:50
Глобальные координаты в локальные (Xors) DarkKnight C++ 7 22.12.2007 19:05
Войны Древности: Спарта johnk Игры / Games 2 19.08.2007 19:27


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com