[英]Why are my textures not rendered in greater detail in my DirectX11 game?
我正在嘗試使用 DirectX 11 在 C++ 中編寫一個小型 3D 游戲。這絕對是我第一次嘗試僅使用圖形 API 編寫游戲。 我一直在關注Rastertek.com網站上的教程,直到教程 9 用於環境照明。
在為玩家實現移動和碰撞之后,我增加了游戲區域的大小。 這是我注意到我的問題的時候:我用於游戲區牆壁和地板的紋理沒有按照我預期的方式渲染。
也許你可以看出牆上的線條是如何奇怪地斷裂的——我期待它們在更遠的距離上被正確渲染(就像它們很近一樣)。
不過,對我來說最奇怪的是,可以從遠處渲染線條,但只能在圍繞場景移動相機時,並且只能在牆壁的某些部分。 靜止不動再次打破紋理。 我嘗試在視頻上捕捉這種效果,但我沒有成功地將它顯示在我使用 GeForce Experience 拍攝的視頻中。
我嘗試使用 DirectX 提供的一系列設置,例如光柵化器或深度緩沖區描述,我嘗試啟用和禁用垂直同步、抗鋸齒和多重采樣,我嘗試使用各向異性過濾而不是線性過濾......但沒有一個它有任何影響。
我不知道在哪里尋找以及接下來要嘗試什么。 我是否只需要接受我的紋理在任何距離上都會看起來很糟糕?
您需要為加載的紋理生成 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.