Бред

Ответить в тред Ответить в тред
Аноним 16/01/21 Суб 09:42:06 2378806601
image.png 23Кб, 97x83
97x83
image.png 89Кб, 209x223
209x223
image.png 25Кб, 115x92
115x92
Всем добрый день, заебался ломать голову и запрашиваю вашу помощь:

Делаю игрушку, нужно сделать пульки, (я их уже сделал, но коллайдеры у них в виде шариков), сделал условие пересечения пульки и игрока (чтобы проверить, попала ли пулька в игрока).

Сейчас думаю как сделать пульки не в виде шариков, а в виде листочков / нормальных снарядов / полосок (см на скриншот).

Проблема состоит в том, что не могу придумать, как проверить, пересекается ли игрок (круг) и эта йоба-фигура.

Бампаю 10 раз и иду шкодить свою парашу
Аноним 16/01/21 Суб 09:42:27 2378806692
бамп
Аноним 16/01/21 Суб 09:42:43 2378806803
бамп
Аноним 16/01/21 Суб 09:44:19 2378807314
бамп
Аноним 16/01/21 Суб 09:44:24 2378807365
Да
Аноним 16/01/21 Суб 09:45:02 2378807576
бамп
Аноним 16/01/21 Суб 09:46:09 2378807877
Аноним 16/01/21 Суб 09:46:12 2378807918
>>237880660 (OP)
А нагуглить готовый алгоритм пересечения полигонов не вариант?
Аноним 16/01/21 Суб 09:47:37 2378808259
>>237880660 (OP)
Коллизия круга и отрезка -- простая хуйня. Суть в том, что ищешь ближайшую точку на прямой до центра круга. Потом смотришь, попадает ли в отрезок. Потом проверяешь расстояние до центра круга.
Аноним 16/01/21 Суб 09:48:05 23788084310
бамп
Аноним 16/01/21 Суб 09:49:23 23788087911
>>237880825
Если я задам пульку в виде 6ти отрезков, и таких пулек будет около 1к, насколько твой способ окажется эффективным?

каким методом посоветуешь искать ближайшую точку?

всю школьную алгебру забыл к хуям
Аноним 16/01/21 Суб 09:49:46 23788089512
>>237880791
В душе не ебу как это называется поэтому не вариант)
Аноним 16/01/21 Суб 09:50:29 23788091113
1 пуля -- 1 "отрезок", зачем 6.

Либо да, замутить полноценные полигоны по форме твоих этих "пуль" и спиздить где угодно алгоритм коллизий полигонов.
Аноним 16/01/21 Суб 09:51:46 23788095614
>>237880911
пульки могут быть как на скриншоте, хочу иметь возможность задать ее хоть квадратной (хоть в виде ромба)
Аноним 16/01/21 Суб 09:53:22 23788101415
image.png 2Кб, 253x258
253x258
>>237880911
Тогда другой вопрос с игрком, сейчас он у меня его коллайдер в виде круга сделан (как и все впрочем), есть ли сложности в проверке пересечения окружности и полигонов?
Аноним 16/01/21 Суб 09:59:23 23788127616
Аноним 16/01/21 Суб 09:59:37 23788128617
Тебе стоит упростить эту хуйню, считая игрока кругом, а пули -- отрезками "с толщиной".

Для каждой пули вычисляешь ближайшую точку от игрока до прямой линии в основе отрезка этой пули. Проверяешь, попадает ли точка в сам отрезок.

Вычисляешь расстояние между этой точкой и позицией игрока. Условиями на это расстояние можно и учесть размер круга игрока, и сэмулировать ширину пули.
Аноним 16/01/21 Суб 10:03:52 23788148318
image.png 839Кб, 772x722
772x722
>>237881286
Я думал упростить, но в голову приходило сделать несколько отрезков с толщиной / несколько кружков на пульку

Типо так: (оранжевое - отрезок с толщиной, то, что ты предложил)

А в алгоритме проверять пересечение с каждым коллайдером "пульки"
Аноним 16/01/21 Суб 10:05:47 23788155519
image.png 15Кб, 1607x412
1607x412
16/01/21 Суб 10:06:47 23788159120
Сам движок пишешь? На каком языке?
Аноним 16/01/21 Суб 10:07:00 23788159921
Аноним 16/01/21 Суб 10:07:03 23788160222
2021-01-1610-06[...].png 61Кб, 1504x1438
1504x1438
Аноним 16/01/21 Суб 10:07:04 23788160323
А зачем париться если можно не парится. (и вычислительны мощности нагружать) Пусть снаряд будет хитрой формы, а коллайдер у него кирпичом с подходящими длиной шириной высотой.
Аноним 16/01/21 Суб 10:07:24 23788161824
>>237881591
Пишу сам, на жс, могу гитхаб скинуть
Аноним 16/01/21 Суб 10:08:23 23788166625
>>237881483
о, это санто стефано маленькая?
Аноним 16/01/21 Суб 10:11:04 23788178426
>>237881602

Типо так:

У нас пулька задана в виде ромба, есть длина и ширина

Вычисляем так:

Находим близжайшую точку до окружности, а затем проверяем:

1 - Расстояние между отрезком и центром круга
2 - Ширину отрезка в точке (легко найдем, тупо умножив ширину на коефф. который вычисляем при задании длины и ширины (ширина / длина или типо того)) и радиуса круга

Если 1 < 2, то пересекаются

Я все верно понял?

