使用DirectX 11,我创建了一个可以绑定为渲染目标的三维体素纹理:
我现在希望更新整个渲染目标,并用像“全屏通道”一样由像素着色器生成的程序数据填充它。我需要生成数据的所有内容都是有关所涉及像素的UVW坐标。
对于2D,可以构建一个简单的顶点着色器来渲染全屏三角形:
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);
我现在希望更新整个渲染目标,并用像“全屏通道”一样由像素着色器生成的程序数据填充它。我需要生成数据的所有内容都是有关所涉及像素的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中是否可能实现,还是必须像这里描述的那样渲染成体纹理的单独切片?