2017-12-15 6 views
0

Okay, das Laden in einem Modell funktioniert gut, aber wenn ich versuche, eine Textur oder Beleuchtung hinzuzufügen, werden sie gestreckt, ich denke, es hat Probleme beim Teilen von Vertices. Ich habe versucht, die sampler_desc Adresse zu ändern, sowie mit dem Eingangslayout herumzuspielen, aber kein Glück. The resultsProbleme beim Hinzufügen von Texturen zu meinem Modell, directx11

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; 
} 
+0

Danke für die Änderungen, ich bin neu, wusste nicht, wie man Dinge formatieren –

+0

Sie sind herzlich willkommen für das Format zu beheben. Für Code Einrückung Tabs benutzen 'ctrl + k' –

Antwort

0

Wenn ich an Ihrer Codezeile bin auf der Suche, und ich sehe diese Zeile hier:

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

Sie sind mit einem für die tex coord mit dem Eingangselement Descriptor vorbei dritter Parameter von DXGI_FORMAT_R32G32B32A32_FLOAT. Möglicherweise möchten Sie diese Markierung überprüfen, um zu sehen, ob dies Ihr Problem verursacht.

Normalerweise sind Texturkoordinaten ein vec2-Objekt, wenn Sie einfache Texturen verwenden, es sei denn, Sie verwenden eine 3D-Textur.

Sie können dies in DXGI_FORMAT_R32G32_FLOAT ändern und die entsprechenden Scheitelpunkte [S, T] oder [P, Q] für die Texturdatei angeben. Texturen sind normalerweise Bilder, die im Speicher linear gespeichert werden, aber eine MxN-Struktur darstellen.

+0

Danke, aber ich habe das geändert, nachdem ich dieses haha ​​gepostet. Das gleiche Problem tritt auf. –

Verwandte Themen