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 ! :)
a dokładnie spasowane są krawędzie? tj. wierzchołek jednego kwadratu jest dokładnie równy wierzchołkowi drugiego?
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
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 ;)
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.
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 :)
Natomiast miNearest czy miLinear (bez mipmap) :
Ł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);