|
3D-программирование Вопросы, касающиеся программирования 3D мира |
27.06.2011, 00:00
|
#1
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Имитация водной поверхности.
Подобрал уравнения деформирующие плоскость. Пока сильно подтормаживает, но это от апдэйта нормалей. Вроде красиво изгибает меш.
Последний раз редактировалось dsd, 10.08.2011 в 03:06.
|
(Offline)
|
|
Эти 12 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
Amatsu (27.06.2011), Android (28.06.2011), ARA (27.06.2011), Arles (29.06.2011), Coks (30.06.2011), FREE MAN (27.06.2011), maxturbo (27.06.2011), Mr_F_ (27.06.2011), Nex (27.06.2011), Program23 (27.06.2011), Randomize (27.06.2011), St_AnGer (27.06.2011)
|
27.06.2011, 00:03
|
#2
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Имитация водной поверхности.
1. Почему нет кода ?
2. Это будет всегда подтормаживать, так-что не юзабельно, разве что если у тебя в игре будет только вода и одна лодочка.
|
(Offline)
|
|
27.06.2011, 00:07
|
#3
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Имитация водной поверхности.
Эффектно, завороженно смотрел на поверхность минут 5.
AMD X2 6000+, 4Gb ОЗУ, HD4770 - стабильно 70-75 фпс
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Amatsu за это полезное сообщение:
|
|
27.06.2011, 00:15
|
#4
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Имитация водной поверхности.
Тю, по опыту сдесь код выходящий за рамки кода в справке не анализирут :D
Но вот:
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Dither 0
Dim plane#(0,0)
Dim noise#(0)
Global pivot,camera,mxs#,mys#,Light,timer3
Const gravitation#=9.8
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
AmbientLight 15,15,15
mesh=CreateWaterPlane(36,36,3,3)
PrepareWaterData(mesh)
While Not ((KeyDown(56) And KeyHit(62)) Or (KeyHit(56) And KeyDown(62)) Or KeyHit(1))
timer3=MilliSecs()
PointEntity light,mesh
PositionEntity light,25*Sin(MilliSecs()/30),25,25*Cos(MilliSecs()/30)
UpdateWaterPlane(0.5,0.2,0.7,mesh)
UpdateWorld
RenderWorld
control(0.5,1.4)
Text 200,200,noise#(Rand(0,200))
Flip 0
Wend
End
Function UpdateWaterPlane(windx#,windy#,windz#,meshhandle)
mesh=meshhandle
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
For i=0 To qvert-1
x00#=plane#(i,0)
y00#=plane#(i,1)
z01#=8*Cos(MilliSecs()/10+x00*3)+6*Sin(MilliSecs()/35+y00*1.5)+0.5*Sin(noise#(i)+MilliSecs()/4)
x01#=x00-8*Cos(MilliSecs()/10+x00*3)+0.5*Cos(noise#(i)+MilliSecs()/
y01#=y00-6*Sin(MilliSecs()/25+y00*2)+0.5*Sin(noise#(i)+MilliSecs()/4)
VertexCoords meshsurf,i,x01,z01,y01
Next
UpdateNormals mesh
End Function
Function PrepareWaterData(meshid)
mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
Dim plane#(qvert,3)
For i=0 To qvert-1
plane#(i,0)=VertexX(meshsurf,i)
plane#(i,1)=VertexZ(meshsurf,i)
Next
End Function
Function CreateWaterPlane(width,depth,gridx#,gridy#)
mesh=CreateMesh()
meshsurf=CreateSurface(mesh)
b=width
d=depth
For y=-d To d
For x=-b To b
v0=AddVertex(meshSurf,x*gridx,0,y*gridy)
VertexNormal (meshsurf,v0,0,1,0)
Next
Next
qvert=CountVertices(meshSurf)
For i=0 To qvert-1
v0=i
x0#=VertexX(meshSurf,V0)
y0#=VertexZ(meshSurf,V0)
bize=i+3*b
If bize>qvert-1 Then bize=qvert-1
For z=i To bize
If (VertexX#(meshSurf,z)-gridx=x0#) And (VertexZ#(meshSurf,z)=y0#) Then v1=z
If (VertexX#(meshSurf,z)=x0#) And (VertexZ#(meshSurf,z)-gridy=y0#) Then v2=z
If (VertexX#(meshSurf,z)-gridx=x0#) And (VertexZ#(meshSurf,z)-gridy=y0#) Then v3=z
Next
If v0<>v1 And v2<>v3 Then AddTriangle(meshsurf,v1,v0,v2) : AddTriangle(meshsurf,v3,v1,v2) :v1=v2=v3=0
Next
For i=0 To qvert-1
x00#=VertexX(meshsurf,i)
y00#=VertexZ(meshsurf,i)
u00#=x00/(width*gridx)
v00#=y00/(depth*gridy)
VertexTexCoords meshsurf,i,u00,v00
Next
Dim noise#(qvert)
For i=0 To qvert-1
noise#(i)=Rnd(0,359.99)
Next
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()
EntityTexture mesh,testtex,0,0
ScaleTexture testtex,.1,.1
Return mesh
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(20 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
Пока просто лениво считать нормали к точкам, без апдейта это в 5-6 раз резче, плюс можнозамутить перерисовку меша по типу террэйна. Только зачем мне это в пародии на МОО :D
Это эскиз вообще без оптимизации.
1-wireframe
Последний раз редактировалось dsd, 10.08.2011 в 03:06.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
|
27.06.2011, 00:20
|
#5
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Имитация водной поверхности.
да ) неплохо ) вот еще сделать красивую водную поверхность, и постэффекты, и получится шикарно )
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
27.06.2011, 00:28
|
#6
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Имитация водной поверхности.
автор, переходи на dx9+ движки, вертексными шейдерами не будет тормозить)
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
27.06.2011, 00:36
|
#7
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Имитация водной поверхности.
Исчо вариант - убрать мелкую рябь, уменьшить полигонаж воды раз в 5. а рябь заменить ревлективным/рефрактивным бампом из FastExt или Ashadow)
__________________
Вертекс в глаз или в пиксель раз?
|
(Offline)
|
|
27.06.2011, 00:37
|
#8
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Имитация водной поверхности.
У автора просто видать хобби... Как и все остальные он пытается из не возможного делать реальные вещи и при чем это получается довольно таки не плохо
__________________
|
(Offline)
|
|
27.06.2011, 00:47
|
#9
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Имитация водной поверхности.
Класс!По-истине релаксирующая водичка,еще бы текстуру натянуть,песчаный берег,крабик,камешек,ракушка,дельфиничика,чаек,пен у от разбивающихся об брег волн...
|
(Offline)
|
|
27.06.2011, 00:58
|
#10
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Имитация водной поверхности.
Сообщение от Program23
Класс!По-истине релаксирующая водичка,еще бы текстуру натянуть,песчаный берег,крабик,камешек,ракушка,дельфиничика,чаек,пен у от разбивающихся об брег волн...
|
Думаю от таких волн на пляжике не останется ни крабиков, ни ракушек. Волны явно штормовые, причем вдали от берега
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.06.2011, 01:02
|
#11
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Имитация водной поверхности.
Хм. Где то читал, что уровень графики современных игр должен быть посильным для первых пней если код будет правильный ))
С++ мне тяжело. Пуре бэйсик с отвратительной справкой по командам. Плюс за месячишко мне блитц не надоел . Я пока даже не дошел до коллизий В блитце мне не хватает только нормальной скорости в рисовании, ведь даже простого анализа изображения не замутить
А над этим надо думать(я про воду). В основном надо придумать хитрую функцию меша. Потому как этим уравнениям фиолетов уровень детализации, просто частую сетку оно изогнет разнообразней, оно как фрактал Надо только уравнения подобрать, что бы волны в бублик скручивало.
И потом при желании транслировать алгоритм в другой язык элементарно По моему я щас работаю практически с опенжлом
И да, скоро я буду вспоминать термех :D
Это просто волны, когда выведу коэффициенты можно будет имитировать от ряби до шторма И надо еще с логарифмами и тангенцами поэксперементировать
|
(Offline)
|
|
27.06.2011, 01:34
|
#12
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Имитация водной поверхности.
dsd с АВТОМАТ-ом могли бы сделать "Минекрафт получше"
|
(Offline)
|
|
27.06.2011, 02:01
|
#13
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Имитация водной поверхности.
dsd, дык, под Blitz3D, есть Xors3D - а там есть и шейдеры. А они позволяют в функции вершинного шейдера, в реальном времени изменять позицию и любые другие параметры вершин со сложными формулами с очень отличной производительностью (на то и шейдеры).
И в современных играх, используют именно их.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.06.2011, 02:08
|
#14
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Имитация водной поверхности.
;нужно сделать что бы в зоне видимости камеры была плоскость.
; А вне зоны ее не было. Отсечение ненужного легко решается задачей четырех плоскостей отгораживающих невидимое
; уравнение плоскости ax+by+cz=0 d не нужно так как плоскость проходит через начало координат
; Нужно в координатах камеры найти линии пересечения плоскости воды и клипплэйнов. Это первый этап. Видимость точки определяется легко потому как нормаль имеет длину 1 а уравнения плоскостей приведены к нормальному виду и расстояние от точки до поверхностей считается легко
;
;Этап второй нужным образом а именно линиями расположенными перпендикулярно нормальному вектору связывающему точку проецирующий на камеру в graphicswidth().2 и последовательно расположенную высоту имею рассчитываемые координаты точек, которые перевожу в координаты меша
; Чем дальше от камеры тем шире ряды.
;Рассчитываю полученные из ничто исходные координаты точек меша, считаю новые ставлю точки в полученные натягиваю сюрфэйс. Хитрым финтом для каждой точки из уравнения извлекаю нормаль
;ставлю нормаль. Придумываю как завязать текстурные координаты на глобальные, что бы текстура не дрожала. Профит.
Вот вроде просто )) Но программирования тут раз в 20 меньше математики
Мока, мне триалов для медитаций не хватает и на вид ксорс не лучше блитца. Да и жадный я )))
|
(Offline)
|
|
27.06.2011, 04:26
|
#15
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Имитация водной поверхности.
мне триалов для медитаций не хватает
|
Изучил-бы вопрос сначала. У Хорса триал - полная функциональность и ограничение по времени 30 минут. Я сомневаюсь что у тебя хватит силы воли медитировать на эти волны более 30 минут.
и на вид ксорс не лучше блитца.
|
Во-первых внешность обманчива. Во-вторых http://www.gamedev.ru/flame/forum/?id=142859 и ещё многое (офф. сайт в отключке), это хорс.
Блиц хуже Хорса по всем параметрам, он уже слишком стар чтобы с кем-то тягаться. Да и апдейты на него раз в год по обещанию.
Сделай игру - получи хорс бесплатно. Кажется ещё в силе.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо NitE за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:23.
|