Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Создание следа "трассирующие пули"

Создание следа "трассирующие пули"

Поделиться

Страницы: 1 2 3 Следующая

tonline_kms65Пользовательwww13 окт. 201717:39#0
Всем здравствуйте.
Подскажите как можно сделать след от пули типа трассера? Я пробовал делать анимированной текстурой, но не то получается. В принципе неплохо но не то. Неуправляемый получается след.

У меня есть трассировка до чего-либо твердого (стена, игрок или любая сущность имеющая физбокс-модель столкновений). То-есть у меня есть начальная точка, есть конечная точка. Соответственно можно получить вектор направления.
А вот как сделать сам след (лучше текстурой, так проще) не могу сообразить.

Я могу, как бы это правильно сказать, запустить саму 3D модель пули, от начальной точки к конечной с определенной скоростью, к ней можно припарентить все что угодно. Но этот вариант мне не нравится.
Сам выстрел в игре происходит так - есть начальная точка, есть конечная, в начальной точке создается эффект выстрела - спрайт музле + дым, в конечной точке создается эффект попадания пули (в зависимости куда попала), т.е. это просто имитация полета пули.
Если я буду запускать модель пули, то скорость её полета будет явно меньше скорости имитированного полета пули.
Что можно придумать?
Я понимаю так, нужна просто отрисовка спрайта(текстуры) в рендомном месте вектора направления выстрела.
Может быть есть другие предложения?
В самом Source-движке это всё есть, но я не могу получить к нему доступ. Исходники есть, но в скомпилированной Dll я не знаю как получить ней доступ. Искать оффсеты - головняк. Проще просто написать по новой.

glasmПользовательwww13 окт. 201717:53#1
получается, что один вектор OX уже есть, значит берём второй вектор OY направленный вверх, и к этим двум векторам можно получить третий перпендикулярный OZ = norm(cross(OX,OY))
далее мы либо строим, либо тянем ранее нарисованные две плоскости OZX и OXY на основе этих векторов, получится такое длинное перекрестие, хорошо видное со всех сторон, кроме самой оси OX
Изображение

Правка: 13 окт. 2017 18:06

boolПостоялецwww13 окт. 201718:22#2
tonline_kms65
можно объемом, капсулами, например.
RikkПостоялецwww13 окт. 201718:57#3
чертим линию отрезок от начала до конца 1-——————————-2
отрезок разбиваем (деление отрезка пополам. на м штука равных частей)
типа цикл . видим первая часть начало.иное не видим. видим вторая часть.иное не видим. видим третья часть.иное не видим. ....видим последняя часть.иное не видим. +одновременно тут в конечной точке создается эффект попадания пули (в зависимости куда попала).
тк там отмеряется начало(выстрел) и конец(вспышка) то наверное есть некий счетчик-таймер. видим и не видим.привязать на интервалы таймера.
coremissionПостоялецwww13 окт. 201719:31#4
Разве это не TrailRenderer?
tonline_kms65Пользовательwww14 окт. 20170:22#5
glasm
> получается, что один вектор OX уже есть, значит берём второй вектор OY
> направленный вверх, и к этим двум векторам можно получить третий
> перпендикулярный OZ = norm(cross(OX,OY))
> далее мы либо строим, либо тянем ранее нарисованные две плоскости OZX и OXY на
> основе этих векторов, получится такое длинное перекрестие, хорошо видное со
> всех сторон, кроме самой оси OX

Интересно. Я не думал об этом. Спрайт действительно расположен в одной плоскости. Если его сделать крестом, то он точно будет виден отовсюду.
Я могу делать не от глаз (это не камера игрока) камера у меня прицеплена к определенному аттачу на самой 3D модели. Выстрел происходит от точки другого аттача (например на стволе пулемета). То-есть я смотрю через камеру как бы со стороны, это если от 1 лица(при управлении этим ENT). 

Rikk
> чертим линию отрезок от начала до конца 1-——————————-2
> отрезок разбиваем (деление отрезка пополам. на м штука равных частей)

