Я кодирую физический движок для пользовательского движка дум.
Я не ставлю себе целью воспроизвести точное поведение оригинальной гибели.
В думе каждая "вещь" (игрок, монстры и т. Д.) Является ограничивающим прямоугольником, ориентированным по оси.Я хочу сохранить это.
У меня уже есть работающий алгоритм тесселяции для секторов.
У меня уже есть рабочее дерево квадрантов, использующее блоки AABB с треугольниками секторов.
Квадратное дерево вернет список кандидатов на пересечение с заданной AABB (игрок, например).
Что я хочу: алгоритм для проверки того, что треугольник пересекает AABB в 2D.
Что я могу сделать: разбить AABB на два треугольника, затем выполнить проверку пересечения треугольник-треугольник.Что я могу сделать: использовать алгоритм «треугольник против aabb», работающий с 3D, и установить «z» на 0. Что я могу сделать:
1 / проверить, находится ли точка треугольника внутри AABB.
2 / проверьте, находится ли центр AABB внутри треугольника (центр - лучший кандидат, чтобы избежать проблем с округлением).
3 / проверьте, пересекает ли отрезок прямой треугольникасегмент AABB.
Я не хочу этого делать, потому что: я думаю, что, учитывая эту конкретную ситуацию, должен быть более оптимизированный способ сделать это.Это как раз то, с чем часто приходится сталкиваться графическому процессору: найти треугольник внутри области просмотра.Я думаю, что этот вопрос, более чем любой другой вопрос, был решен до чертиков.
Обратите внимание, что ситуация может быть еще проще: я могу перевести все, чтобы AABB начинался с (0, O).Я могу изменить размер всего, поэтому возникает вопрос: «Как определить, пересекается ли треугольник [0,1] [0,1]».
Я уже провел некоторые исследования, но:
1 /большинство результатов для 3D вещей.
2 / это, как ни странно, не часто освещаемый случай.Даже в книге «Кулинарная книга по физике игры» этот вопрос не упоминается.
3 / answers Я нашел, что это сложный, общий способ, с SAT (теорема об оси разделения) или эквивалентный материал.
Мне придется пройти этот тест для большого количества «штук» (игрока, монстра) на каждом кадре для каждого потенциального треугольника, заданного квадродеревом.
Есть еще один вариант, который у меня есть, но я действительно не знаю, с чего начать, или даже если это хорошая идея.Вот краткое изложение того, что у меня на уме.
1 /, поскольку в gpu уже есть все эти треугольники.
2 /, поскольку он массивно распараллелен.
3/ as, пройдя фиксированную стоимость, дополнительных затрат не будет.
=> спросите у gpu.
Но я не знаю, как это сделать.Коммуникационный процессор / GPU будет иметь стоимость, но фиксированную стоимость (примерно 1 или 100 000 штук будет стоить примерно столько же).Я предпочитаю избегать этого решения (но поскольку веб-сайт просит меня высказать идеи, которые у меня были, я об этом говорю).
Обратите внимание, что это мое первое сообщение на этом веб-сайте.Обратите внимание, что английский не мой родной язык.Обратите внимание, что сейчас, прямо здесь, сейчас 3:32 утра (ночью).Обратите внимание, что я не смогу ответить до завтра примерно в тот же час (и это действительно так для каждого дня).
Спасибо за чтение, заранее спасибо за ответы.