Я новичок в программировании графики, работаю на собственном движке и пытаюсь реализовать объемный рендеринг с усечением.
Идея заключалась в том, чтобы визуализировать несколько плоскостей как вертикальные срезы по усеченной области обзора, а затем использовать мировые координаты этих плоскостей для процедурных объемов.
Рендеринг срезов как 3D-модели и использование позиций вершин в качестве координат мирового пространства отлично работает:
//Vertex Shader
gl_Position = P*V*vec4(vertexPosition_worldspace,1);
coordinates_worldspace = vertexPosition_worldspace;
Результат:
Однако рендеринг срезов в пространстве пирамиды и попытка реконструирования координат мирового пространства дают ожидаемые результаты. Самое близкое, что я получил, было это:
//Vertex Shader
gl_Position = vec4(vertexPosition_worldspace,1);
coordinates_worldspace = (inverse(V) * inverse(P) * vec4(vertexPosition_worldspace,1)).xyz;
Результат:
Я предполагаю, что стандартная матрица проекции каким-то образом избавляется от некоторой важной информации о глубине, но кроме этого я понятия не имею, что я делаю не так и как это исправить.