Сап Бибики, по работе пишу реализацию RayCasting'а на c++, графическую часть на opengl пишет другой человек, моя задача написать математически наиболее оптимизированный вариант для свое удобства, чтобы видеть как идет дело - визуализирую с sfml и передать ему. Можно было бы сказать что я закончил, но функция с расчитыванием длинны луча(просто немного удлинняет его пока не упрется в стену, как в жизни, и передает расстояние) , хоть и выдает миллион фпс на плюсах на этом начальном этапе, но далее может начать тормозить, да и очевидно, что это говно можно оптимизировать еще 100500 раз, и напрашивается вопрос? -Как?
Т. к. карта это массив n x m 1 и 0 для стен и пустоты( 1 и 0 это не int, а bool, т. к. занимает всего 1 байт, гораздо пизже ящитаю) то можно было бы как то расчитать количество элементов между двумя элементами по прямой, но как это математически сделать я ума не приложу, это же тупо массив единиц и нулей, какое расстояние... помогите если вы умнее....
КОД НА ПИКЕ
1пик - что из себя представляет карта, переделал в одномерный массив, доступ теперь по tilepmap[x + y*map_x].
"можно было бы как то расчитать количество элементов между двумя элементами по прямой" я конечно имел ввиду, между камерой вида если ее координаты привести к положению в массиве и объектами в поле зрения*
>>234740410 (OP) Ты с фиксированным шагом идёшь, сделай иерархическую структуру данных, чтоб эффективно скипать пустые пространства. Плюс из очевидного напрашивается разнести всю эту работу по нескольким потокам.
>>234741264 хмм, типо можно например не созданные координаты луча искать в массиве и проверять что там, переводить, а проверять элементы массива вокруг камеры и исходя из колличества нулей скипать? Мне щас на ум пришлл типо того: depth+=tile_size*kollichestvopustoti в каждом шаге. Но мне кажется я тебя не так понял, да и это тоже не самое пиздатое из решений
>>234741834 bool может и 4 байта быть. не думаю что тут это повлияет в принципе, в кэш все поместится 100% (если размеры 40 на 40). если больше, то можно пробовать использовать uint8_t и пихать битовую логику
>>234741939 Странно, я вроде подзаебался и все переменные так расположил, чтобы пустых пространств не было, чем тяжелее объект тем он раньше объявлен, все по уму, а тут на тебе. Если логически подумать то несколько bool должны располагаться в стеке подряд и эти 7 пустых бит не будет, неужели компиляторы это не понимают?
>>234741645 > Мне щас на ум пришлл типо того: depth+=tile_size*kollichestvopustoti в каждом шаге Я к тому, что, для начала, почитай про dda-алгоритм, и сделай рейкаст с помощью него. А затем уже этот метод можно улучшить с помощью создания квадродерева из твоего массива, и начинать траверсить локацию с наименее детализованного "корня", при обнаружении столкновения спускаться на более детализованные уровни этого дерева. Тем самым, будут скипаться пустоты.
>>234740410 (OP) >длинны луча >) , >Вместо Си сразу плюсы, а код явно не плюсовый какая-то хуйня на коленке да ещё и на SFML, вся широта которого - это example с гитхаба; да ещё и poll-эвент у них через жопу сделан. Пиздец, а какие требования выдвигают: несколько лет опыта работы, высшее образование, знание С++... Я хуею...
>>234740410 (OP) Поясните мимо гуманитарию, что вообще значит написать лучи на чем-то? Как можно отдельно написать лучи без собственно того, к чему они будут применены? Должна же быть какая-то прикладная часть. Или нет? И если нет, то как человеческим языком вообще упрощенно выглядит алгоритм к подобному? Реально темный лес
>>234742821 Анон стреляет ебалом. Из ебала вылетает луч длиной Х = 0 + шаг. Луч столкнулся с чем-нибудь? Если да, мы узнали расстояние до объекта. Если нет, то прибавляем Х = Х + шаг и проверяем снова. Вот тут для совсем дегенератов нормальный алгос >>234742552
>>234742646 В контексте sfml, poll - это такой механизм, который ловит события, чтобы уместить их в один поток. Ну, например, ты кликнул на мышку, потом нажал клавишу 'q' - sfml поймал каждое твое событие (sfMouseEvent, sfKeyEvent) и последовательно обработал ТОЛЬКО тогда, когда они поступили в пул.
Однако, эта библиотека не даёт тебе права на свои события, а определяет их за тебя. Те же sf*Event: другие события, которые тебе вдруг могут захотеться не предусматриваются - либо лезешь в сорс, либо довольствуешься тем что есть.
>>234740410 (OP) > по работе пишу реализацию RayCasting'а на c++
Чего блять? Это что за дноработа, где такое требуется написать? Так и скажи, что дрочишь сам с собой, нечего выдумывать несуществующую работу.
Кстати - говнокодище лютейшее, ты хоть погугли как это делается классически, никто градусами с тригонометрией в своем уме не будет делать рейкастинг, слишком дорогие операции.
>>234742852 бляяяяя можно тогда и карту сделать как массив vertex'ов и делать не ебучие квадратные стены. ахуенная тема рэй марчинг, прямо сейчас иду переделывать
>>234743937 вот такая вот работа, хоть верь, хоть не верь. Меня через раз заставляют вообще бэк на шарпе писать, так что ебанутости задач тут я уже не удивляюсь. Джунов ебут только так, а ты думал
>>234744185 Да врешь ты. Кому нахрен нужен этот рейкастинг блять? Максимум что я мог бы выдумать в оправдание - задачка джуну в геймдеве, где будет мини игра на нем основанная. Но это уже явно не Российский геймдев с бесконечными его мобильными дрочильнями, а по твоему коду ты не тянешь на джуна в нормальной компании.
Вот и вопрос - зачем пиздишь, а если таки хочешь меня развлечь - скажи нахуя тебе эту задачу дали?
>>234744347 Суть в том, что такая задача нигде абсолютно не нужна. Поэтому возникает большой вопрос - либо ты выдумываешь, либо в твоей конторе совсем какой-то странной хуйней занимаются, что такие дебильные задачи джунам дают.
>>234744244 Да засунь ты себе этот палец в жопу! Почитай книжки по Raycast что ли, а не выдумывай уже давно выведенные законы и правила геометрии, ебя своими потоками сознания об упавшем тебе на голову яблоке окружающих...
>>234744578 > школьник долбаеб зачем-то врет о том, что ему ПО РАБОТЕ дали задачу уровня "написать калькулятор хыыы" > удивляется почему к нему доебались
Так интересно же в какой компании и при каких условиях такое могут попросить написать. Даже в гейдеве такие задачи - нонсенс. Не врал бы с самого начала - другой разговор был бы.
>>234744611 ТАК СКАЖИ ЧТО ЭТО ЗА ПРАВИЛО ТАКОЕ В ГЕОМЕТРИИ - СЧИТАТЬ В ПИКСЕЛЯХ РАСТОЯНИЕ ПО КОЛИЧЕСТВУ ЭЛЕМЕНТОВ МЕЖДУ ДВУМЯ ЭЛЕМЕНТАМИ МАССИВА В РАЗНЫХ РЯДАХ
рейкастинг - тысячу раз вдоль и поперек изведанная тема, и выдумывать неоптимизированные говновелосипеды - признак твоего низкого интеллектуального развития. Ты же не для себя делаешь это, а тебе на РАБОТЕ задачу дали - так и решай её по готовому материалу, тебе не за велосипеды деньги платят.
>>234744788 Никто и не считает шагами этот луч. Гугли DDA линии. Это все давно уже сделано за тебя, мы не понимаем нахуй ты велосипед из своей головы выдумываешь.
Ору. Ну так возьми и скопируй существующее. Тысячи их на гитхабе, нахуй ты на полном серьезе еще и вдумываешься в это? Давно уже на поток должен эти работы для студентиков поставить.
>>234744501 А при чем здесь аутсорс? Ты высираешь и хуйню для геймдева, и в бэкэнде на шарпе пердишь. Ты собираешься быть вечным джуном, или че? У тебя там ебанутые работодатели? Хотя, конечно, как сказал анон >>234743937, видимо, просто сам вкатываешься, а анонам зачем-то пиздишь, зачем-то.
>>234744788 А вот тонкости реализации тебе в книге не напишут, если это не "Raycast на C++ для чайников". Ты в учебнике по алгебре хоть раз код на языке программирования видел?
>>234745262 Для этого книжки читать надо, а не статейки в гугле
Вычисляется расстояние между прямой луча и объектом, сразу же, и сразу же вычисляется расстояние от старта луча до точки с наименьшим расстоянием.
И так пробегаем по всему списку объектов.
С пересечением полигонов посложнее, там надо точку пересечения вычислить, но это тоже решаемая задача.
Итерационно луч увеличивать не надо, это вообще ненужно. Всё решается аналитически простой геометрией за одну итерацию каста луча, в миллионы раз быстрее, чем если луч увеличивать каждый раз за такт.
>>234747218 Ну и список объектов и их вершин с поликами естественно должен быть представлен в виде какой-нибудь ускоряющей иерархической структуры типа BVH.
>>234747548 Ну так это отдельные уникумы, которые в геймдев идут, дрочат плюсы и думают, что им не понадобится математика, физика и т. д. Адекватные люди, которые хотят денег, вкатываются в какой-нибудь веб и в хуй не дуют, не пытаясь потешно дрочить какую-то хуйню для дегенератов, которая не оправдывает усилия, которые на освоения этой хуеты тратятся.
>>234749475 >>234749553 А эти фронтэндеры и бэкэндеры, джаваскриптовые макаки и дрочеры php порой зарабатывают больше, чем какой-то мудак, который дрочит себе там матан, дискру, плюсы и т. д.
Если ты подчистишь все следы прибывания в интернете, как же соцсети и их партнеры будут мимикрировать под тебя перед твоими друзьями и ебать их в жопы? Не все же им кормиться на хайпе от сливов твоего очка в сеть или оргий на фоне твоей квартиры, используя графические элементы из этих видео в дизайне своих товаров, услуг и рекламы к ним, показывая что вот мол какие они остроумные и как тебя подъебали перед мировым зрителем. У них же уже даже разделение на сектора есть на запрещенных порносайтах и они ориентируются на зрителя из этих секторов. Например слили что ты выеб кота в жопу, был хайп но лишь в пределе этого сектора аудитории, и если ты используешь графические элементы из этих видео в своей рекламе, это будет значит, что ты шастаешь по сайтам с зоофилией и на этом тебя уже будут брать или компрометировать если будешь неугоден власти капиталистов.