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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 05.04.2007, 11:38   #1
nJunk
AnyKey`щик
 
Регистрация: 09.10.2006
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Реализация трассера

Подскажите, как лучше реализовать полет трассирующей пули

Вариант с ньютоновской библой:
Есть объект-цилиндр, вылетающий в определенном направлении, с необходимым разбросом, под нужным углом.
Не могу сообразить, как можно прописать коллизию, чтобы при столкновении с "землей", цилиндр не начинал отталкиваться и вертеться, а рандомно улетал в какойм-нибудь случайном направлении.

И еще по ньютону: я так понял, что сделать "ходячий" раг-долл невозможно(?). А если и можно, то наверное проще, при попадании пули в куклу (которая пока еще просто ентити), заменять ее раг-долом. Но тогда невозможно сделать реалистичное поведение уже появившегося раг-долла(он же не знает, как "его" до этого шандорахнуло)
(Offline)
 
Ответить с цитированием
Старый 05.04.2007, 15:52   #2
storm.di
AnyKey`щик
 
Регистрация: 23.01.2007
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

ненужно пулю делать физическим объектом, просто проверяй коллизию и в случае столкновения с землей либо уничтожай ее, либо направляй в рандомном направлении)) и еще добавь пули строку жизнь и после выстрела с каждым циклом отнимай какоето кол- во

также с рэгдолом пока он еще жив, отнимай у него жизни а когда жизнь <= 0 находи точку столкновения и прикладывай силу(импульс) величиной равной жизни твоей пули

Graphics3D 640,480,16,2
SetBuffer BackBuffer()

Const ENEMYCOL=1,BULLETCOL=2, POL=2
Collisions BULLETCOL,ENEMYCOL,2,1
Collisions BULLETCOL,POL,2,2

Player.TPlayer=NewPlayer()
PLayer\piv = CreatePivot()
PLayer\eye = CreateCamera(PLayer\piv)
TranslateEntity PLayer\eye,0,0.9,0
CameraRange PLayer\eye,.1,200
Player\guns=NewGun(Player,300,1.8,2,-1,1)
ShotTimer.TTimers=NewTimer()



PositionEntity PLayer\Piv,0,3,0
EntityRadius PLayer\Piv,.9
EntityType PLayer\Piv,1


tex=CreateDummyTexture(256,256)
ScaleTexture tex,10,10

ground=CreatePlane() ; or the map mesh etc.
EntityTexture ground,tex
EntityType ground,POl

origin_bullet=CreateSprite2()
temp=CopyMesh(origin_bullet)
RotateMesh temp,0,0,90
AddMesh temp,origin_bullet
FreeEntity temp
ScaleMesh origin_bullet,.05,.05,3
EntityFX origin_bullet,1+16
EntityColor origin_bullet,255,200,0
HideEntity origin_bullet

origin_enemy=CreateCube()
ScaleEntity origin_enemy, 1, 3, 1
EntityType origin_enemy,ENEMY_TYPE
HideEntity origin_enemy


For i=1 To 100
NewEnemy(origin_enemy)
Next

sp#=.1 ; main walking speed (not connected with wobbling)
shoe_size#=7.0 ; stepspeed for wobbling camera (eg. 7=running, 4=walking)
head_bang_X#=0.1 ; amount of wobbling
head_bang_Y#=0.1

Collisions 1,2,2,2

While Not KeyHit(1)


mxs#=MouseXSpeed()/4.0
mys#=MouseYSpeed()/4.0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
camxa#=camxa-mxs Mod 360
camya#=camya+mys
If camya<-90 Then camya=-90
If camya>90 Then camya=90
RotateEntity PLayer\Piv,0,camxa,0
RotateEntity PLayer\eye,camya,0,0

If MouseDown(1)
If Player\guns\Nextshot Then
NewShot(origin_bullet,3,Player\guns)
Player\guns\Nextshot=False
End If
Player\guns\Nextshot=TickTimer(ShotTimer,15)
End If

UpdateBullet(Player\guns)

MoveEntity PLayer\eye,0,-.05,0 ; simplified gravity


walking=0



If KeyDown(30) Then: MoveEntity PLayer\Piv,-sp,0,0 : walking=1: EndIf
If KeyDown(32) Then: MoveEntity PLayer\Piv, sp,0,0 : walking=1: EndIf
If KeyDown(17) Then: MoveEntity PLayer\Piv,0,0, sp : walking=1: EndIf
If KeyDown(31) Then: MoveEntity PLayer\Piv,0,0,-sp : walking=1: EndIf


