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=15000)

HolyDel 27.06.2011 11:24

Ответ: Имитация водной поверхности.
 
Цитата:

Блиц хуже Хорса по всем параметрам
нет. для казуалки по прежнему лучше блиц - потомучто работает ну везде. даже на встроенном интеловском видеокартах.

Amatsu 27.06.2011 12:50

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от HolyDel (Сообщение 193275)
нет. для казуалки по прежнему лучше блиц - потомучто работает ну везде. даже на встроенном интеловском видеокартах.

Главное чтобы работал на Win8, а то мне придется клиент игры переписывать под что-то другое -_-

dsd 27.06.2011 14:29

Ответ: Имитация водной поверхности.
 
Почему хорс? А не EsenthelEngine? Или не огре? В есеншле мне примеры понравились :)

Кстати Hmax*sin^2(f(t)+k) очень удобно для прыжка. Если назначить на координату высоты то разницы почти не видно :) Я таки оптимизирую воду, в частном случае оно проще, если не давать камере наклоняться в стороны.

moka 27.06.2011 14:37

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от dsd (Сообщение 193290)
Почему хорс? А не EsenthelEngine? Или не огре? В есеншле мне примеры понравились :)

Xors3D, это наш, отечественный продукт. Я в своё время писал на него шейдеры (mSL), до сих пор можно найти в примерах (если в самых новых не убрали).
.Squid - посещает наш форум, так что есть прямая поддержка.
Плюс, если найдёшь реальный баг - поможешь проекту.
EsenthelEngine - это узко заточенный движок, для C++.
Огр - для тебя думаю будет там слишком много гемора и другой мороки, за место реальной реализации задуманных вещей. Огр тоже С++.
Если тебя привлекает "сразу к делу", то Blitz в этом случае очень удобен. А Xors3D, т.к. DX9, позволяет работать с шейдерами и другими плюшками.
Дело твоё, тут скорее идут дельные предложения, чем вербовка или т.п.

dsd 27.06.2011 17:21

Ответ: Имитация водной поверхности.
 
Примерно с час массировал мозг справочником Выгодского. Пришел к выводу, что пытаться честно генерировать меш с непериодической сеткой в прямом эфире быстро возможно, но для этих целей надо найти и похитить аутичного аспиранта с кафедры матана :D А лучше двух и с разных кафедр.

В общем решил я пользоваться специально сгенерированным мешем. Вуаля, первое приближение :) Пока без координат текстур :wild:

И ведь к этой поверхности легко привязать предметы.>>:(

Crayzi 27.06.2011 18:34

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от MoKa (Сообщение 193293)
Xors3D, это наш, отечественный продукт. Я в своё время писал на него шейдеры (mSL), до сих пор можно найти в примерах (если в самых новых не убрали).
.Squid - посещает наш форум, так что есть прямая поддержка.
Плюс, если найдёшь реальный баг - поможешь проекту.
EsenthelEngine - это узко заточенный движок, для C++.
Огр - для тебя думаю будет там слишком много гемора и другой мороки, за место реальной реализации задуманных вещей. Огр тоже С++.
Если тебя привлекает "сразу к делу", то Blitz в этом случае очень удобен. А Xors3D, т.к. DX9, позволяет работать с шейдерами и другими плюшками.
Дело твоё, тут скорее идут дельные предложения, чем вербовка или т.п.

Ты мну щас реально склонил к Хорсу)) Надо какнить в нем поразбиратся))

dsd 27.06.2011 19:45

Ответ: Имитация водной поверхности.
 
Приближение №2. Уже без швов. Теперь бамп мог бы пригодиться :rolleyes:

Кто там говорил про один кораблик?

L.D.M.T. 27.06.2011 19:45

Ответ: Имитация водной поверхности.
 
Вложений: 1
с преломлением из fastext смотрится довольно-таки неплохо!

dsd 27.06.2011 20:56

Ответ: Имитация водной поверхности.
 
Чутка поднял разрешение и набросал мусора на воде :)

Слегка облагородил сами уравнения.
Чего явно не хватает кроме брызг с гребней?

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(208) 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

tormoz 27.06.2011 21:15

Ответ: Имитация водной поверхности.
 
если не видел - посотри это

http://tv-kom.com/water_AMT_full.rar

dsd 27.06.2011 21:23

Ответ: Имитация водной поверхности.
 
На встроенном в 945 чипсет не работает. Запускает, но не рисует. А большой брат недобука мертв :)

dsd 27.06.2011 22:43

Ответ: Имитация водной поверхности.
 
Вывел коэффициенты в название функций, теперь их тоже можно регулировать функциями. Долой однообразные волны :D

В принципе осталось только приделать частицы, чтобы точки с 95% от максимальной высоты плевались брызгами, найти хорошие текстуры и в принципе вода как в первых корсарах готова, можно еще и отражение наложить, это не тяжелый процесс. Но в общем вроде финиш, на воду пусть и не похоже, но на большую лужу жидкости в ветер определенно.

NitE 27.06.2011 22:56

Ответ: Имитация водной поверхности.
 
http://www.frecle.net/misc/Water.zip

dsd 27.06.2011 23:27

Ответ: Имитация водной поверхности.
 
Nite, ссылка не работает.

По моему я между делом, почти написал свой террэйн :).

moka 27.06.2011 23:30

Ответ: Имитация водной поверхности.
 
Работает.
dsd - изобретает давно изобретённые велосипеды..


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

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