 |
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
08.11.2005, 19:39
|
#1
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Я такого еще для блица нигде не видел, вот решил попробовать написать...
Маленькая либа функций для реализации визуализации электрических разрядов.
Либа пока еще неоптимизированная, это типа как Бета-версия...
вот вываливаю на всеобщий показ...
PS: уже ловлю летящие в меня камни 
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SubZer0 за это полезное сообщение:
|
|
08.11.2005, 19:51
|
#2
|
|
чтото ето геморно
и вообще такие еффекты делают спрайтами 
|
|
|
Сообщение было полезно следующим пользователям:
|
|
08.11.2005, 19:52
|
#3
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Originally posted by jimon@Nov 8 2005, 06:51 PM
чтото ето геморно
и вообще такие еффекты делают спрайтами
|
хотелось бы посмотреть на твой вариант  (со спрайтами)
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.11.2005, 20:28
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
В принципе Джимон прав . Вопрос только : на сколько просто это будет сделать.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.11.2005, 22:37
|
#5
|
|
По-моему, суть либы не в том, как лучше реализовать молнию, а в реализации этой молнии именно в 3Д.
Выглядит замечательно! Немного визуальных настроек и будет вообще шик! 
|
|
|
08.11.2005, 22:37
|
#6
|
|
у меня нету примера
просто когда я разгребал какойта древний двиг игры на opengl
то я обратил внимание на молнии
они реализовывались так:
1) там было гдето 15 картинок молнии
2) создавался пивот поворачивался,позицировался (ето емитер) он лежит точно на средине линии которая сойденяет две точки (через которые и происходит разряд)
3) создается спрайт, позицируетца в точку пивота и растягивается по одной оси (Y) так чтобы он полностю был длиной в ету линию
4) на спрайт наносятся рандомно текстуры
ps. пивот там надо было чтобы быстро расчитать положения если две (или одна) точки изменят свое положение - то же самое что у тебя dynamic
ps2. сам думаю что ето неочень и сложно, но ето псевдо 3д молнии - хотя где вы видели молнии которые реально изображаются как 3д ?
ps3. думал как зделать реально молнии в 3д
на думал так :
1) генерим 3д линии и сохраняем их в меши
2) на линии надо накладывать еффект свечения, независимости от тумана и освещения, и переход цветов делать так - плавный из белого в ярко синий, потом чуть помедленее из ярко синиго в чуть ярко приглушеный синий  , потом вырисовываем палитру из чуть ярко приглушеного синего в темно синий
3) все что получилось (а должно около 15 мешей) - вставляем в передыдуший алгоритм , вместо спрайтов
ps4. здесь главное чтобы красиво получилось
|
|
|
08.11.2005, 23:57
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Руль 
|
(Offline)
|
|
09.11.2005, 00:11
|
#8
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
2 Jimon
да, если создать пару десятков мешей и потом подставлять каждый с рандомным поворотом, то можно тоже много чего достичь... но это будет сильно специализированно, а тут, можно, допустим, настраиваемой длины создать или количество сегментов задать или радиус рандомизации задать... 
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
09.11.2005, 01:45
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
а тут, можно, допустим, настраиваемой длины создать или количество сегментов задать или радиус рандомизации задать...
|
Еще бы отростков сделать... 
|
(Offline)
|
|
09.11.2005, 20:05
|
#11
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
ессно не для игр... для учебы...
для игр делается все специализированное... это и ежу понятно... 
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
12.11.2005, 21:21
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот седня накатал...