; >>>>>>>>>wobble camera
If walking=1
a1#=(a1#+shoe_size) Mod 360
Else
;a1#=a1#*0.8
EndIf
PositionEntity PLayer\eye,Cos(a1#)*head_bang_X#,Sin(90+a1#*2)*hea d_bang_Y#,0,0
; PositionEntity camera,Cos(a1#)*head_bang_X#,Sin(270+a1#*2)*head_b ang_Y#,0,0 ; or try this one instead!

UpdateWorld
RenderWorld

; >>>>>>>>>control footstep sound
If Sin(90+a1*2)<-.85
If footstep_needed<>0
Color 255,255,255
Text 50,50, "Tap!" ; play a footstep sound here!
footstep_needed=0
EndIf
Else
footstep_needed=1
EndIf




VWait:Flip 0
Wend

End

Function CreateDummyTexture(w,h)
tex=CreateTexture(w,h)
SetBuffer TextureBuffer(tex)
Color 255,255,255
For i=0 To 1000
Color Rand(255),Rand(255),Rand(255)
Line Rand(0,w-1),Rand(0,h-1),Rand(0,w-1),Rand(0,h-1)
Next
SetBuffer BackBuffer()
Return tex
End Function


Type TTimers
Field orig,out
End Type

Function NewTimer.TTimers()
Local time.Ttimers = New Ttimers
Return time
End Function

Function TickTimer(time.TTimers,firerate)
If Not time\out>=(1000/firerate) Then
time\out=MilliSecs()-time\orig
Else
time\orig=MilliSecs()
time\out=0
Return True
End If
Return False
End Function

Type TEnemy
Field entity,life
;.....
End Type

Function NewEnemy(mesh)
newenemy.TEnemy=New TEnemy
newenemy\entity=CopyEntity(mesh)
EntityType newenemy\entity,ENEMYCOL
newenemy\life=255
EntityColor newenemy\entity,255,newenemy\life,newenemy\life
NameEntity newenemy\entity,Handle(newenemy)
PositionEntity newenemy\entity,Rand(-50,50),Rand(50),Rand(-50,50)

End Function


Type TGun
Field range
Field accuracy#
Field mesh
Field nextshot
;.....
End Type

Function NewGun.TGun(player.TPlayer,range,accuracy#,x,y,z)
Gun.TGun=New TGun
gun\range=range
gun\accuracy=accuracy
gun\mesh=CreatePivot(player\eye)
PositionEntity gun\mesh,x,y,z
Return gun
End Function

Type TPlayer
Field piv
Field eye
Field pitch#,yaw#
Field aup,adown
Field Xsens#,Ysens#
Field guns.TGun
Field nextshot
;....
End Type

Function NewPlayer.TPlayer(xsens#=0.5,ysens#=0.5,aup=80,ado wn=-75)
player.TPlayer=New TPlayer
player\eye=CreateCamera()
player\aup=aup
player\adown=adown
player\xsens=xsens
player\ysens=ysens
player\nextshot=True
Return player
End Function

Function CameraCtrl(player.TPlayer)
player\pitch=player\pitch+MYspeed*player\ysens
player\yaw=player\yaw-MXspeed*player\xsens
If player\yaw>359 Then player\yaw=0
If player\yaw<0 Then player\yaw=359
If player\pitch<player\adown Then player\pitch=player\adown
If player\pitch>player\aup Then player\pitch=player\aup
RotateEntity player\eye,player\pitch,player\yaw,0
MoveMouse GHwidth,GHheight
End Function

Type TBullet
Field entity
Field range
Field speed
Field life = 500
End Type

Function NewShot(mesh,speed,gun.TGun)
shot.TBullet=New TBullet
shot\entity=CopyEntity(mesh,gun\mesh)
Entityalpha shot\entity,Rnd(0,1)
EntityType shot\entity,BULLETCOL
EntityParent shot\entity,0
shot\range=gun\range
shot\speed=speed
RotateEntity shot\entity,EntityPitch(shot\entity)+Rnd(-gun\accuracy,gun\accuracy),EntityYaw(shot\entity)+ Rnd(-gun\accuracy,gun\accuracy),0
End Function

Function UpdateBullet(gun.TGun)
Local entity
Local newenemy.TEnemy
For shot.TBullet=Each TBullet
If Not (shot\range<=0) Then
MoveEntity shot\entity,0,0,shot\speed

entity=EntityCollided(shot\entity,POL)
If entity Then
;ScaleMesh shot\entity,.05,.05,.3
RotateEntity shot\entity,Rnd(-90,90),Rnd(-90,90),0

Else
entity=EntityCollided(shot\entity,ENEMYCOL)
If entity Then
newenemy=Object.TEnemy(EntityName(entity))
If Not(newenemy\life)<=0 Then
NewEnemy\life=newenemy\life-Rand(1,30)
EntityColor newenemy\entity,255,newenemy\life,newenemy\life
Else
FreeEntity NewEnemy\entity
Delete newenemy
End If
shot\range=0
Else
shot\range=shot\range-shot\speed
End If
End If
Else
FreeEntity shot\entity
Delete shot
EndIf
Next
End Function

Function CreateSprite2(file$="",flag=1,doubleside=0)
Local mesh=CreateMesh()
Local surf=CreateSurface(mesh)
Local v0=AddVertex (surf,-1,0,2 ,0,1)
Local v1=AddVertex (surf,1,0,2 ,1,1)
Local v2=AddVertex (surf,-1,0,0 ,0,0)
Local v3=AddVertex (surf,1,0,0 ,1,0)
AddTriangle (surf,v0,v1,v3)
AddTriangle (surf,v3,v2,v0)
If file$<>"" Then
Local temp=LoadTexture(file$,flag)
EntityTexture mesh,temp
FreeTexture temp
End If
If doubleside Then EntityFX mesh,16
Return mesh
End Function
(Offline)
 
Ответить с цитированием
Старый 05.04.2007, 15:57   #3
nJunk
AnyKey`щик
 
Регистрация: 09.10.2006
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

ОООО, огромное спасибо, не все еще сообразил, но пример отличный
Ща буду на этом примере смотреть и вписывать туды ньютоновскую дрябедень
(Offline)
 
Ответить с цитированием
Старый 05.04.2007, 16:03   #4
storm.di
AnyKey`щик
 
Регистрация: 23.01.2007
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

пожалуйста)))) как разберешься, пиши дам тебе рэгдол))) и вообще напиши что тебе конкретно нужно)))
(Offline)
 
