所以我试图渲染一个小的等距瓷砖地图,然后用一块瓷砖开始感受这个东西。但是我遇到了一个问题,如果瓷砖变得太小而且#34; (实际上64x64与纹理的大小完全相同)它会变成锯齿状的线条,即使纹理本身看起来还不错。奇怪的是,如果我在Visual Studio中使用图形调试器,它似乎也是正确的。这是一张图片,以更好地形象化我的意思:
左图是普通窗口内渲染帧的一部分。右侧部分是图形调试工具的捕获帧。如您所见,捕获帧的显示看起来完全正常。如果我按照某个因素缩放此图块,窗口内的正常渲染也会开始变好。有什么想法可能会发生吗?如果有任何帮助,这是原始纹理。
还有一点需要注意:我创建了"纹理"通过在设置相机时在混合器中渲染对象,如下所示:http://flarerpg.org/tutorials/isometric_tiles/(正如我的理解,这应该是在DirectX中渲染它的一种好方法)
编辑:这是我的Sampler Desc。我正在使用DirectXTK(https://github.com/Microsoft/DirectXTK)提供的CreateDDSTextureFromFile
方法创建纹理。
CreateDDSTextureFromFile(gfx->GetGraphicsDevice()->GetDevice(), L"resources/house_tile.DDS", nullptr, shaderResource.GetAddressOf())
g_defaultSamplerDesc.Filter = D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR;
g_defaultSamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
g_defaultSamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
g_defaultSamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
g_defaultSamplerDesc.MipLODBias = 0.0f;
g_defaultSamplerDesc.MaxAnisotropy = 1;
g_defaultSamplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS;
g_defaultSamplerDesc.BorderColor[0] = 0;
g_defaultSamplerDesc.BorderColor[1] = 0;
g_defaultSamplerDesc.BorderColor[2] = 0;
g_defaultSamplerDesc.BorderColor[3] = 0;
g_defaultSamplerDesc.MinLOD = 0;
g_defaultSamplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
编辑2:我检查了.dds文件,只有1个Mip-Level。这也是DirectXTK方法正在使用的纹理描述。对我来说似乎很好:
Width 64 unsigned int
Height 64 unsigned int
MipLevels 1 unsigned int
ArraySize 1 unsigned int
Format DXGI_FORMAT_B8G8R8A8_UNORM (87) DXGI_FORMAT
+ SampleDesc {Count=1 Quality=0 } DXGI_SAMPLE_DESC
Usage D3D11_USAGE_DEFAULT (0) D3D11_USAGE
BindFlags 8 unsigned int
CPUAccessFlags 0 unsigned int
MiscFlags 0 unsigned int
这里有什么值得我的顶点设置:
Vertex v[] =
{
Vertex(-32.f, -32.f, 1.0f, 0.0f, 1.0f),
Vertex(-32.f, 32.f, 1.0f, 0.0f, 0.0f),
Vertex(32.0f, -32.f, 1.0f, 1.0f, 1.0f),
Vertex(32.0f, 32.f, 1.0f, 1.0f, 0.0f)
};
应该以64x64的大小创建四边形。
编辑3:我尝试生成Mip-Maps以查看是否有效,但事实并非如此。以下是7种可用的Mip-Levels:
还有新的纹理描述:
Width 64 unsigned int
Height 64 unsigned int
MipLevels 7 unsigned int
ArraySize 1 unsigned int
Format DXGI_FORMAT_B8G8R8A8_UNORM (87) DXGI_FORMAT
+ SampleDesc {Count=1 Quality=0 } DXGI_SAMPLE_DESC
Usage D3D11_USAGE_DEFAULT (0) D3D11_USAGE
BindFlags 8 unsigned int
CPUAccessFlags 0 unsigned int
MiscFlags 0 unsigned int
对我来说很好,但结果仍然相同:/。
答案 0 :(得分:0)
@Gnietschow:谢谢你的努力。解决方案很简单,gamedev.net董事会的一些人发现了它:
<强>行情:强>
我有一个类似的问题,结果发现我正在做窗口 在计算窗口大小以适应时,模式错误 backbuffer尺寸等,导致显示模糊的显示 很长一段时间很难注意到
我打算说同样的话。你想确保 窗口的客户区域与D3D后备箱的大小相同, 否则当后备缓冲器出现blit时,你会得到非常糟糕的缩放 到窗户上。你可以使用这样的东西:
RECT windowRect; SetRect(&windowRect, 0, 0, backBufferWidth, backBufferHeight); BOOL isMenu = (GetMenu(hwnd) != nullptr); if(AdjustWindowRectEx(&windowRect, style, isMenu, exStyle) == 0) DoErrorHandling(); if(SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top, SWP_NOMOVE) == 0) DoErrorHandling();
来源:http://www.gamedev.net/topic/677243-iso-dimetric-tile-texture-has-jagged-edges/