gpt4 book ai didi

c++ - 在 DirectX 中创建和使用纹理

转载 作者:太空狗 更新时间:2023-10-29 21:00:05 24 4
gpt4 key购买 nike

我正在尝试使用代码创建纹理,将其转换为着色器资源 View ,然后将其应用于平面,但我得到的只是一个黑色方 block 。我尝试使用 msdn 上的示例代码无济于事,还尝试使用 unsigned char 和 float(float 如下所示,因为这是我最终目标需要使用的)。

这是尝试创建纹理的代码:

    bool TerrainClass::CreateTexture(ID3D11Device* _device)
{
ID3D11Texture2D *texture;
D3D11_TEXTURE2D_DESC tdesc;
D3D11_SUBRESOURCE_DATA data;

float *buf = (float *)malloc(m_terrainWidth * m_terrainHeight * 4 * sizeof(float));

for(int i = 0; i < m_terrainWidth * m_terrainHeight * 4; i++)
buf[i] = 1.0f;

data.pSysMem = (void *)buf;
data.SysMemPitch = m_terrainWidth * 4;
data.SysMemSlicePitch = m_terrainWidth * m_terrainHeight * 4;

tdesc.Width = m_terrainWidth;
tdesc.Height = m_terrainHeight;
tdesc.MipLevels = 1;
tdesc.ArraySize = 1;
tdesc.SampleDesc.Count = 1;
tdesc.SampleDesc.Quality = 0;
tdesc.Usage = D3D11_USAGE_DEFAULT;
tdesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;

tdesc.CPUAccessFlags = 0;
tdesc.MiscFlags = 0;

//attempt to create the 2d texture
if(FAILED(_device->CreateTexture2D(&tdesc,&data,&texture)))
return false;

//assign the texture made from fbm to one of the textures for the terrain
if(!(m_Textures->ChangeTexture(_device, texture, 2)))
return false;

delete[] buf;

return true;
}

除非我误解应该是白色纹理。然后将纹理传递到纹理数组到此函数:

bool TextureArrayClass::ChangeTexture(ID3D11Device* _device, ID3D11Texture2D* _texture, int _i)
{
if(FAILED(_device->CreateShaderResourceView(_texture,NULL, &m_textures[_i])))
{
return false;
}
return true;
}

应该将着色器资源 View 设置为我刚刚创建的纹理。所以我完全不知道哪里出了问题,有什么想法吗?

最佳答案

data.SysMemPitch 应该以字节为单位,所以 m_terrainWidth * 4 * sizeof(float)。与 SysMemSlicePitch 相同,但您可以将其设置为零,因为您只需要将其用于纹理立方体、体积或数组。您还应该验证 D3D_FEATURE_LEVEL你正在以你使用它的方式使用 R32G32B32A32 支持运行(我假设是 Sample)。通过查看 this page 验证支持或调用CheckFormatSupport .如果您的硬件不支持您正在使用的模式,请切换到更广泛支持的格式,如 B8G8R8A8_UNORM(并确保更改您的初始数据以匹配格式布局)。

关于c++ - 在 DirectX 中创建和使用纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com