Определение точки от края с вращением - PullRequest
2 голосов
/ 24 апреля 2011

Я пишу скринсейвер с прыгающим шаром (x и y, не отскакивает в Z) в C ++ с использованием OpenGL. Когда этот шар касается краев экрана, на мяче появится небольшой участок повреждения. (Когда шар достаточно поврежден, он взорвется.) Обнаружение части шара, которая может быть повреждена, является легкой частью, когда шар не вращается.

Алгоритм, который я выбрал для этого, заключается в том, что я сохраняю позицию слева, справа, сверху и снизу. Для каждого столкновения мне, очевидно, нужно знать, по какому краю экрана он попадет. До того, как мяч может перевернуться, когда он коснется края экрана, если он коснется левого края экрана, я знаю, что самая левая вершина - это точка на шаре, которая получила удар. Оттуда я получаю все вершины, которые находятся на расстоянии d от этой точки. Мне не нужна фактическая вершина, которая была поражена, только точка на поверхности шара.

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

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

1 Ответ

0 голосов
/ 24 апреля 2011

Если у вас есть углы поворота, вы можете воссоздать матрицу вида модели в своем коде.С помощью этой матрицы вы можете применить вращение к вершинам сетки (просто умножением), а затем найти самую левую (или любую другую) вершину, как вы делали раньше.

В этой статье объясняетсякак построить матрицу вращения с имеющимися у вас углами.

...