![](/img/trans.png)
[英]Why are my textures not rendered in greater detail in my DirectX11 game?
[英]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.