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

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

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

Ответ
 
Опции темы
Старый 31.10.2009, 22:00   #1
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Эфект от выстрела

Ну знач попала пуля в стену , декали я добился а эфект пыли разлетающийся не получается. А может быть у кого-то исходник есть? Поделитесь пожалуйста если не жалко.
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 31.10.2009, 22:03   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Эфект от выстрела

Партиклы.
По сути всё просто: направление пыли - перпендикуляр к поверхности попадания. Плюс гравитация воздействующая на них. Ничего сложного.
(Offline)
 
Ответить с цитированием
Старый 01.11.2009, 08:29   #3
Colossus
Разработчик
 
Аватар для Colossus
 
Регистрация: 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)
 
Ответить с цитированием
Старый 01.11.2009, 09:55   #4
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Эфект от выстрела

Terminator , я пошёл хитрым путём. Хочу тебя спросить , а у тебя есть функция пули??? Так вот я спрайт пули просто заменил на спрайт декали.))
Добавил такие параметры EntityRadius( в даном случае он = 0.009), коллизию поставил так: Collisions typeshot,typelevel,2,1 . Ну вот как-то так.

А теперь долгожданный код:



Global vs#=45; скорость нашей пули
Global shot=LoadSprite ("data/Sprites/bullet_hole.bmp"); пуля как дырка
HideEntity shot

Type shot
Field entity
Field dist#
End Type

;Это код самой пули
Function create_Shot(x#,y#,z#,pitch#,yaw#,roll#)
s.shot=New shot
s\entity=CopyEntity(shot)
PositionEntity s\entity,x#,y#,z#,1
EntityType s\entity,typeshot
RotateEntity s\entity,pitch#,yaw#,roll#,1
ScaleSprite s\entity,0.04,0.04
EntityRadius s\entity,0.006
RotateSprite s\entity,Rnd(360)
SpriteViewMode s\entity,2
Return True
End Function

Function update_shot()

max_dist#=3000

For a.shot=Each shot

MoveEntity a\entity,Rnd(0.2,0.3),0,vs#

a\dist#=a\dist#+vs#

bot_h = EntityCollided(a\entity,typelevel)<>0

If a\dist#>max_dist#
FreeEntity a\entity
Delete a

Exit
EndIf
Next
End Function

;ну и после репит
if mousedown(1)
create_shot(EntityX(player)-0.5,EntityY(player)+0.7,EntityZ(player),EntityPitc h(player)-2,EntityYaw(player),0)
endif

;До рендерворлд
update_shot()

Вот и всё . А сколько я времени убил что бы этого добиться!!! Ну всё же и это меня не устраивает! Буду думать , работать.
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 01.11.2009, 14:15   #5
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Эфект от выстрела

А на си плюс плюсе, или на чем ты там работаешь, это наверное делается гораздо красивее, проще и круче?
(Offline)
 
Ответить с цитированием
Старый 01.11.2009, 14:48   #6
Colossus
Разработчик
 
Аватар для Colossus
 
Регистрация: 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)
 
Ответить с цитированием
Старый 01.11.2009, 15:10   #7
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Эфект от выстрела

Graphics3D 800,600,0,0

CentreX=GraphicsWidth()/2
CentreY=GraphicsHeight()/2

; bullet hole & spark sprites
hole=CreateSprite()
ScaleSprite hole,0.25,0.25
SpriteViewMode hole,2
EntityBlend hole,2
EntityTexture hole,Cirtex(32)
HideEntity hole

spark=CreateSprite()
ScaleSprite spark,0.1,0.1
EntityBlend spark,3
HideEntity spark

; make environment

AmbientLight 0,0,0

camera=CreateCamera()
PositionEntity camera, 0,-15,0

room=CreatePivot()

Cube=CreateSegCube(12,room)
EntityPickMode cube,2
EntityColor cube,250,100,50
ScaleMesh cube,40,40,40
FlipMesh cube

Column=CreateCylinder(16,True,room)
EntityPickMode column,2
EntityFX column,4
EntityColor column,150,120,120
PositionMesh column,0,1,0
ScaleMesh Column,6,24,6

sphere=CreateSphere(12,column)
EntityShininess sphere,0.25
EntityColor sphere,200,200,50
EntityPickMode sphere,2
ScaleMesh sphere,-6,-6,-6 ; flip normals
PositionMesh sphere,0,54,0

PositionEntity Column,-30,-40,-30
PositionEntity CopyEntity(column,room),30,-40,-30
PositionEntity CopyEntity(column,room),30,-40,30
PositionEntity CopyEntity(column,room),-30,-40,30

; add a few lights