Так вот и сам вопрос - как разбить?
По какому принципу? Сам отрезок (вектор) есть. Может просто задать этому вектору другую длину?
Направление его есть. Рендомно изменять начальное положение, задать длину от начального положения. Мне кажется, даже одной отрисовки спрайта хватит, карты не настолько большие. Но это моё предположение.
Кстати сам спрайт с хвостиком я сделал уже, есть статичный, есть анимированый.

Я пока не могу понять как это делается в реальности. Делать прерывание таймером - тоже не пойму как. Какой нибудь пример бы, что-ли. Или более подробное объяснение.
 

Правка: 14 окт. 2017 0:31

tonline_kms65Пользовательwww14 окт. 20170:28#6
bool
> можно объемом, капсулами, например.

Не знаю что такое капсула. Капсула это программное выражение, или это графическое что то? Если графическое то не надо. Программное - посмотреть бы код.
Возможно что это уже какое то созданное ENT (entity - сущность с его заданными свойствами) в каком то игровом движке. Тоже не подойдет.

glasmПользовательwww14 окт. 201712:06#7
tonline_kms65
касаемо отрезка - попробуй смещать текстурные координаты по времени
RikkПостоялецwww14 окт. 201713:59#8
tonline_kms65
> Я пока не могу понять как это делается в реальности.
в реальности это геометрия школа 10класс . деление отрезка пополам. на несколько штук равных частей. по курсу геометрии .
tonline_kms65
> Делать прерывание таймером - тоже не пойму как.
 
отрезок поделили на м штук
массив == штук частей отрезка (1,2,3..м)
{
  for t=1 to k      для (т)= от одного до (катой) секунды
//
там уже есть событие1=начало выстрел , событие2=конец выстрел ,  интервал времени = событие2-событие1=конец-начало= это есть k ,
типа  на третьей секунде выстрел а на шестой секунде конец и тогда
конец-начало=6-3=3сек и тогда к=3 и тогда цикл t=1 to 3
//

for i=1 to m  для (и)=от одного до эм штуков отрезков
    массив(i)=видим and  массив(.все остальные.)=не видим  //  ... геометрия.отрезок.видимое  или геометрия.отрезок.невидимое..  ..отрезок=одна штука из общего количества m ... если м=10 то это 10штуков отрезков..
  выходим из цикла i
 

выходим из цикла t
}   

как то так .наверное.

или забивать железно типа
  скорость пистолетная=300 метр в сек , тогда  l=vt , t=l/v=l/300
  скорость автоматная =500 тогда t=l/500
  скорость пулеметная=900 тогда t=l/900

