3D-иллюзия в 2D-пространстве. Моделирование в C++ ImGui

Идея, обсуждаемая в следующей статье, проста, однако решение может быть немного сложным. Я решаю нарисовать его в 2D-пространстве в виде куба и выполнить вращение вокруг осей X, Y и (Z). Это обычный трюк с иллюзиями, который часто используется в разных областях. Этот подход также может быть применим в игровом компьютерном зрении для получения 3D-эффекта сцен или при рендеринге.

Это, конечно, правда, что у нас нет оси Z в 2D-пространстве, однако наша иллюзия состоит в том, что ось Z перпендикулярна экрану (красная точка, см. ниже, где я изобразил результаты моделирования). Точка также считается точкой отсчета для 8 существующих вершин куба, которые вращаются вокруг.
Решение для идеи (преобразование 3D в 2D) заключается в применении матриц вращения (для X, Y и Z) вокруг точки кроме происхождения. В нашем случае мы вращаем все 8 вершин вокруг центра — красной точки внутри куба.
В компьютерной графике существует общепринятый стандарт, что мы работаем в правосторонней декартовой системе координат.

Реализацию решения я развернул на C++ с визуализацией в ImGui. Знакомство с C++ ImGui и информацию о компиляции и сборке программ вы найдете в одной из моих предыдущих статей.

Исходный код вы найдете на моем GitHub.

Прикладной подход

Введение Статья дает вам некоторое представление о том, как добиться 3D-эффекта (иллюзии) в 2D-пространстве. Как правило, мы должны применять вращения (для всех вершин) вокруг центра куба (красная точка). Воспользуемся формулой. Для каждой координации мы применяем первый перевод обратно в исходное положение, затем поворачиваем вокруг интересующей оси и снова переводим в исходное положение.

Формулу можно выразить, следуя матричному уравнению.

где P’ — положение после операции поворота, R-матрица поворота и T-матрица переноса.

Поскольку мы отображаем наши расчеты imGuit, применима правосторонняя система координат. Тип системы координат влияет на правило вращения, которое необходимо соблюдать. Вращаемся сначала вокруг оси Y, затем вокруг оси X и, наконец, вокруг оси Z.

Симуляторы

Моделирование обсуждаемой реализации можно увидеть ниже.

Также есть флаг МОДЕЛИРОВАНИЕ. Если установлено значение false, вы можете управлять вращением с помощью ползунков.

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