Аноним 16/01/21 Суб 10:11:25 23788180027
>>237881666
Хз, можно ударть молотком проверить))
Аноним 16/01/21 Суб 10:11:28 23788180228
>>237881602
если зелёное расстояние (общее минус сумма синих расстояний) меньше нуля, есть коллизия
Аноним 16/01/21 Суб 10:11:48 23788181329
Аноним 16/01/21 Суб 10:11:54 23788182430
Аноним 16/01/21 Суб 10:12:12 23788183731
Аноним 16/01/21 Суб 10:12:33 23788185232
Аноним 16/01/21 Суб 10:13:53 23788191133
>>237881824
Не зун

>>237881555
>>237881602
Сейчас рассматриваю эти два варианта, какой лучше?
Или совместить и сделать оба?
Аноним 16/01/21 Суб 10:16:20 23788202734
>>237881911
Если пишешь на жс, и у тебя тыщи пуль, надо чтоб быстро считалось. Так что пули аппроксимируй, либо кругами делай, либо отрезками с толщиной, то есть чтоб в три строки кода и десяток матопераций можно было коллизию с игроком считать, ведь тебе надо всю эту тыщу раз 60 в секунду коллизить с игроком.
Аноним 16/01/21 Суб 10:18:44 23788213935
>>237882027
Может тебе даже стоит партиционировать весь массив пуль в пространстве, самое тупое сетку секторов сделать, чтоб не проверять коллижен с теми, что гарантированно далеко.
Аноним 16/01/21 Суб 10:20:39 23788222936
>>237882027
Или какую нибудь очередь заебошить чтобы пули обсчитывались по приоритету те что ближе к игроку.
Аноним 16/01/21 Суб 10:21:19 23788226537
>>237882027
В этом то и проблема.

А еще я эту хуйню решил в браузере сделать, так что у меня в кармане только 1 процессорный поток доступен.

Но варианты с отрезками с толщиной и ромбами выглядят довольно приятно, и не должны занимать убер дохуя времени. Хотя не знаю алгоритм поиска близжайшей точки до точки у отрезка.

>>237882139
Думаю добавить в проверку какое-нибудь условие, чтобы скипать пульки, которые далеко находятся. Пока в голову приходит что то типа (длина + ширина > расстояния до игрока = идти нахуй)
Аноним 16/01/21 Суб 10:21:49 23788228738
>>237881014
Ты в какой сыроварне хоть все это мастеришь?
Аноним 16/01/21 Суб 10:22:22 23788230739
>>237882229
Пока что у меня все это в массиве валяется и проверяется forEach'ем, насчет приоритетной очереди - думаю выйдет дороже перестраивать ее каждый раз, поскольку игрок двигается и пульки тоже, и расстояния каждый раз меняются
Аноним 16/01/21 Суб 10:27:04 23788252740
>>237882307
А хрен его знает. Ибо большинство пуль летят мимо игрока и далеко(больше 3Хразмера пули) от него. Проведи эксперимент и прикинь писю к носу нужна ли приоритезация и с каких количеств пуль и скроростей игроков с пулями.
Аноним 16/01/21 Суб 10:28:28 23788258741
>>237882287
Что ты имеешь ввиду?

>>237882527
Думаю куда проще (и выгодней) окажется добавить условие перед проверкой, которое по времени будет занимать меньше времени самой проверки (писал тут) >>237882265
Аноним 16/01/21 Суб 10:30:07 23788266442
>>237881852
Все может и можно, но куда логичнее и проще было бы узнать нужную информацию в специальном разделе, посвященном этой тематике, а не в борделе по интересам.
Аноним 16/01/21 Суб 10:30:48 23788270243
>>237882587
Если считать расстояние до игрока приблизительное то почему и не сделать возможность приоритета. Пули которые далеко - идут нахуй и внизу очереди. Пули которые близко считаются подробно и находятся вверху очереди.
Аноним 16/01/21 Суб 10:32:37 23788278644
>>237882664
там народа меньше, к тому же мне в падлу искать нужный раздел и пытаться не обосраться с правилами, так что извиняй

>>237882702
А смысл тогда очереди, если можно просто скипать это говно?
Аноним 16/01/21 Суб 10:34:15 23788287345
>>237880660 (OP)
А ты пробовал сначала то же самое, только с простейшими фигурами провернуть?
Аноним 16/01/21 Суб 10:34:56 23788290646
>>237882786
Да, их считать подробно не надо. Но проверять грубым методом тех кто ближе сначала.
Аноним 16/01/21 Суб 10:38:21 23788305447
>>237880660 (OP)
Взял бы готовый данмакуфу и на нем соорудил бы
Аноним 16/01/21 Суб 10:38:38 23788307148
>>237882873
Неа, но тут подкинули идейки как упростить, см выше, так что буду пробовать сделать проще
Аноним 16/01/21 Суб 10:39:37 23788312049
>>237882906
Проблема в том, что нужно определять тех кто ближе, а смысл вообще в том, чтобы проверять тех кто ближе?

Можно точно так же их отсортировать кто ближе, а потом проверять первого, но это такое себе
Аноним 16/01/21 Суб 10:41:10 23788317550
>>237880660 (OP)
Нахуя вы так ебетесь, переизобретая велосипед? Используйте готовые движки и API. Пиздец, каждые два дня говнокод-тред, каждый раз их посылают курить готовое, а они все копротивляются.
Аноним 16/01/21 Суб 10:43:01 23788324151
Аноним 16/01/21 Суб 10:45:42 23788334752
>>237883241
Тогда и заработок в геймдеве тебе не интересен. Проебешь время на всю эту хуйню, а в итоге выйдет кал, затратный по ресурсам.
Аноним 16/01/21 Суб 10:46:51 23788340053
>>237883347
Я делаю это не для работы или денег, мне просто интересно и все.

