|
31.10.2009, 22:00
|
#1
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Эфект от выстрела
Ну знач попала пуля в стену , декали я добился а эфект пыли разлетающийся не получается. А может быть у кого-то исходник есть? Поделитесь пожалуйста если не жалко.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
31.10.2009, 22:03
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Эфект от выстрела
Партиклы.
По сути всё просто: направление пыли - перпендикуляр к поверхности попадания. Плюс гравитация воздействующая на них. Ничего сложного.
|
(Offline)
|
|
01.11.2009, 08:29
|
#3
|
Разработчик
Регистрация: 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
|
Разработчик
Регистрация: 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
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Эфект от выстрела
А на си плюс плюсе, или на чем ты там работаешь, это наверное делается гораздо красивее, проще и круче?
|
(Offline)
|
|
01.11.2009, 14:48
|
#6
|
Разработчик
Регистрация: 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
|
злобный флудер
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.11.2009, 09:00
|
#8
|
Разработчик
Регистрация: 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
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Эфект от выстрела
Понятия не имею, да мне и плевать. Игроку будет всё равно, как там эти координаты находятся, ему важен результат
|
(Offline)
|
|
02.11.2009, 13:59
|
#10
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Re: Ответ: Эфект от выстрела
Сообщение от pipns
Конечно, будет намного проще и эфективней. Я, просто, прочту один пиксель з-буфера и спомощью одной формулы узнаю расстояние и время столконвение пули со стенной. А теперь, не поленись и посмотри, по каким формулам находяться пересечение объектов в твоем блитце!
|
Чуваг! Не говори о том в чем сам не разбираешься. Твой метод будет на 3 порядка медленнее чем "такой тупом метод блитза". Ибо чистая математика быстрее в разы чем любые операции по чтению пикселей из текстур, з-буферов, стенсиля. Только полные идиоты начитавшиеся недоуроков по OpenGL делают пик объектов через рендер объектов разным цветом и чтение цвета пиксела в заданной точке.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
|
02.11.2009, 17:52
|
#11
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Re: Ответ: Эфект от выстрела
Сообщение от pipns
Конечно, будет намного проще и эфективней. Я, просто, прочту один пиксель з-буфера и спомощью одной формулы узнаю расстояние и время столконвение пули со стенной. А теперь, не поленись и посмотри, по каким формулам находяться пересечение объектов в твоем блитце!
|
Спасибо, я смеялся 10 минут.
Ты продлил мне жизнь
Расскажи еще что-нить из серии "этот тупой блитц и умный йа"
в жизни так мало юмора...
__________________
|
(Offline)
|
|
02.11.2009, 17:59
|
#12
|
злобный флудер
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:38.
|