我正在尝试使用DirectX 11用C ++编写一个小型3D游戏。这绝对是我第一次尝试仅使用图形API编写游戏。我一直在关注Rastertek.com网站上的教程,直到有关环境照明的教程9为止。
在为玩家实施移动和碰撞后,我增加了游戏区域的大小。这是当我注意到我的问题时:我在游戏区域的墙壁和地板上使用的纹理没有按照我期望的方式进行渲染。
也许您可以说出墙上的线条是如何被奇怪地分解的-我期望它们可以在较大的距离上正确地渲染(例如它们被关闭了)。
不过,对我来说最奇怪的是,可以从远处渲染线条,但只能在围绕场景移动相机且仅在墙壁的某些部分上渲染线条。站着不动会再次破坏纹理。我尝试在视频上捕获这种效果,但是在将其显示在我使用GeForce Experience拍摄的视频中却没有成功。
我尝试使用DirectX提供的许多设置,例如光栅化器或深度缓冲区描述,尝试启用和禁用VSync,抗锯齿和多重采样,尝试使用各向异性过滤而不是线性过滤...但是没有它有任何作用。
我不知道在哪里看,下一步该怎么做。我是否必须接受我的纹理在任何距离下都看起来很糟糕?
您需要为加载的纹理生成Mip贴图。检查DDSTextureLoader.h / CPP和WICTextureLoader.h / CPP这里。
例如,要使用Mip映射加载.dds图像,请使用:
HRESULT DirectX::CreateDDSTextureFromFileEx( ID3D11Device* d3dDevice,
ID3D11DeviceContext* d3dContext,
const wchar_t* fileName,
size_t maxsize,
D3D11_USAGE usage,
unsigned int bindFlags,
unsigned int cpuAccessFlags,
unsigned int miscFlags,
bool forceSRGB,
ID3D11Resource** texture,
ID3D11ShaderResourceView** textureView,
DDS_ALPHA_MODE* alphaMode )
用法示例:
HRESULT hr = DirectX::CreateDDSTextureFromFileEx(device, context, path.c_str(), 0, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET, 0, D3D11_RESOURCE_MISC_GENERATE_MIPS, 0, reinterpret_cast<ID3D11Resource**>(&pTexture), &pSRV);
THROW_IF_FAILED(hr);
注意标志D3D11_BIND_RENDER_TARGET
并D3D11_RESOURCE_MISC_GENERATE_MIPS
使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句