Считай что это хобби типо рисования или гитары
Аноним 16/01/21 Суб 10:48:03 23788345654
>>237883120
Все пульки придется проверять сразу, тут никак не изьебнешься.

Был бы статичные объекты - можно было бы bvh дерево и аабб боксами ускорить, а так хуй.

Но вообще когда я на xna параше в 10ых делал данмаку, оно легко в 60фпс ~5кк пуль успевало оценивать на бюджетном коре. Так что влепи тупой перебор да попробуй, уверен десятка три тысяч легко вытянет
Аноним 16/01/21 Суб 11:12:04 23788464255
Всем спасибо за идеи, кто знает, как сохранить тред в том виде. что он есть сейчас?
Аноним 16/01/21 Суб 11:21:33 23788513256
Ещё что подумал. Те пули что вылетели за границу мира можно не считать на столкновения, только отрисовывать. Если игрок медленный или карта большая то и те до которых игрок добежать не успеет за время жизни пули.
Аноним 16/01/21 Суб 11:34:37 23788579557
image.png 36Кб, 360x133
360x133
>>237885132
Они у меня сразу же выкидываются из памяти.

Насчет "игрок не успеет добежать" тут хз, поскольку пули по любой траектории могут лететь (В том числе так, как на скриншоте, только сложнее). И как в таком случае просчитывать возможность долететь до пули?
Аноним 16/01/21 Суб 11:38:22 23788597858
Еще могу посоветовать чекать сначала пересечние луча нормализованной прямой отрезка, а уже потом - проверку на коллизию, если расстояние до луча меньше чем какое-то.

Так оттбросится примерно половина необходимых вычислений.


1. проверяешь d
из v0 и v1 получаешь коэффициенты прямой a b c, нормализуешь по (a2 + b2) ии в принципе можно на все время существования прямой длинной пули эти коэффициент и использовать
можно даже вообще наоборот, из а б с порождать отрезок, чтобы а б с были заранее известны и предопределены, один хуй ты вектор в том или ином виде задаешь когда пулю пускаешь

2. если d меньше какого-то порога - проверяешь dot (v0 - v1, v0 - p) и dot (v1 - v0, v1 - p) - если оба скалярных произведения дают косинус больше нуля - фиксируешь коллизию, если больше - нет коллизии

Аноним 16/01/21 Суб 11:38:40 23788599959
oekaki.png 42Кб, 800x800
800x800
Аноним 16/01/21 Суб 11:42:20 23788617860
>>237885978
пули меняют направление движения, в этом случает коэф. пересчитывать?
Аноним 16/01/21 Суб 11:44:01 23788624461
>>237885978
рисунок красивый. но нихуя не понятно
Аноним 16/01/21 Суб 11:44:15 23788625862
>>237886178
>пули меняют направление движения, в этом случает коэф. пересчитывать?

Ты же их задаешь когда пускаешь пулю или меняешь направление, той же матрицей.

Для хитрожопо закрученных отрезковых пуль придется каждый фрейм считать.
Аноним 16/01/21 Суб 11:45:38 23788632163
>>237886258
я на матрицах в вузе спал, можно по проще пожалуйста?
Аноним 16/01/21 Суб 11:47:14 23788640064
oekaki.png 17Кб, 400x400
400x400
Аноним 16/01/21 Суб 11:48:50 23788648165
>>237881911
>не зун
Кидаешь скриншоты из симулятора цирка и при этом не знаешль кто такой Зун лул.

Геометрию в школе не проходил что ли? Если пересекаются линии. значит есть пробитие; если нет - то и нет пробития.
Аноним 16/01/21 Суб 11:49:59 23788653066
>>237886400
Хорошо, что такое dot, w0, w1?
Аноним 16/01/21 Суб 11:50:38 23788655867
Аноним 16/01/21 Суб 11:50:42 23788656568
>>237880660 (OP)
Заебош им всем круглые коллайдеры. Может, у пули-листочка самая смертоносная часть - круглое ядро из обогощённой НЕНАВИСТИ в середине, а острые носик и хвостик - это чисто визуальные эффекты, которые образуются вокруг ЯДРА НЕНАВИСТИ при движении.
Аноним 16/01/21 Суб 11:50:51 23788657169
>>237886481
вопрос в том, как проверить пересечение максимально эффективным способом.

Кто такой зун знаю, я не зун
Аноним 16/01/21 Суб 11:51:17 23788658970
Аноним 16/01/21 Суб 11:52:47 23788667671
>>237886589
Достаточное в принципе, у зуна от еосд до емнип фудзироку все длинные или формовые пули были тупо набором точек.
Аноним 16/01/21 Суб 11:53:29 23788670472
>>237880660 (OP)
>не могу придумать, как проверить, пересекается ли игрок (круг) и эта йоба-фигура.
Так а нахуя? Пускай коллайдеры остаются кругами, в определении столкновений с проджектайлами точность нахуй не нужна.
Аноним 16/01/21 Суб 11:53:34 23788671373
>>237886676
Набор точек, описывающих фигуру или набор кружочков?
Аноним 16/01/21 Суб 11:54:18 23788675074
>>237886704
Ага, и игрок будет выживать когда должен сдохнуть, или сдыхать, когда должен выжить
Аноним 16/01/21 Суб 11:56:05 23788683175
oekaki.png 23Кб, 400x400
400x400
>>237886713
Точка, кружочек получается только на этапе проверки на заданный радиус от точки.

