Jak pozbyć się "białych mrówek" z krawędzi oteksturowanych obiektów?

0

Witam,
Wiecie może co odpowiada za tworzenie się krawędzi tekstury (te białe mrówki) dla dalekich obiektów, jak na załączonym obrazku ? Cały teren zbudowany jest z poligonów kwadratów, a wszystkie posiadają tą samą teksturę. Przy bliskich obiektach efekt ten zanika. Kombinowalem z minFilter ale to nic nie pomaga. Pozdrawiam ! :)user image

0

a dokładnie spasowane są krawędzie? tj. wierzchołek jednego kwadratu jest dokładnie równy wierzchołkowi drugiego?

0

Tak , Wierzchołki się zgadzają. Wrapy wszystkie textur są ustawione na twClamp. Uwzględniłem poprawke 0.5 px do obliczania wspolrzędnych textury ( Używam kilka kafelek w jednej texturze )

Udało się mi osiągnąć taki efekt przy :
-csa8x
-MagFilter:maNearest
-MinFilter:miNearestMipmapLinear

user image

Jednak zostaje poświata jeszcze tam w tle. Nie jest to mgła gdyż mam ją wyłączoną. Zmiana na MinFilter:miNearest daje najlepsze efekty jednak wtedy textura obiektów dalekich jest tak dokladna że, aż zbyt ziarnista i daje po oczach.. Pytanie brzmi jak pozbyć się mgły a jednak uzyskać textury nie ziarniste ;)

0

Na wstępie tekstura powinna być trochę rozmyta ;)

A tak poza tym poczytaj o mipmappingu: http://blogs.msdn.com/b/shawnhar/archive/2009/09/14/texture-filtering-mipmaps.aspx
Screen na stronie idealnie pokazuje Twój problem.

0

Własnie w komponentach GLScene za mipmapping odpowiada chyba MinFilter który może przybierać opcję :

TGLMinFilter = (miNearest, miLinear, miNearestMipmapNearest,
    miLinearMipmapNearest, miNearestMipmapLinear,
    miLinearMipmapLinear);

Problemem jest gdyż ustawienie miLinearMipMap*, powoduje pojawianie się obramowań jak na ss nr, opcja miNearestMipmap* powoduje tworzenie się mgły , ogolnie ciakaw jestem skad ten kolor (taki niebieskawy) , która jest nie wskazana u mnie w projekcie :)
user image

Natomiast miNearest czy miLinear (bez mipmap) :
user image

Ładuję texturę w ten spsób:

  self.GLMaterialLibrary1.AddTextureMaterial('tilles',extractfiledir(application.exeName)+'\tiles\heyedecraftshogunterrxniaa copy.tga').Material.Texture.Disabled := false;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.TextureWrapS := twClamp;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.TextureWrapR := twClamp;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.TextureWrapT := twClamp;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.MinFilter    := miLinear;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.MagFilter    := maNearest;
  self.GLMaterialLibrary1.Materials[1].Material.Texture.NormalMapScale :=1/256;

Obliczam współrzędne texturowania w ten :

 tx := (TextId mod 16)*ksize;
    ty := (15-(TextId div 16))*ksize;
    tx := (tx+0.5)/size;
    ty := (ty+0.5)/size;
    rx := (ksize-1)/size;

.........


result[0].coord     := Vector3fMake(x,y,z);
      result[0].textCoord := TexPointMake(tx,ty);
      result[1].coord     := Vector3fMake(x+1,y,z);
      result[1].textCoord := TexPointMake(tx+rx,ty);
      result[2].coord     := Vector3fMake(x+1,y+1,z);
      result[2].textCoord := TexPointMake(tx+rx,ty+rx);
      result[3].coord     := Vector3fMake(x,y+1,z);
      result[3].textCoord := TexPointMake(tx,ty+rx);

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