Правильное позиционирование спрайтов на фоне режима 7?

#c# #3d #2d #godot

Вопрос:

Я пытаюсь определить преобразование, необходимое для определения положения объектов и проецирования его в то же пространство «режим 7», которое я применяю к текстуре с помощью шейдера холста. Шейдер, на котором я основываю все это, находится здесь. То, что у меня есть прямо сейчас, — это ViewportContainer Видовой экран, который отображает все, что я хочу спроецировать в виде пола, в текстуру видового экрана, чем я применяю к нему вышеупомянутый шейдер.

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

Теперь я хочу сохранить всю игровую логику в 2D и просто спроецировать спрайт объектов в пространство этого режима 7, чтобы он отображался в правильном положении. Размещение объекта в окне просмотра проецирует весь спрайт на пол вместо того, чтобы просто занять правильное положение, чтобы он потерял вид рекламного щита, который я пытаюсь сохранить.

Кто-нибудь знает, как к этому подойти?

Я считаю, что мне нужно воспроизвести этот фрагмент кода здесь и установить положение спрайтов в положение Node2Ds, преобразованное этими двумя матрицами, но преобразования Годо приводят меня к циклу 3×4 вместо 4×4, поэтому я не уверен, как подойти к преобразованию этого, если это даже решение моей проблемы.

         mat[0].w = depth.x ;
        mat[1].w = depth.y ;
        // Turn position into 4d vector
        vec4 pos = vec4(pos, 1f, 1f ) ;
        pos = mat * pos ;
        pos.xy = pos.xy / pos.w ;
        // Apply transformation to position
        float w = pos.w;
        pos.z = 0f ;
        pos.w = 1f ;
        // Apply depth to position
        pos = transform * pos ;