lpiv=CreatePivot(room)
light=CreateLight(2,lpiv) : PositionEntity light,-30,14,-30
light=CreateLight(2,lpiv) : PositionEntity light,30,14,-30
light=CreateLight(2,lpiv) : PositionEntity light,30,14,30
light=CreateLight(2,lpiv) : PositionEntity light,-30,14,30

; load gunshot sound - your path to this may be different.
shot = LoadSound("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\si\fps\gunshot.wav")

holes  = CreatePivot(room) ; bullet hole list
sparks = CreatePivot(room) ; sparks list

; main ---------------------------------------------------------

MoveMouse CentreX,CentreY

Repeat
	mxs#=MouseXSpeed()
	mys#=MouseYSpeed()

	If MouseDown(2) Then
		MoveEntity camera,0,0,-mys*0.25
	Else
		TurnEntity camera,mys*0.5,0,0 : TurnEntity camera,0,-mxs*0.5,0,True
	EndIf
	
	MoveMouse centrex,centrey
	
	If MouseDown(1) Or KeyHit(57) Then 
		If MilliSecs()>delaytime Then
			delaytime=MilliSecs()+100
			If shot Then PlaySound shot				
			picked=CameraPick(camera, CentreX+Rnd(-10,10),CentreY+Rnd(-10,10))
			If picked<>0 Then
				makehole(hole,holes)
				makespark(spark,sparks)				
			EndIf
		EndIf
	EndIf
	
	updatesparks(sparks)
	
	For i=1 To CountChildren(lpiv)
		light=GetChild(lpiv,i)
		LightRange light,15+Sin((MilliSecs() And $FFFFF)/24+i*90 )*8
	Next
	
	If KeyHit(17) Then wire=Not wire : WireFrame wire
	
	RenderWorld
	Color 255,255,255
	Line centrex-4,centrey,centrex+4,centrey : Line centrex,centrey-4,centrex,centrey+4
	Flip
Until KeyHit(1)

;----------------------------------------------------------------------------------------

Function makehole(hole,holes)
	hole=CopyEntity(hole,holes)
	PositionEntity hole,PickedX(),PickedY(),PickedZ(),True
	AlignToVector hole,-PickedNX(),-PickedNY(),-PickedNZ(),3
	MoveEntity hole,0,0,-0.05
	If CountChildren(holes)>200 Then FreeEntity GetChild(holes,1)
End Function

Function makespark(spark,sparks)
	Local rv#=Rnd(-0.8,0.8)
	spark=CopyEntity(spark,sparks)
	PositionEntity spark,PickedX(),PickedY(),PickedZ(),True
	AlignToVector spark,-PickedNX()+Rv,-PickedNY()+Rv,-PickedNZ()+Rv,3
End Function

Function updatesparks(sparks)
	Local i,life
	For i=1 To CountChildren(sparks)
		spark=GetChild(sparks,i)
		life=EntityName(spark) : life=life+1 : NameEntity spark,life
		MoveEntity spark,0,0,-1 : TranslateEntity spark,0,-life/5.0,0,True
		EntityColor spark,512/life,512/life,512/life
		If life>20 Then FreeEntity spark : i=i-1
	Next
End Function

Function Cirtex(rad)
	texture=CreateTexture(rad,rad)
	SetBuffer TextureBuffer(texture)
	Color 255,255,255 : Rect 0,0,rad,rad,True
	Color 200,200,200 : Oval 0,0,rad,rad,True
	Color 100,100,100 : Oval 12,12,rad-24,rad-24,True
	SetBuffer BackBuffer()
	Return texture
End Function

; Birdies CreateSegCube Function from the archives (slightly modified)
Function CreateSegCube(segs=1,parent=0)
	Local a,b,scnt,stp#=2.0/segs,stx#,sty#,x#,y#,u#,v#,v0,v1,v2
	Local mesh=CreateMesh( parent )
	For scnt=0 To 5
		surf= CreateSurface( mesh )
		stx = -1 : sty = stx : y = sty
		For a=0 To segs
			x = stx : v = a / Float(segs)
			For b=0 To segs
				u = b / Float(segs)
				VertexNormal(surf,AddVertex(surf,x,y,1,u,v),0,0,1) 
				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,v1,v2 )
				AddTriangle( surf,v0,v2,v3 )
			Next
		Next
		If scnt<4 Then RotateMesh mesh,0,90,0  ; rotate to side
		If scnt=3 Then RotateMesh mesh,90,0,0  ; rotate to top
		If scnt>3 Then RotateMesh mesh,180,0,0 ; rotate to bottom
	Next
	Return mesh
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Colossus (01.11.2009)
Старый 02.11.2009, 09:00   #8
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Эфект от выстрела

Сообщение от NitE Посмотреть сообщение
Graphics3D 800,600,0,0

CentreX=GraphicsWidth()/2
CentreY=GraphicsHeight()/2