вот например, 4 точки легко описывают форму челена
Аноним 16/01/21 Суб 11:57:23 23788688476
>>237886831
Я думал об этом, см здесь (+ еще другие идейки подкинули, которые тоже простые и будут легче описывать, например, свастоны или длинные пульки)

>>237881483
>>237881555
>>237881602
Аноним 16/01/21 Суб 12:00:04 23788701577
>>237886750
Не будет, у тебя есть игрок, и есть пуля, которая летит к нему ебалом вперёд. Достаточно покрыть коллайдером ебало пули по всей её ширине. Сценарий, при котором у тебя игрок догоняет жопу уже пролетевшей пули и насаживается на неё, маловероятен и костылить какую-то залупу из-за него нецелесообразно.
Аноним 16/01/21 Суб 12:01:04 23788705478
>>237887015
Ты собираешься длинную хрень с начала поста описывать сотней шариков?))

Когда можно описать одним ромбом
Аноним 16/01/21 Суб 12:04:25 23788720379
>>237887054
А, так эта длиная хуйня тоже проджектайлы? Ну так хуярь эллипсы вместо кругов, какие проблемы? Тупо будет поправка радиуса в вычислениях, и всё.
Алсо, нахер ты вообще полез изобретать велосипед, если давно существуют сотни движков с готовыми коллизиями?
Аноним 16/01/21 Суб 12:07:24 23788737880
>>237887203
Насчет эллипсов не думал....в принципе могут подойти, но считать коллизию будет еще заебанней чем с ромбом, так что думаю ромбой и обойдусь

про движок тут -> >>237883241
Аноним 16/01/21 Суб 12:24:56 23788832381
>>237887054
>Когда можно описать одним ромбом

ромб это 4 точки, но процесс вычисления коллизии 4 точек в заданном участке потребует того же времени, сколько несколько десятков шариков.

коллизиия между точкой игрока p0 и точкой пули d0:

1. вычислить расстояние d = p0 - d0
2. сравнить d с хитбоксами пули и игрока
3. запустить солвер

Коллизия между отрезком формируемой точкой b0 b1 и точкой игрока p0

1. вычислить а из b0.x и b1.x
2. вычислить b из b0.y и b1.y
3. вычислить с из a b и b0 и b1
4. вычислить квадрат расстояния d2 между прямой ax+by+c = 0 и точкой p0
5. проверить d2 на порог по хитбоксу и параметры бокса отрезка b0 b1
6. если d2 меньше порогов хитбокса игрока и бокса отрезка, проверка на вхождение в отрезок:
6.1 вычислить вектор w0 = b0 - p0
6.2 вычислить вектор w1 = b1 - p0
6.3 вычислить вектор bb = b0 - b1
6.4 вычислить вектор bb' = b1 - b0
6.5 вычислить скалярное произведение dot(bb, w0)
6.6 вычислить скалярное произведение dot(bb', w1)
6.7 проверить dot первый на > 0
6.8 проверить dot второй на > 0
6.9 если оба > 0 - регистрируем коллизию запускаем солвер


причем сами операции dot и в чеке расстояния до прямой еще всякие квадраты имеют деления которые тоже не очень уж и быстрые, т.е. можно смело раза в 2 увеличивать число операций. соотношение времени проверки точка-точка к точка-грань примерно 1/10 а то и больше.

Т.е. за то же самое время можно успеть проверить несколько десятков точек, причем даже десятком точек вполне можно описать весьма сложную форму, без ввода полигональных пулей
Аноним 16/01/21 Суб 12:31:47 23788869082
image.png 41Кб, 1385x1137
1385x1137
>>237888323
Нахуя такие сложности, не проще ли так:

1) Вычислить расстояние от прямой до игрока
2) Проверить, входит ли точка А в отрезок (можно по одной из координат х или у проверить)
3) проверить расстояние до точки и игрока и сравнить это дело с шириной отрезка (или ромба, там не особо больше сложности прибавляется) плюс радиусом игрока
Аноним 16/01/21 Суб 12:32:23 23788872283
>>237888323
Хотя можно и 100 шариков на длинную хуйню захерачить, никто не запрещает же. Может и правда будет эффективнее, кто знает
Аноним 16/01/21 Суб 12:38:17 23788900884
oekaki.png 22Кб, 400x400
400x400
>>237888690
Вот я это так и раскидал тебе

>1. вычислить расстояние до прямой
это на само деле:
>1. вычислить а из b0.x и b1.x
>2. вычислить b из b0.y и b1.y
>3. вычислить с из a b и b0 и b1
>4. вычислить квадрат расстояния d2 между прямой ax+by+c = 0 и точкой p0
>5. проверить d2 на порог по хитбоксу и параметры бокса отрезка b0 b1

>2) Проверить, входит ли точка А в отрезок (можно по одной из координат х или у проверить)
вычисление координаты точки А - это еще на 5-6 операций (векторных, замечу)

>3) проверить расстояние до точки и игрока и сравнить это дело с шириной отрезка (или ромба, там не особо больше сложности прибавляется) плюс радиусом игрока
ну и еще 4-5 векторных операций и сравнений

со скалярным произведением побыстрее немного, т.к. там не надо находит пересечение прямой и перпендикуляра до прямой с игрока (т.е. точку А), а сразу по скалярному произведению определяем, входит ли точка игрока в грубо говоря область отрезка.

