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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 08.11.2005, 19:39   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Я такого еще для блица нигде не видел, вот решил попробовать написать...

Маленькая либа функций для реализации визуализации электрических разрядов.
Либа пока еще неоптимизированная, это типа как Бета-версия...

вот вываливаю на всеобщий показ...

PS: уже ловлю летящие в меня камни
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SubZer0 за это полезное сообщение:
Kudesnic (22.09.2010), Reptile (05.01.2008)
Старый 08.11.2005, 19:51   #2
jimon
 
Сообщений: n/a
чтото ето геморно

и вообще такие еффекты делают спрайтами
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reptile (05.01.2008)
Старый 08.11.2005, 19:52   #3
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Originally posted by jimon@Nov 8 2005, 06:51 PM
чтото ето геморно

и вообще такие еффекты делают спрайтами
хотелось бы посмотреть на твой вариант (со спрайтами)
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reptile (05.01.2008)
Старый 08.11.2005, 20:28   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
В принципе Джимон прав . Вопрос только : на сколько просто это будет сделать.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reptile (05.01.2008)
Старый 08.11.2005, 22:37   #5
alcosholik
 
Сообщений: n/a
По-моему, суть либы не в том, как лучше реализовать молнию, а в реализации этой молнии именно в 3Д.

Выглядит замечательно! Немного визуальных настроек и будет вообще шик!
 
Ответить с цитированием
Старый 08.11.2005, 22:37   #6
jimon
 
Сообщений: n/a
у меня нету примера
просто когда я разгребал какойта древний двиг игры на 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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Руль
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 09.11.2005, 00:11   #8
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
2 Jimon

да, если создать пару десятков мешей и потом подставлять каждый с рандомным поворотом, то можно тоже много чего достичь... но это будет сильно специализированно, а тут, можно, допустим, настраиваемой длины создать или количество сегментов задать или радиус рандомизации задать...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 09.11.2005, 01:45   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
а тут, можно, допустим, настраиваемой длины создать или количество сегментов задать или радиус рандомизации задать...
Еще бы отростков сделать...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 09.11.2005, 15:06   #10
jimon
 
Сообщений: n/a
просто то что ты зделал не для игр
 
Ответить с цитированием
Старый 09.11.2005, 20:05   #11
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
ессно не для игр... для учебы...

для игр делается все специализированное... это и ежу понятно...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 12.11.2005, 21:21   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.11.2005, 22:01   #13
jimon
 
Сообщений: n/a
оно практически одинаково у вас двоих вышло
 
Ответить с цитированием
Старый 12.11.2005, 22:11   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Originally posted by jimon@Nov 12 2005, 10:01 PM
оно практически одинаково у вас двоих вышло
У меня принцип работы другой... я не храню информацию о положении вертексов в явном виде (за это отвечает Field LSeed%)
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.11.2005, 22:24   #15
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Вот этот же код тока в отдельном файле:
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Космические Рейнджеры shpak Игры / Games 17 30.12.2009 23:15
Динамические массивы Randomize 2D-программирование 8 06.08.2009 23:09
Жарим сосиски электрическим током impersonalis Болтовня 8 12.11.2008 19:25


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


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