Ответить с цитированием
Старый 06.04.2007, 02:35   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Реализация трассера

Я бы сделал так: Загружаем энтити (чел), и находим чайлды (части тела), и привязываем к ним физ. примитивы, в цикле они должны двигатся с анимацией (прописать надо). Далее пулю я всётаки сделал бы цилиндриком, но вообще ньютон с быстрой скоростью плохо работает, правдо у ФизиКса есть на то лекартсво (функция, которая борется с проскоками быстрых тел), вот, и при коллизии пули с частью тела перса, уже делал бы обратную зависимость не энтити>физ.примитивы, а рагдолл-перс, и ту силу передал бы в часть тела рагдолла. И всё.
(Offline)
 
Ответить с цитированием
Старый 06.04.2007, 09:59   #6
nJunk
AnyKey`щик
 
Регистрация: 09.10.2006
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

to moka
На словах звучит неплохо)) Код наверное довольно сложный выйдет
Буду пробовать (кстати и у ньютона тоже есть спец обсчет быстрых тел, избежание туннелирования и т.п.)
Короче буду работать в свободное от работы время)). И уж на основе опытов посмотрю, есть ли такая необходимость в физическом движке, можт и без него нормально будет. Хотя в ньютоне мне раг-доллы понравились больно.


PS А что, на самом деле Ньютон работает 5 минут?
вроде не замечал) И ключа никакого не брал. Его и вводить-то некуда
(Offline)
 
Ответить с цитированием
Старый 06.04.2007, 10:06   #7
nJunk
AnyKey`щик
 
Регистрация: 09.10.2006
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

Сообщение от storm.di
пожалуйста)))) как разберешься, пиши дам тебе рэгдол))) и вообще напиши что тебе конкретно нужно)))
Если честно, сам до конца еще не знаю, что мне нужно)))
Пока прощупываю возожности, и свои и языка, отсюда и вопросы))))
(Offline)
 
Ответить с цитированием
Старый 10.04.2007, 16:12   #8
nJunk
AnyKey`щик
 
Регистрация: 09.10.2006
Сообщений: 19
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

Помогите.
Как сделать источник света, который двигался бы вместе с пулей (родителем) и освещал только небольшое пространство объектов и земли вокруг себя прямо в движении (ну то есть нормальный такой светящийся трассер, светящийся в плане - осещащющий).
Разбор всех известных мне примеров ничего не дал. Совсем уже окосел от попыток.
Подкинте листинг плиз.
(Offline)
 
Ответить с цитированием
Старый 15.04.2007, 14:59   #9
TheSorrow
AnyKey`щик
 
Регистрация: 24.02.2007
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

storm.di,А можешь выложить пример с RagDoll'ом плз...
(Offline)
 
Ответить с цитированием
Старый 15.04.2007, 15:28   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Реализация трассера

насчет света:
сожно создать свет
createlught(3) - потипа лампочки и назначить ему
lightrange()-какой надо. !НО, помните, что освещение повертексное! это значит что сцена, точнее свет от пули будет смотреться нормально только тогда, когда полигональность того, на что этот свет будет падать, достаточно высока.
А, да, созданный свет надо припарентить к пуле и забытьь о его существовании.
ПС. Больше 8-ми источников света для сцены не получицца делать, и еще каждый источник света неплохо жрет фпс (по идее должне жрать, я лично не замечал), т.к. освещенность каждой вершины надо перерасчитывать.
(Offline)
 
Ответить с цитированием
Старый 15.04.2007, 15:44   #11
TheSorrow
AnyKey`щик
 
Регистрация: 24.02.2007
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
nJunk,a не проще сделать спрайтом?

storm.di vbmenu_register("postmenu_37321", true); ,так что насчет ragdoll'a?
(Offline)
 
Ответить с цитированием
Старый 17.04.2007, 02:09   #12
storm.di
AnyKey`щик
 
Регистрация: 23.01.2007
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Реализация трассера

TheSorrow, стукнись в асю 4018273
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация леса. Yanez 3D-программирование 17 26.12.2008 11:51
Реализация простой камеры. Данил 3D-программирование 22 18.11.2007 02:20
Реализация диалога. Рудольф 3D-программирование 3 14.07.2007 17:13
Реализация игрока в FPS X-Ranger 3D-программирование 7 06.03.2007 02:09


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


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