Аноним 16/01/21 Суб 12:42:49 23788924885
>>237887378
С эллипсами кстати норм тема.

Уравнение эллипса известно, там чета типа ellipse(x, y, e0, e1) = 1 e0 e1 - фокусы элипса

Точка игрока p известна.

Тупо постдавляешь p в уравнение эллипса px и py и смотришь результат

если ellipse(p.x, p.y, e0, e1) > 1 - пересечения нет
если ellipse(p.x, p.y, e0, e1) <= 1 - пересечение есть

Только эллпис конечно надо будет повертеть как-то
Аноним 16/01/21 Суб 12:44:27 23788933286
>>237889248
Повертеть == сместить по координатам на время вычислений?
Аноним 16/01/21 Суб 12:45:50 23788940587
image.png 71Кб, 1597x1219
1597x1219
>>237889248
насколько это легче считать?
Аноним 16/01/21 Суб 12:51:34 23788970488
image.png 7Кб, 379x120
379x120
>>237889405
Это подойдет для вычисления "радиуса" эллипса?

Если да, то получится следующее:

Вычисляем радиус, и тупо сравниваем расстояние и радиусы>>237889248
Аноним 16/01/21 Суб 12:53:49 23788982489
image.png 103Кб, 1920x1438
1920x1438
Аноним 16/01/21 Суб 12:56:02 23788994690
image.png 76Кб, 1363x981
1363x981
image.png 29Кб, 416x44
416x44
>>237889824

Угол А задается внутри самой пули, тупо достаем из поля
Угол B вычисляется довольно легко (пик 2)

Угол t = A + B
Аноним 16/01/21 Суб 12:58:44 23789008691
>>237880825
This. С уравнением в формате ax+by+c=0 провести эти вычисления для нескольких линий параллельно - вообще не проблема.
Аноним 16/01/21 Суб 13:00:44 23789019492
>>237890086
Что ты имеешь ввиду под параллельно?

Тут челик расписал, почему этот метод хуета, и его лучше заменить на пару десятков кругов (или я подумал можно даже эллипс прикруить) -> >>237888323 >>237889008
Аноним 16/01/21 Суб 13:03:04 23789032093
>>237880660 (OP)
>Проблема состоит в том, что не могу придумать, как проверить, пересекается ли игрок (круг) и эта йоба-фигура.
Но нахуя? Так никто не делает, либо делаешь коллайдер сложной геометрически пульки из нескольких коллайдеровно это оверинжиниринг, либо просто делаешь коллайдер примерно по размеру пули, потом подгоняешь на этапе тестирования
Аноним 16/01/21 Суб 13:03:25 23789032894
>>237890194
>Что ты имеешь ввиду под параллельно?
Я имел в виду - длинный прожектайл описать 4, 6, 8 линиями.

Для каждой линии пересечение с кругом считается элементарно. Современные компиляторы могут оптимизировать это так, что обсчёт для 8 линий можно сразу выполнить параллельно.
Аноним 16/01/21 Суб 13:04:53 23789041395
Аноним 16/01/21 Суб 13:05:23 23789044896
Аноним 16/01/21 Суб 13:15:24 23789108297
>>237890413
Переводишь уравнение линии в форму ax + by + c = 0. Нормализуешь коэффициенты.
Уравнение перпендикуляра к линии - -ax + by + c = 0, подставляя x и y игрока, находишь точку пересечения перпендикуляра с отрезком, измеряешь длину, смотришь, находится ли точка пересечения в пределах отрезка, если длина меньше радиуса игрока и точка в пределах - то есть коллизия.
Аноним 16/01/21 Суб 13:34:11 23789229898
>>237891082
Посмтрю, щас проверю несколько вариантов, и затесщу какой лучше, если тред не умрет - результаты выложу сюда, если умрет - создам новый с результатами с сылкой на этот тред
Аноним 16/01/21 Суб 13:35:08 23789236999
>>237883054
Вот этот дело говорит. Иногда бывает довольно интересно/полезно разобрать игру до винтика и понять принцип ее строения.
Аноним 16/01/21 Суб 13:35:55 237892425100
Аноним 16/01/21 Суб 13:36:33 237892472101
>>237892425
Да, с наклоном, проблемы?
Аноним 16/01/21 Суб 13:37:06 237892514102
>>237890328
> Современные компиляторы могут оптимизировать это так, что обсчёт для 8 линий можно сразу выполнить параллельно.
Ты походу пропустил

>>237882265
>А еще я эту хуйню решил в браузере сделать, так что у меня в кармане только 1 процессорный поток доступен.
Он хочет на жс наговнокодить.
Аноним 16/01/21 Суб 13:37:42 237892553103
>>237892472
Нет, с наклоном как уточнение имелось в виду, а не а чем-то.
Как он элипс с наклоном задаст?
Аноним 16/01/21 Суб 13:39:24 237892672104
>>237892553
Эллипс без наклона + угол поворота в самой пульке.

В качестве рисовки на экран может использоваться текстурка, опять же повернутая на тот же угол поворота.
Аноним 16/01/21 Суб 13:42:18 237892846105
oekaki.png 12Кб, 400x400
400x400
>>237892672
>Эллипс без наклона + угол поворота в самой пульке.
Без наклона он будет вот так с таким уровнением.

