在我的模型DirectX11中添加纹理的问题



好的,因此在模型中加载正常,但是当我尝试添加纹理或照明时,它们会伸展时,我认为在共享顶点时遇到问题。我尝试更改Sampler_DESC地址,并使用输入布局弄乱,但没有运气。结果

 HRESULT Model::CreateTextureSampler(char* filename) {
    hr = D3DX11CreateShaderResourceViewFromFile(m_pD3DDevice, filename,
        NULL, NULL,
        &m_pTexture0, NULL);
    if (FAILED(hr)) // Dont fail if error is just a warning 
        return hr;
    D3D11_SAMPLER_DESC sampler_desc;
    ZeroMemory(&sampler_desc, sizeof(sampler_desc));
    sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
    sampler_desc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
    sampler_desc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
    sampler_desc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
    sampler_desc.MinLOD = 0;
    sampler_desc.MaxLOD = D3D11_FLOAT32_MAX;
    hr = m_pD3DDevice->CreateSamplerState(&sampler_desc, &m_pSampler0);
    if (FAILED(hr)) // Dont fail if error is just a warning 
        return hr;
}
HRESULT Model::CreateInputLayout()
{
    // Create and set the input layout object 
    D3D11_INPUT_ELEMENT_DESC m_iedesc[] =
    {
        { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "NORMAL", 0,DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }
    };
    hr = m_pD3DDevice->CreateInputLayout(m_iedesc, 4, M_VS->GetBufferPointer(),
        M_VS->GetBufferSize(), &m_pInputLayout);
    if (FAILED(hr)) // Dont fail if error is just a warning 
        return hr;
    m_pImmediateContext->IASetInputLayout(m_pInputLayout);
    m_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
    return S_OK;
}

当我查看您的代码行时,我在这里看到此行:

"TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },

您将传递给具有DXGI_FORMAT_R32G32B32A32_FLOAT的第三个参数的TEX坐标的输入元素描述符。您可能需要检查此标志以查看是否引起了您的问题。

使用简单纹理时,通常是VEC2对象,除非您使用3D纹理。

您可能需要将其更改为DXGI_FORMAT_R32G32_FLOAT,并为纹理文件提供适当的[S,T]或[P,Q]顶点。纹理通常是线性存储在内存中的图像,但代表MXN结构。

最新更新