我试图用C++编写一个小型3D游戏,使用DirectX 11,这绝对是我第一次尝试只使用图形API编写游戏。我一直跟随在Rastertek.com网站上的教程,直到教程9环境照明。
在为玩家实现移动和碰撞之后,我增加了我的游戏区域的大小。这是当我注意到我的问题:我使用的纹理,我的墙壁和地板,我的游戏区域是没有被渲染的方式,我期望他们。
也许你可以知道墙壁上的线条是如何奇怪地被分开的--我原以为它们会在更远的距离上被正确渲染(就像它们是近距离的)。
不过,对我来说,最奇怪的是,的线条可以从很远的地方渲染出来,但只有才能在场景中移动摄像机,而且只能在墙上的某些部分上显示。站着不动又会破坏纹理。我试着在视频中捕捉到这种效果,但我没有成功地将它显示在我使用GeForce体验拍摄的视频中。
我试过使用DirectX提供的一系列设置,比如光栅或深度缓冲区描述,我试图启用和禁用VSync、抗混叠和多采样,我尝试使用各向异性滤波而不是线性滤波.但所有这些都没有任何效果。
我不知道该去哪里看看,下一步该做些什么。我会接受我的纹理在任何距离下看起来都很糟糕吗?
发布于 2020-12-15 18:54:33
您需要为加载的纹理生成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使用的标志。
https://stackoverflow.com/questions/65305907
复制相似问题