Аноним 16/01/21 Суб 13:46:38 237893096106
Аноним 16/01/21 Суб 13:51:37 237893392107
>>237893096
Норм, а то я начал думать что сам где то обосрался.
И это странно, что ты ко мне обращаешься как к "нему".
Я ОП, тут омжно как то помечаться, что я ОП? Чтобы никто не думал, что я вообще левый чел
Аноним 16/01/21 Суб 13:54:20 237893539108
>>237891082
А, блин, я проебался.
Уравнение перпендикуляра - -bx + ay + c = 0
Аноним 16/01/21 Суб 13:54:44 237893566109
>>237893392
Не, я долго в >>237889946 пялился и пытался понять, что за А и B и откуда выбран отсчет для них посередке, недопер что зеленая горизонтальная линия - она абсцисса
Аноним 16/01/21 Суб 13:56:39 237893686110
>>237893566
Это просто я кривовато нарисовал))
Художник из меня впрочем как и гейдевелопер
Аноним 16/01/21 Суб 13:58:59 237893832111
Не ну вобще реально для эллипса решение выглядит весьма элегантно всякие длинные пули делать....

Я бы разве что убрал корень из >>237889824 можно сравнивать чисто квадрат расстояния, минус затратная операция
Аноним 16/01/21 Суб 14:02:10 237894034112
image.png 58Кб, 1515x1169
1515x1169
Аноним 16/01/21 Суб 14:03:38 237894121113
>>237894034
Если подводных нет, то это довольно хорошее решение, т.к. избавляемся от корня при подсчете в 'B' и в 'C', т.к. они изначально как сумма квадратов по х и у высчитываются, а радиус (то есть 'A') вовзодим в квадрат
Аноним 16/01/21 Суб 14:05:46 237894264114
>>237894034
И тут и тут >>237889824 rэ получается можно квадратом оставить

И тупо сравнивать квадраты
Аноним 16/01/21 Суб 14:06:29 237894306115
>>237894264
Должно сработать, щас попробую
Аноним 16/01/21 Суб 14:18:29 237895061116
image.png 149Кб, 1423x844
1423x844
Шарики кстати при количестве > 2к начинают подлагивать
Аноним 16/01/21 Суб 14:38:48 237896344117
>>237895061
хотя оно по большей части сосет во время рисовки, а не выполнения логики как таковой
Аноним 16/01/21 Суб 14:41:13 237896491118
>>237896344
ты хоть видеокартой рисуешь и вебглом или какую-то хуйню творишь?
Аноним 16/01/21 Суб 14:41:44 237896529119
Аноним 16/01/21 Суб 14:46:38 237896876120
>>237896491
Я вот щас сижу и думаю, может мне это все к хуям на c++ переписать?

(подводный камень в виде того что я с++ не знаю)
Аноним 16/01/21 Суб 14:56:22 237897550121
>>237896876
лол

но вообще хуйня какая-то учи вебгл, иначе так и будет тормозить
Аноним 16/01/21 Суб 14:59:59 237897795122
>>237897550
Я и собираюсь через вебгл все это делать, просто щас пока логику пишу, ебашу через канвас нарисуй хуй.

Даже делал нормаль на сиськи с фонариком (могу подыскать кста, если хочешь).

Когда перепишу на вебгл, все должно пофиксится? Разве нарисуйХуй не использует его под капотом?
Аноним 16/01/21 Суб 15:07:05 237898327123
>>237894034
Логичнее систему координат перенести в центр эллипса тогда уж - круг тогда не придётся поворачивать.

А так уравнение пересечения круга и эллипса под произвольным углом довольно сложное получается.
Аноним 16/01/21 Суб 15:20:52 237899381124
oekaki.png 33Кб, 400x400
400x400
>>237898327
да он вообще ничего не поворачивает.

просто находит параметр, из него считает радиус эллипса, а дистанцию от центра эллипса до игрока известно, и тупо сравнивает сумму rэ(t)+rp с дистанцией

параметр эллипсе легко вычисляется - наклон эллипса прописан просто в поле эллипса, ничего не надо вертеть, а второй угол - от абсциссы мира и центра эллипса считается.
Аноним 16/01/21 Суб 15:24:31 237899689125
>>237899381
В любом случае, там используются синусы/косинусы.
В случае с аппроксиммацией линиями - там только умножение и деление, должно быть быстрее.
Аноним 16/01/21 Суб 15:51:56 237901591126
>>237899689
Ну 2 синуса-косинуса при вычислении rэ через параметр (причем давно уже есть быстрые синусы и косинусы, ему хватит и ограниченной точности зато быстра) и один атангенс, ну или акосинус от дота, ну или дот

