在向我的模型添加纹理时出现问题,directx11

问题描述 投票:0回答:1

好的,所以在模型中加载工作正常,但是当我尝试添加纹理或光照时,它们会变得拉伸,我认为它在共享顶点方面存在问题。我试过更改sampler_desc地址以及搞乱输入布局但没有运气。 The results

 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;
}
c++ directx-11
1个回答
0
投票

当我查看你的代码行时,我在这里看到这一行:

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

您将使用DXGI_FORMAT_R32G32B32A32_FLOAT的第三个参数传递给tex coord的input元素描述符。您可能需要检查此标志以查看是否导致您的问题。

通常,纹理坐标是使用简单纹理时的vec2对象,除非您使用的是3D纹理。

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

© www.soinside.com 2019 - 2024. All rights reserved.