; bullet hole & spark sprites
hole=CreateSprite()
ScaleSprite hole,0.25,0.25
SpriteViewMode hole,2
EntityBlend hole,2
EntityTexture hole,Cirtex(32)
HideEntity hole

spark=CreateSprite()
ScaleSprite spark,0.1,0.1
EntityBlend spark,3
HideEntity spark

; make environment

AmbientLight 0,0,0

camera=CreateCamera()
PositionEntity camera, 0,-15,0

room=CreatePivot()

Cube=CreateSegCube(12,room)
EntityPickMode cube,2
EntityColor cube,250,100,50
ScaleMesh cube,40,40,40
FlipMesh cube

Column=CreateCylinder(16,True,room)
EntityPickMode column,2
EntityFX column,4
EntityColor column,150,120,120
PositionMesh column,0,1,0
ScaleMesh Column,6,24,6

sphere=CreateSphere(12,column)
EntityShininess sphere,0.25
EntityColor sphere,200,200,50
EntityPickMode sphere,2
ScaleMesh sphere,-6,-6,-6 ; flip normals
PositionMesh sphere,0,54,0

PositionEntity Column,-30,-40,-30
PositionEntity CopyEntity(column,room),30,-40,-30
PositionEntity CopyEntity(column,room),30,-40,30
PositionEntity CopyEntity(column,room),-30,-40,30

; add a few lights

lpiv=CreatePivot(room)
light=CreateLight(2,lpiv) : PositionEntity light,-30,14,-30
light=CreateLight(2,lpiv) : PositionEntity light,30,14,-30
light=CreateLight(2,lpiv) : PositionEntity light,30,14,30
light=CreateLight(2,lpiv) : PositionEntity light,-30,14,30

; load gunshot sound - your path to this may be different.
shot = LoadSound("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\si\fps\gunshot.wav")

holes  = CreatePivot(room) ; bullet hole list
sparks = CreatePivot(room) ; sparks list

; main ---------------------------------------------------------

MoveMouse CentreX,CentreY

Repeat
	mxs#=MouseXSpeed()
	mys#=MouseYSpeed()

	If MouseDown(2) Then
		MoveEntity camera,0,0,-mys*0.25
	Else
		TurnEntity camera,mys*0.5,0,0 : TurnEntity camera,0,-mxs*0.5,0,True
	EndIf
	
	MoveMouse centrex,centrey
	
	If MouseDown(1) Or KeyHit(57) Then 
		If MilliSecs()>delaytime Then
			delaytime=MilliSecs()+100
			If shot Then PlaySound shot				
			picked=CameraPick(camera, CentreX+Rnd(-10,10),CentreY+Rnd(-10,10))
			If picked<>0 Then
				makehole(hole,holes)
				makespark(spark,sparks)				
			EndIf
		EndIf
	EndIf
	
	updatesparks(sparks)
	
	For i=1 To CountChildren(lpiv)
		light=GetChild(lpiv,i)
		LightRange light,15+Sin((MilliSecs() And $FFFFF)/24+i*90 )*8
	Next
	
	If KeyHit(17) Then wire=Not wire : WireFrame wire
	
	RenderWorld
	Color 255,255,255
	Line centrex-4,centrey,centrex+4,centrey : Line centrex,centrey-4,centrex,centrey+4
	Flip
Until KeyHit(1)

;----------------------------------------------------------------------------------------

Function makehole(hole,holes)
	hole=CopyEntity(hole,holes)
	PositionEntity hole,PickedX(),PickedY(),PickedZ(),True
	AlignToVector hole,-PickedNX(),-PickedNY(),-PickedNZ(),3
	MoveEntity hole,0,0,-0.05
	If CountChildren(holes)>200 Then FreeEntity GetChild(holes,1)
End Function

Function makespark(spark,sparks)
	Local rv#=Rnd(-0.8,0.8)
	spark=CopyEntity(spark,sparks)
	PositionEntity spark,PickedX(),PickedY(),PickedZ(),True
	AlignToVector spark,-PickedNX()+Rv,-PickedNY()+Rv,-PickedNZ()+Rv,3
End Function

Function updatesparks(sparks)
	Local i,life
	For i=1 To CountChildren(sparks)
		spark=GetChild(sparks,i)
		life=EntityName(spark) : life=life+1 : NameEntity spark,life
		MoveEntity spark,0,0,-1 : TranslateEntity spark,0,-life/5.0,0,True
		EntityColor spark,512/life,512/life,512/life
		If life>20 Then FreeEntity spark : i=i-1
	Next
End Function

Function Cirtex(rad)
	texture=CreateTexture(rad,rad)
	SetBuffer TextureBuffer(texture)
	Color 255,255,255 : Rect 0,0,rad,rad,True
	Color 200,200,200 : Oval 0,0,rad,rad,True
	Color 100,100,100 : Oval 12,12,rad-24,rad-24,True
	SetBuffer BackBuffer()
	Return texture