один хрен у него в графику упор, пусть сначала учиться красиво и быстро рисовать миллион пулей, со спецэффектами, постэффектами, триде на фоне, как у зуна, запилит менеджер состояний игры, а потом уже пулькам логику прикручивать
Аноним 16/01/21 Суб 15:53:27 237901704127
>>237884642
Найди его просто потом на архиваче.
Аноним 16/01/21 Суб 15:55:55 237901854128
>>237899689
Если тригонометрия дорогая, посчитай её в LUTы. Или ты для некроконсолей пилишь?
Аноним 16/01/21 Суб 15:57:54 237901977129
>>237881483
Это игра или симуляция боевых ранений?
Аноним 16/01/21 Суб 15:58:28 237902023130
Аноним 16/01/21 Суб 15:58:51 237902048131
Аноним 16/01/21 Суб 16:00:59 237902165132
>>237902023
Заданная таблица синусов косинусов тангенсов атангесов акосинусов асинусов чтобы не ебаться каждый раз с тригонометрией а тупо доставать циферки из памяти.
Аноним 16/01/21 Суб 16:02:50 237902281133
>>237902023
LookUp Table. Считаешь, к примеру, 65535 значений sin, записываешь их в массив - у тебя есть sin и cos за пару операций.
>>237902048
Тогда ты переусложняешь.
Аноним 16/01/21 Суб 16:12:11 237902886134
Аноним 16/01/21 Суб 16:13:29 237902984135
Если делаешь клон тохи, можешь сделать отдельный байт-буффер размером с игровое поле и писать в него шаблоны объектов, с которыми нужно считать коллизии. Тогда для проверки на столкновение просто проверяешь, есть ли после смены координат игровой окружности в этом байт-буффере что-нибудь. Так у тебя будут насколько угодно сложные объекты с точностью до пикселя.
Аноним 16/01/21 Суб 16:14:07 237903023136
>>237902886
Кривые Безье довольно дорогие.
Аноним 16/01/21 Суб 16:15:08 237903101137
>>237882229
Так надо сначала вычислить какие ближе тогда. А чтобы по сетке делать надо вычислить какая пуля в каком секторе.
Аноним 16/01/21 Суб 16:16:37 237903220138
>>237903023
Тогда как все делают - прямоугольники и круги лепишь вокруг пули чтобы примерно подходило по форме и все. Алгоритмы коллизии с кругами и прямоугольниками дешевые.
Аноним 16/01/21 Суб 16:18:15 237903314139
Аноним 16/01/21 Суб 16:20:49 237903485140
>>237902984
Кстати да, с современными компами можно коллизию хоть в 4к тупо попиксельно проверять, щас не 98 год уже. С другой стороны это решение очень грязное.
Аноним 16/01/21 Суб 16:22:52 237903613141
>>237902984
>>237903485

Вот именно, насколько это затратно будет тупо каждый кадр обновлять массив коллизий для каждого пикселя на поле?
Аноним 16/01/21 Суб 16:24:40 237903723142
>>237880660 (OP)
Уравнения по исследованию функций на общие точки, не?
короче по простому попробуй загуглить пересечение графиков функции
Аноним 16/01/21 Суб 16:27:09 237903844143
>>237903485
>>237903613
Почему грязное? Это просто бессмысленно для таких одинаковых объектов как пули.
С современными компами и кривые Безье будут ок, их раза в три дороже чем прямые считать.
У тебя это распараллеливается как-нибудь?
Аноним 16/01/21 Суб 16:27:27 237903865144
>>237903723
Слишком сложно, тут уже подсказали и я сам решил рисовать коллайдеры через простые фигуры, с помощью которых легко считать пересечения, (эллипсы / отрезки с "шириной")
Аноним 16/01/21 Суб 16:28:02 237903906145
>>237903844
Нет, не распаралелливается, один процессорный поток, ебашу на JS в браузере
Аноним 16/01/21 Суб 16:30:10 237904008146
>>237903865
И как ты это описать собрался?
Аноним 16/01/21 Суб 16:32:08 237904129147
Аноним 16/01/21 Суб 16:33:32 237904202148
>>237904008
синусы и косинусы можно закинуть и в LookUp Table, состоящую например из 20 значений для разных углов
Аноним 16/01/21 Суб 16:33:47 237904226149
Аноним 16/01/21 Суб 16:33:53 237904230150
>>237904129
Чето муть какая то, мог бы просто сделать проверку на совпадения координат
Аноним 16/01/21 Суб 16:35:22 237904323151
>>237880660 (OP)
>е могу придумать, как проверить, пересекается ли игрок (круг) и эта йоба-фигура.
Мы то откуда знаем?
Аноним 16/01/21 Суб 16:35:28 237904331152
>>237904230
Записывать в буффер "опасные" точки, а потом проверять находится ли в них игрок?

Думал но это скорее всего будет слишком затратно каждый кадр записывать данные в буффер
Аноним 16/01/21 Суб 16:35:59 237904365153
>>237903906
С OpenGL/GLSL такое делают.

Если всё-таки функционально заданные пули выбираешь, я бы все проверял сначала на пересечение окружности игрока с координатами пуль, если пересечение есть, уже просчитывал бы пересечение геометрии этой пули с игроком.
Аноним 16/01/21 Суб 16:36:27 237904403154
>>237880660 (OP)
Эти все просчеты уже есть во все API
там по масками или спрайтам коллизию просчитывает. Ты в чем игру делаешь?
Аноним 16/01/21 Суб 16:37:47 237904492155
>>237904331
Байтаеб чтоли? У тебя и так координаты положения тел будут
Аноним 16/01/21 Суб 16:42:01 237904746156
>>237904365
Т.е. ты предлагаешь через GLSL заполнять буффер, а затем проверять все это дело в этом буффере?

Можешь тогда подсказать, как таким методом работать. На GLSL Только 3д сиськи делал и все

