在我的模型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结构。
相关文章:
- Qt OpenGL 渲染到纹理性能问题
- SFML 纹理使用问题
- Opengl问题:很可能是简单的纹理问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- 如何在 Opengl 中使用多个纹理解决此问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 呈现纹理D3D11的问题
- 着色器和纹理坐标问题
- 在我的模型DirectX11中添加纹理的问题
- SDL2-从Surface(屏幕快照)创建纹理的问题
- 我的深度纹理有什么问题?
- Qt OpenGL - 纹理透明度问题
- OpenGL 3D 纹理问题
- 使用纹理,法线和索引列表从VBO绘制OpenGL对象的问题
- C++返回 sf::纹理时遇到问题
- 土壤,NPOT纹理问题
- 渲染到纹理问题
- 重复纹理问题
- 创建1像素的纹理问题
- OpenGL和QtQuick纹理问题