End Function

; Birdies CreateSegCube Function from the archives (slightly modified)
Function CreateSegCube(segs=1,parent=0)
	Local a,b,scnt,stp#=2.0/segs,stx#,sty#,x#,y#,u#,v#,v0,v1,v2
	Local mesh=CreateMesh( parent )
	For scnt=0 To 5
		surf= CreateSurface( mesh )
		stx = -1 : sty = stx : y = sty
		For a=0 To segs
			x = stx : v = a / Float(segs)
			For b=0 To segs
				u = b / Float(segs)
				VertexNormal(surf,AddVertex(surf,x,y,1,u,v),0,0,1) 
				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,v1,v2 )
				AddTriangle( surf,v0,v2,v3 )
			Next
		Next
		If scnt<4 Then RotateMesh mesh,0,90,0  ; rotate to side
		If scnt=3 Then RotateMesh mesh,90,0,0  ; rotate to top
		If scnt>3 Then RotateMesh mesh,180,0,0 ; rotate to bottom
	Next
	Return mesh
End Function
Слушай не сочти меня тупицей но как задать кол-во spark'ов в функции
Function updatesparks(sparks)
Local i,life
For i=1 To CountChildren(sparks)
spark=GetChild(sparks,i)
life=EntityName(spark) : life=life+1 : NameEntity spark,life
MoveEntity spark,0,0,-1 : TranslateEntity spark,0,-life/5.0,0,True
EntityColor spark,512/life,512/life,512/life
If life>20 Then FreeEntity spark : i=i-1
Next
End Function

Ведь я так понял что создаётся всего лишь одна частица от выстрела?
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 02.11.2009, 11:59   #9
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Эфект от выстрела

Понятия не имею, да мне и плевать. Игроку будет всё равно, как там эти координаты находятся, ему важен результат
(Offline)
 
Ответить с цитированием
Старый 02.11.2009, 13:59   #10
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Re: Ответ: Эфект от выстрела

Сообщение от pipns Посмотреть сообщение
Конечно, будет намного проще и эфективней. Я, просто, прочту один пиксель з-буфера и спомощью одной формулы узнаю расстояние и время столконвение пули со стенной. А теперь, не поленись и посмотри, по каким формулам находяться пересечение объектов в твоем блитце!
Чуваг! Не говори о том в чем сам не разбираешься. Твой метод будет на 3 порядка медленнее чем "такой тупом метод блитза". Ибо чистая математика быстрее в разы чем любые операции по чтению пикселей из текстур, з-буферов, стенсиля. Только полные идиоты начитавшиеся недоуроков по OpenGL делают пик объектов через рендер объектов разным цветом и чтение цвета пиксела в заданной точке.
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
Android (02.11.2009), Arles (03.11.2009), Hurrit (02.11.2009), Nex (02.11.2009), tormoz (02.11.2009)
Старый 02.11.2009, 17:52   #11
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Re: Ответ: Эфект от выстрела

Сообщение от pipns Посмотреть сообщение
Конечно, будет намного проще и эфективней. Я, просто, прочту один пиксель з-буфера и спомощью одной формулы узнаю расстояние и время столконвение пули со стенной. А теперь, не поленись и посмотри, по каким формулам находяться пересечение объектов в твоем блитце!
Спасибо, я смеялся 10 минут.
Ты продлил мне жизнь

Расскажи еще что-нить из серии "этот тупой блитц и умный йа"
в жизни так мало юмора...
__________________
(Offline)
 
Ответить с цитированием
Старый 02.11.2009, 17:59   #12
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Эфект от выстрела

	
	If MouseDown(1) Or KeyHit(57) Then 
		If MilliSecs()>delaytime Then
			delaytime=MilliSecs()+100
			If shot Then PlaySound shot				
			picked=CameraPick(camera, CentreX+Rnd(-10,10),CentreY+Rnd(-10,10))
			If picked<>0 Then
				makehole(hole,holes)
				For i=1 To 10
				makespark(spark,sparks)
				Next			
			EndIf
		EndIf
	EndIf
или
Function makespark(spark,sparks,count)
For i=1 To count
	Local rv#=Rnd(-0.8,0.8)
	spark=CopyEntity(spark,sparks)
	PositionEntity spark,PickedX(),PickedY(),PickedZ(),True
	AlignToVector spark,-PickedNX()+Rv,-PickedNY()+Rv,-PickedNZ()+Rv,3
Next
End Function
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать DOT эфект Petrofan 3D-программирование 13 26.08.2009 14:49
Как сделать Bump эфект? Petrofan 3D-программирование 40 22.08.2009 00:23
Помогите c системою выстрела GetMan 3D-программирование 10 23.03.2007 21:20


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


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