>>237904492
Координаты есть. Есть форма. Нужно проверить пересечение. Я конечно могу просто взять и проверять каждый пиксель, но это будет слишком неоптимизированно
Аноним 16/01/21 Суб 16:47:50 237905129157
>>237904746
> Я конечно могу просто взять и проверять каждый пиксель
Ебнутый что ли, у тебя есть переменная которая отвечает за положение по xy если это 2д, которая меняется
вот ты и сравниваешь эти переменные, чтобы объект не рассматривался как точка прикручиваешь уравнение нужной фигуры
Аноним 16/01/21 Суб 16:49:00 237905196158
Аноним 16/01/21 Суб 16:49:26 237905222159
>>237904746
>через GLSL заполнять буффер, а затем проверять все это дело в этом буффере?
Я так понял, тебе зачем-то нужны именно функционально описанные хитбоксы, поэтому нет, я предлагаю считать сначала точки и если точки попадают в окружность, просчитывать для них геометрию.
Аноним 16/01/21 Суб 16:51:12 237905329160
>>237905222
Я собираюсь сделать хитбоксы в виде кружков / эллипсов.
И думаю как наиболее эффективно их проверять
Аноним 16/01/21 Суб 16:55:59 237905637161
>>237905329
Тогда какие ещё вопросы?
Аноним 16/01/21 Суб 16:58:07 237905757162
>>237905196
Дрочись дальше через костыли. вместо того чтобы понимать код
Аноним 16/01/21 Суб 17:29:11 237907839163
>>237905757
Я не представляю как можно эффективно посчитать пересечение 2000 функций с игроком-кружком
Аноним 16/01/21 Суб 17:57:44 237909771164
Аноним 16/01/21 Суб 18:34:48 237912072165
>>237907839
Про распараллеливание средствами OpenGL/GLSL тебе уже сказали.
Уравнение окружности ты знаешь. Эллипс отличается от окружности в данном контексте тем, что у него, грубо говоря, два радиуса (фокальные точки не нужны, потому что мы не карандашом и нитками его собрались чертить). Проверяешь сначала, входит ли координата пули в окружность игрока, для этого берёшь радиус окружности игрока + максимальный радиус эллипса пули. На этом этапе ты проверил столкновение двух окружностей. Если столкновение окружностей есть, надо проверить, есть ли столкновение твоей окружности теперь уже с эллипсом. Для этого тебе понадобится понять, как зависит изменение радиуса эллипса с углом его поворота. Эта зависимость - sin.
Аноним 16/01/21 Суб 19:03:24 237914096166
>>237912072
Довольно не плохо

Осталось только понять, как распаралелить средствами OpenGL / GLSL
Аноним 16/01/21 Суб 19:04:32 237914180167
>>237912072
И что именно паралеллить?
Вычисления попадания в коллайдер?
Аноним 16/01/21 Суб 19:16:39 237914942168
>>237914096
GLSL довольно простой, если нет религинозной непереносимости.
>>237914180
На GLSL тебе придётся написать, собственно, проверку коллизий, поскольку объектов дохрена. Вообще, можно всю игру на нём написать, JS использовать только как фронтенд и для чтения ввода.
Аноним 16/01/21 Суб 19:20:27 237915155169
>>237914942
Я на глсл писать нормали для сисек, так что с ним на уровне дошкольника знаком (использова Three.js, если не ошибаюсь)

Вот только не пойму как именно сделать првоерку коллизий. Разве видеокарта не умеет только рисовать на экране?

А вообще примерно представляю как это будет работать:

Я закидываю в видеокарту массивы точек и радиусов, а получаю в ответ массив булинов? Если все булины = false, то столкновений не произошло, а если есть true, значит под индексами с true произошло столкновение.

Но как получить в ответ массив булинов?
Аноним 16/01/21 Суб 19:35:27 237916100170
>>237915155
>Разве видеокарта не умеет только рисовать на экране?
Серьёзно? Про майнинг биткоинов на видеокартах думаешь шутка? У OpenGL пиздец какой хитровыебанный пайплайн, на одних только шейдерах можно практически всё что угодно считать, но обычно для векторизации (распараллеливания) используют.

Сложно сказать, какую часть лучше пилить на шейдерах и какую на JS по твоему описанию задачи. Можно координаты всех объектов в VBO хранить, средствами OpenGL же их обрабатывать и даже рендерить (видеокартой рендерить, охуеть, да? до чего только техника не дойдёт). Описанный тобой способ имеет смысл, если ты ещё какие-то хиртые нераспараллеливаемые операции собираешься производить, но тогда не зная, что это, я не могу сказать, как лучше.

Зачем тебе целый массив Булевых значений? В любом случае, если ты из JS будешь шмалять GLSL'ем, уверен, есть библиотеки с документацией.
Аноним 16/01/21 Суб 20:11:03 237918371171
>>237916100
Понял, все равно у меня пиздец (на скрине выше фпс падает после 2к+ пуль видно, что на логику игры затрачивается порядка 100 мс, то есть 10% от всего времени, так что думаю сейчас занятся рисовкой через glsl а не canvas.нарисуйХуй().

Можешь подсказать годные туториалы / документацию по glsl, чтобы не обосраться?
Аноним 16/01/21 Суб 20:21:09 237919005172
>>237918371
Не могу. Я пытался в него вкатываться, но плевался и дропал каждый раз.
Аноним 16/01/21 Суб 20:48:03 237920561173
>>237919005
Понял, спасибо за совети енивей, а я попробую вкатится.

А так знаешь, настроение такое, что хуй знает чего хочу от жизни.
Вроже бы как геймдев завлекает, нравится писать код и задачки разные решать (поэтому собственно и пишу игрушку), но с другой стороны больше веб знаю, чем тот же геймдев. И хер его знает, то ли идти полностью в геймдев, то ли ебашить веб после того как игрушку сделаю (думаю для резюме будет неплохим бонусом вкупе с различными сайтиками).

А еще тетя шлюха ебаная меня сегодня с нихуя в чс кинула. рот ее ебал. (не еот (мб и еот но ток ненамного)).

Ладно, пойду спать, спасибо за совету, завтра буду в архиве перечитывать что тут писали. Удачи тебе!
Настройки X
Ответить в тред X
15000
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов