簡體   English   中英

為什么我的紋理沒有在我的 DirectX11 游戲中更詳細地渲染?

[英]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_TARGETD3D11_RESOURCE_MISC_GENERATE_MIPS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM