#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 ;