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, вы можете управлять вращением с помощью ползунков.
Спасибо за чтение.