DirectX rozmyta tekstura

0

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.

user image

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 ?

0

Trochę przypomina mój problem to co jest w tym watku
http://forums.tigsource.com/index.php?topic=285.0
tylko że tam jest mową o oknie a u mnie jest panel w którym wyświetlam DIrectX
Hmmmm

0

Okazało się że zamęt zasiało D3DXCreateTextureFromFile i to że rozmiary pliku nie były potęgo liczby 2.
Prawdopodobnie D3DXCreateTextureFromFile przeskalowało teksturę

1 użytkowników online, w tym zalogowanych: 0, gości: 1