Type Lightning
Field LStartObj%
Field LEndObj%
Field Segments%
Field LSeed%
Field LUpdateTime%
Field LLastUpdate%
Field LPivot%
Field RandomForce%
Field LMesh%
Field LSurface%[2]
Field LThickness%
End Type
Function CreateLightning(StartObj%,EndObj%,RandomForce%,Segments%,Thickness%,UpdateSpeed%=100)
L.Lightning = New Lightning
L\LStartObj% = StartObj%
L\LEndObj% = EndObj%
L\LPivot%=CreatePivot(L\LStartObj%)
L\Segments% = Segments%
If L\Segments%<5 Then L\Segments%=5
L\LThickness% = Thickness%
L\LSeed% = MilliSecs()
L\RandomForce% = RandomForce%
UpdateSpeed% = Abs(UpdateSpeed%)
If UpdateSpeed% < 10 Then UpdateSpeed% = 10
L\LUpdateTime% = UpdateSpeed%
L\LMesh=CreateMesh()
EntityFX(L\LMesh,1+2+32+16)
For k=0 To 2
*L\LSurface[K]=CreateSurface(L\LMesh)
Next
*
Local SX#=EntityX#(L\LStartObj%), SY#=EntityY#(L\LStartObj%), SZ#=EntityZ#(L\LStartObj%)
Local EX#=EntityX#(L\LEndObj%), EY#=EntityY#(L\LEndObj%), EZ#=EntityZ#(L\LEndObj%)
Local XS#=(EX#-SX#)/(L\Segments%-1), YS#=(EY#-SY#)/(L\Segments%-1), ZS#=(EZ#-SZ#)/(L\Segments%-1)
Local V%,T#
For k=0 To 2
*For I=0 To L\Segments%-1
* For J=-1 To 1 Step 1
* *V%=AddVertex(L\LSurface[K], SX#+I*XS#, SY#+I*YS#, SZ#+I*ZS#,Float(J+1)/Float(2),Float(I)/Float(L\Segments%-1))
* *If J Then T=0 Else T=1
* *VertexColor(L\LSurface[K], V%, ColorRed%()*Abs(K-1), ColorGreen%()*Abs(J-1)/2, ColorBlue%(),T)
* Next
*Next
*
*For I=0 To L\Segments%-2
* For J=0 To 1
* *AddTriangle (L\LSurface%[K],3*I+J, 3*I+J+1, J+1+3*(I+1))
* *AddTriangle (L\LSurface%[K],3*I+J, J+1+3*(I+1), J+3*(I+1))
* Next
*Next
Next
;FlipMesh(L\LMesh)
*UpdateNormals(L\LMesh)
*UpdateLightning(L.Lightning)
*
End Function
Function UpdateLightning(L.Lightning)
Local SX#=EntityX#(L\LStartObj%,1), SY#=EntityY#(L\LStartObj%,1), SZ#=EntityZ#(L\LStartObj%,1)
Local EX#=EntityX#(L\LEndObj%,1), EY#=EntityY#(L\LEndObj%,1), EZ#=EntityZ#(L\LEndObj%,1)
Local XS#=(EX#-SX#)/(L\Segments%-1), YS#=(EY#-SY#)/(L\Segments%-1), ZS#=(EZ#-SZ#)/(L\Segments%-1)
Local V%,DX#,DY#,DZ#
If (MilliSecs()-L\LLastUpdate%)>L\LUpdateTime% Then
*L\LLastUpdate%=MilliSecs()
*L\LSeed%=MilliSecs()
EndIf
For k=0 To 2
SeedRnd(L\LSeed%)
For I=0 To L\Segments%-1
*RotateEntity(L\LPivot, VectorPitch#(-XS#, -YS#, -ZS#),VectorYaw#(-XS#, -YS#, -ZS#),0,1)
*TurnEntity(L\LPivot,0,0,k*60)
*PositionEntity(L\LPivot,SX#,SY#,SZ#,1)
* If I=0 Or I=(L\Segments%-1) Then
* *DX#=0: DY#=0: DZ#=0
* Else
* *DX#=Rand(-L\RandomForce%,L\RandomForce%): DY#=Rand(-L\RandomForce%,L\RandomForce%): DZ#=Rand(-L\RandomForce%,L\RandomForce%)
* EndIf
*For J=0 To 2
* V% = I*3+J
* Select J
* *Case 0
* * MoveEntity(L\LPivot,0,L\LThickness%/2.0,0)
* *Default
* * MoveEntity(L\LPivot,0,-L\LThickness%/2.0,0)
* End Select
* VertexCoords(L\LSurface%[K], V%, SX#+I*XS#+EntityX#(L\LPivot)+DX#, SY#+I*YS#+EntityY#(L\LPivot)+DY#, SZ#+I*ZS#+EntityZ#(L\LPivot)+DZ#)
*Next
Next
Next
End Function
Graphics3D 1024,768,32
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Global Cam=CreateCamera()
PositionEntity Cam,0,50,-180
RotateEntity Cam,30,0,0
CameraClsColor Cam,5,20,30
SetFont (LoadFont ("Arial",20))
WorldLight=CreateLight()
RotateEntity WorldLight,20,40,0
For i=1 To 20
For j=1 To 20
*t=CreateCube()
PositionEntity t,i*10-100,-30,j*10-100
ScaleEntity t,3,1,3
Next
Next
Global Piv=CreatePivot()
Global S1%=CreateSphere(8,Piv)
ScaleEntity S1,2,2,2
PositionEntity S1,-50,20,60
EntityColor S1,10,250,20
Global S2%=CreateSphere(8,Piv)
ScaleEntity S2,2,2,2
PositionEntity S2,80,50,-30
EntityColor S2,10,250,20
Color 35,0,255
CreateLightning(S1,S2,3,30,5,50)
Color 255,0,255
CreateLightning(S1,S2,3,30,5,50)
Repeat
For L.Lightning=Each Lightning
UpdateLightning(L.Lightning)
Next
gradx=gradx+MouseXSpeed()*0.1
grady=grady+MouseYSpeed()*0.1
RotateEntity Cam,grady,-gradx,0,False
MoveEntity Cam,KeyDown(205)-KeyDown(203),0,KeyDown(200)-KeyDown(208)+MouseDown(1)-MouseDown(2)
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
* If KeyHit(17) Then W=Not w
* WireFrame W
* TurnEntity(Piv,0,0.5,0)
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End

|
(Offline)
|
|
12.11.2005, 22:01
|
#13
|
|
оно практически одинаково у вас двоих вышло
|
|
|
12.11.2005, 22:11
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by jimon@Nov 12 2005, 10:01 PM
оно практически одинаково у вас двоих вышло
|
У меня принцип работы другой... я не храню информацию о положении вертексов в явном виде (за это отвечает Field LSeed%) 
|
(Offline)
|
|
12.11.2005, 22:24
|
#15
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот этот же код тока в отдельном файле:
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:10.
|