Рендеринг в полноценный 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, или мне нужно визуализировать отдельные фрагменты объемной текстуры, как описаноВот?