问题描述
我正在尝试在几何体上实现 ID 值
所以我使用 MRT,第一个渲染目标是颜色纹理,第二个渲染目标是 R32_UINT 格式并存储无符号整数值
这就是我的像素着色器的工作原理。
第一个渲染目标的颜色和第二个渲染目标的 id
struct PS_OUT
{
float4 color : SV_TARGET0;
uint id : SV_TARGET1;
};
....
...
..
.
output.color = tex[0].Sample(splr,tc * tilingFactor) * color;
output.id = 100;
return output;
并且存在从纹理访问 id 值的问题
我使用第二个渲染目标制作了相同的 2DTexture,并根据鼠标位置从第二个渲染目标的纹理中复制了一个像素 (x,y 是鼠标位置)
D3D11_TEXTURE2D_DESC textureDesc;
textureDesc.Width = 1;
textureDesc.Height = 1;
textureDesc.MipLevels = 1;
textureDesc.ArraySize = 1;
textureDesc.Format = (DXGI_FORMAT_R32_UINT);
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
textureDesc.Usage = D3D11_USAGE_STAGING;
textureDesc.BindFlags = 0;
textureDesc.MiscFlags = 0;
gfx.GetDevice()->CreateTexture2D(&textureDesc,nullptr,&pTexTemp);
D3D11_BOX srcBox;
srcBox.left = x;
srcBox.right = x + 1;
srcBox.bottom = y + 1;
srcBox.top = y;
srcBox.front = 0;
srcBox.back = 1;
gfx.GetContext()->CopySubresourceRegion(pTexTemp.Get(),pTexSource.Get(),&srcBox);
D3D11_MAPPED_SUBRESOURCE msr = {};
gfx.GetContext()->Map(pTexTemp.Get(),D3D11_MAP::D3D11_MAP_READ,&msr);
if (x >= 0 && x <= m_width && y >= 0 && y <= m_height)
{
uint32_t* data = reinterpret_cast<uint32_t*>(msr.pData);
}
gfx.GetContext()->Unmap(pTexTemp.Get(),0);
并通过 map,unmap 我访问了一个值并将其转换为 unsigned int *
但我得到了奇怪的值。为了测试,我在渲染目标上分配了 100
当我将鼠标拖到空白处时,我得到了 4294967295 这是 unsigned int 的最大值,我得到了 0 。 (因为什么都没有)
如何从纹理中读取无符号整数值?我的代码有问题吗?
p.s 我试过 CopyResource 方法没有复制一个像素数据但结果是一样的
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)