簡體   English   中英

在向我的模型DirectX11添加紋理時遇到問題

[英]Having issues adding textures to my model, 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結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM