Преобразование из 3D в 2D координат вопрос - PullRequest
1 голос
/ 10 апреля 2011

Я использую OpenGL с c ++ для создания игры. и прямо сейчас, мне интересно, как бы я мог превратить 3D-координаты в 2D-позиции, например: рисование 2D-панели здоровья над головой 3D-модели или что-то в этом направлении XD

так что в любом случае, мне интересно, как бы я мог установить это, где это может быть использовано в SFML. сейчас я ищу какую-то информацию, но я не совсем понимаю методы ...

По сути, я спрашиваю, как мне преобразовать 3D-координаты OpenGL в 2D-координаты на экране с помощью SFML

Мне также интересно, как бы я преобразовал 2D-координаты обратно в 3D, просто я тоже это знаю.

также был бы неплохой пример кода, просто чтобы получить лучшую картинку

спасибо за чтение

-Molma

Ответы [ 4 ]

2 голосов
/ 10 апреля 2011

Обычный подход для рисования баров здоровья и это, как преображается некоторый объем ограничивающего (ограничивающий прямоугольник, ограничивающий сферу и т.д.) или узловую точку в пространстве экрана. Это достаточно просто, поскольку вам нужно только следовать конвейеру преобразования OpenGL:

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y} / 2)

2D в 3D невозможно без предоставления дополнительной информации.

2 голосов
/ 10 апреля 2011

Поскольку вы используете OpenGL, я бы предложил gluProject для отображения из 3D в 2D и gluUnProject для отображения из 2D в 3D (примечание @ комментарий ChrisF на непроектирование).
Хотя я должен признать, что у меня нет реального опыта работы с OpenGL, я просто знаю терминологию того, что вы хотели, и погуглил за это. :)

1 голос
/ 10 апреля 2011

Вам просто нужно сделать то же преобразование, что и openGL для координат.Обычно это включает в себя следующие этапы:

  1. умножить его на матрицу перевода (т.е. матрицу камеры).Это поместит вашу трехмерную координату в ориентированную на экран систему координат

  2. , умножьте ее на матрицу проекции.Это будет проецировать координаты на экран

Предположительно, у вас есть эти матрицы, так как вы должны загрузить их в openGL, но вы также можете запросить их.

1 голос
/ 10 апреля 2011

Этот краткий текст объясняет основы 2D-проекции 3D-координат.Обратный путь немного сложнее, потому что у вас есть только два известных значения (2D-координаты), и этого недостаточно для точного извлечения трех координат.Лучшее, что вы можете получить, - это линия (начинающаяся у зрителя, проходящая через точку на экране и простирающаяся до бесконечности. Точка 3D в основном может находиться где-нибудь за точкой на экране. Но если вы знаете что-то дополнительное, расстояние доКамера или часть положения вещи, из которых вы знаете 2D-координаты, вы можете определить 3 координаты.

...