Рендеринг в полноценный 3D Render Target за один проход

Используя DirectX 11, я создал трехмерную текстуру тома, которую можно привязать как цель рендеринга:

D3D11_TEXTURE3D_DESC texDesc3d;
// ...
texDesc3d.Usage     = D3D11_USAGE_DEFAULT;
texDesc3d.BindFlags = D3D11_BIND_RENDER_TARGET;

// Create volume texture and views
m_dxDevice->CreateTexture3D(&texDesc3d, nullptr, &m_tex3d);
m_dxDevice->CreateRenderTargetView(m_tex3d, nullptr, &m_tex3dRTView);

Теперь я хотел бы обновить всю цель рендеринга и заполнить ее процедурными данными, сгенерированными в пиксельном шейдере, подобно обновлению цели 2D-рендеринга с помощью «полноэкранного прохода». Все, что мне нужно для генерации данных, это координаты UVW рассматриваемого пикселя.

Для 2D можно построить простой вершинный шейдер, который отображает полноэкранный треугольник:

struct VS_OUTPUT
{
    float4 position : SV_Position;
    float2 uv: TexCoord;
};

// input: three empty vertices
VS_OUTPUT main( uint vertexID : SV_VertexID )
{
    VS_OUTPUT result;
    result.uv = float2((vertexID << 1) & 2, vertexID & 2);
    result.position = float4(result.uv * float2(2.0f, -2.0f) + float2(-1.0f, 1.0f), 0.0f, 1.0f);
    return result;
}

Мне трудно обдумать, как принять этот принцип для 3D. Возможно ли это даже в DirectX 11, или мне нужно визуализировать отдельные фрагменты объемной текстуры, как описаноВот?

Ответы на вопрос(1)

Ваш ответ на вопрос