Nie wiem z czego to wynika ale gdy porównuje DirectX i OpenGL to wygląda mi na to że DirectX rozmywa tekstury.
Nawet jak rysuje teksturę w rozmiarze oryginalnym.
W DirectX i OpenGL mam wydaje mi sie podobnie ustawione wszystko
Ktoś może ma jakieś pomysły ?
Init dla DirectX wyglada tak:
function TForm52.InitD3D(hWnd: HWND): HRESULT;
var
d3dpp: TD3DPresentParameters;
M1,M2, m3,M4,m5: TD3DXMatrix;
begin
Result:= E_FAIL;
// Stworz obiekt D3D
g_pD3D := Direct3DCreate9(D3D_SDK_VERSION);
if (g_pD3D = nil) then Exit;
// Ustawiamy wlasciwosci dla urzadzenia DirectX
FillChar(d3dpp, SizeOf(d3dpp), 0);
d3dpp.Windowed := true;
d3dpp.SwapEffect := D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat := D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil := True;
d3dpp.AutoDepthStencilFormat := D3DFMT_D16;
// http://4programmers.net/DirectX/Managed/Direct3D/7._Obs%C5%82uga_kamery
//Próbkowanie podwójne lub wyższe, wspierane przez urządzenie
//d3dpp.MultiSampleType := D3DMULTISAMPLE_2_SAMPLES;
//d3dpp.MultiSampleQuality := 0;
// Stworz urzadzenie DirectX
Result:= g_pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
@d3dpp, g_pd3dDevice);
if FAILED(Result) then
begin
Result:= E_FAIL;
Exit;
end;
// Wylacz przycinanie
g_pd3dDevice.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
// Wylacz oswietlenie - po to sa shadery :)
g_pd3dDevice.SetRenderState(D3DRS_LIGHTING, iFalse);
// Wlacz Z-Buffer
g_pd3dDevice.SetRenderState(D3DRS_ZENABLE, iFalse);
// Podczas renderowania warto upewnić się, że w międzyczasie nie zmieniliśmy stanu renderowania na pomijający antialiasing:
// device.RenderState.AntiAliasedLineEnable = true;
// device.RenderState.MultiSampleAntiAlias = true;
//g_pd3dDevice.SetRenderState(D3DRS_ANTIALIASEDLINEENABLE, iTrue);
//g_pd3dDevice.SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, iTrue);
{g_pd3dDevice.SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC) ;
g_pd3dDevice.SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC) ;
g_pd3dDevice.SetSamplerState(0,D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC) ;
}
g_pd3dDevice.SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_LINEAR) ;
g_pd3dDevice.SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_LINEAR) ;
g_pd3dDevice.SetSamplerState(0,D3DSAMP_MIPFILTER, D3DTEXF_LINEAR) ;
//D3DXMatrixPerspectiveFovLH(M1, PI/4, pnl1.Width/pnl1.Height,0.3,500);
D3DXMatrixOrthoOffCenterLH( M1, 0,pnl1.Width,pnl1.Height,0,-2000,2000 ); poka_m(M1);
D3DXMatrixLookAtLH(M2, D3DXVector3(0,0,30), D3DXVector3(0,0,0),D3DXVector3(0,1,0) );
D3DXMatrixIdentity(M2);
g_pd3dDevice.SetTransform(D3DTS_PROJECTION, M1);
g_pd3dDevice.SetTransform(D3DTS_VIEW, M2);
g_pd3dDevice.SetTransform(D3DTS_WORLD, M2);
//g_pd3dDevice.SetTransform(D3DTS_VIEW, M2);
{ g_pd3dDevice.GetTransform(D3DTS_WORLD,M3);
D3DXMatrixRotationZ(M4,30);
D3DXMatrixMultiply(m3,m3,M4);
D3DXMatrixTranslation( m5,100,100,0);
D3DXMatrixMultiply(m3,m3,m5);
g_pd3dDevice.SetTransform(D3DTS_WORLD,M3);
// g_pd3dDevice.SetTransform( D3DTS_PROJECTION, g_matProj );
}
Result:= S_OK;
end;
Mozna to rozmywanie jakoś wyłaczyć dla DirectX ?