так как есть отрезок начало-конец то дистанция l известно (модуль вектора . корень квадратный из штуки ( (y2-y1).квадрат.+(x2-x1).квадрат.), пробить обычн таблицу скорость.патрона. ( v ) и из таблицы вызывать нужные значения.

Правка: 14 окт. 2017 14:21

NickulusЗабаненwww14 окт. 201714:58#9
tonline_kms65
> Если я буду запускать модель пули, то скорость её полета будет явно меньше
> скорости имитированного полета пули.
Кого это волнует ? И сделай пули разной длины.
RikkПостоялецwww14 окт. 201715:24#10
Nickulus
> Кого это волнует ?
Допустим там стена . пуля встречается со стеной. тогда если скорость полета менее скорости имитированного то будет

при полёте она встретилась со стеною
в то время как имитированная поражает цель в конце пути.

допустим что стена имеет свойства  стена.бронежилет.

тогда какое событие актуальное здесь-сейчас?
1 встреча со стеной.бронежилет —- тогда цель не поражена и может отвечать активно
2 имитированная поразила цель. тогда цель обезврежена и отвечать не может никак.
 
очевидное влияние на гейм-плей которое здесь каждый третий геймдиз никто не видит (.почему не видит.?.отвечают геймдизы почему они не видят)

очевидно что пп1 отключает пп2
и
пп2 отключает пп1

тк если застряло в стена.бронежилет то отключилось и поразить не может
а если поразило цель тогда стена.бронежилет=ложное(неправда)

——
а раз это никого не волнует и по барабану , то

вопрос персонально для товарища Nickulus

вы лично-персонально  какой бы пункт ввели активно в действие ? пп1 или пп2

отвечать не надо так ———- обычная практика делать так и вот так в общем
отвечать надо так ——— я лично сделал бы пп1 или пп2. лично-персонально.от самого себя.

на вопрос отвечает товарищ Nickulus ,

остальные только комментируют ситуацию не давая явно точного ответа .
если кто пожелает подать ответ —- это надо сделать после ответа товарища Nickulus.

Правка: 14 окт. 2017 15:25

NickulusЗабаненwww14 окт. 201716:01#11
Rikk
> при полёте она встретилась со стеною
> в то время как имитированная поражает цель в конце пути.
???

Пуля всего лишь рисует светящийся след. Все.
Ты же не думаешь, что в реале пуля попадает в цель, когда гаснет трассирующийся след ???

На всякий случай добавлю - нету физ.объекта у пули. Нету.

Правка: 14 окт. 2017 16:03

tonline_kms65Пользовательwww14 окт. 201717:09#12
Nickulus
> Пуля всего лишь рисует светящийся след. Все.
> Ты же не думаешь, что в реале пуля попадает в цель, когда гаснет трассирующийся
> след ???
>
> На всякий случай добавлю - нету физ.объекта у пули. Нету.

В принципе да. Так и есть. Я так и пробовал делать, обтягивал модель пули светящейся текстурой. 
Я могу сделать модель пули как физ. объектом так и просто "референсом" (оболочкой без внутренностей, без модели столкновений), вообще можно просто сам спрайт двигать как модель.
Здесь проблема будет в том что скорость имитации выстрела намного больше мах. допустимой скорости полета реальной модели пули, движек постоянно будет выдавать в консоль ошибку.
И так же верно то, что может возникнуть такая ситуация, трассер попал в игрока (или любое ENT) которое двигалось и попало под траекторию, но конечная точка самого выстрела, раньше получилась где то в стене за ENT. Вот и получится что конечная точка имитации пули заканчивается далеко за той сущностью (ENT) которая в этот момент подвернется под траекторию и на которой закончится полет модели трассера.

Можно конечно представить, что пуля пробила насквозь это самое ENT, и полетела дальше, ударилась в стену после ENT, но уже без трассера, трассер потух в теле ENT -)).
Но может получиться и наоборот. Трассер пролетает через ENT (пробивает его), попадает в стену, но не оставляет никаких следов на стене. Сама же имитация пули естественно застревает в теле ENT.
Как вариант, в принципе пойдет. В "пылу борьбы" никто этого не заметит. Но понятно что это не то.

Я хочу попробовать на каком то участке пути создавать спрайт, и через определенное время убивать его. Такое я еще не пробовал. Этакая имитация трассера. Похоже что все-таки не обойтись без цикла.

Rikk
Я пока осмысливаю написанное. Как соображу - отпишусь. Я просто сразу смотрю - цикл в цикле. Нагружать наверно будет сильно.

Правка: 14 окт. 2017 17:23

tonline_kms65Пользовательwww14 окт. 201717:37#13
Rikk

Смотри, у меня же есть вектор направления имитированного выстрела. Мне нужна, на этом векторе, начальная точка для отрисовки спрайта и конечная. На этом участке создаю спрайт и через, например 0.1 сек, убиваю его.
Я могу, например, получить длину вектора, и исходя из этой длины задать координаты для спрайта.
В цикле можно просто смещать координаты начальной и конечной точек, и в этом же интервале отрисовывать и убивать спрайт.
Вот такой вариант реален?

Правка: 14 окт. 2017 17:42

tonline_kms65Пользовательwww17 окт. 201710:49#14
Rikk
> там уже есть событие1=начало выстрел , событие2=конец выстрел ,  интервал
> времени = событие2-событие1=конец-начало= это есть k ,
> типа  на третьей секунде выстрел а на шестой секунде конец и тогда
> конец-начало=6-3=3сек и тогда к=3 и тогда цикл t=1 to 3

Эти события (событие1=начало выстрел , событие2=конец выстрел), как их определить? Как определить значение этих выражений?
Выражаются в секундах? Не совсем это понимаю. Но интересно уже.
Если можно поподробнее, объясни. Заинтересовало.

Страницы: 1 2 3 Следующая

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр