Bir fayans seti görüntüsünden fayans çizerek tilemaps çizen bir 2D oyun motorum var. Varsayılan olarak OpenGL GL_REPEATsadece bir kısmını değil tüm dokuyu ( ) sarayabileceğinden, her bir karo ayrı bir dokuya bölünür. Daha sonra aynı döşemenin bölgeleri birbirine bitişik hale getirilir. Amaçlandığı gibi çalışırken şöyle görünür:

Bununla birlikte, kesirli ölçeklemeyi uygulamaya koyar koymaz dikişler görünür:

Bu neden oluyor? Bunun, dörtlülerin sınırlarını karıştıran doğrusal filtrelemeden kaynaklandığını düşündüm, ancak yine de nokta filtrelemeyle oluyor. Şimdiye kadar bulduğum tek çözüm, tüm konumlandırma ve ölçeklendirmenin yalnızca tamsayı değerlerde gerçekleşmesini sağlamak ve nokta filtrelemeyi kullanmaktır. Bu, oyunun görsel kalitesini düşürebilir (özellikle alt piksel konumlandırması artık çalışmaz, bu nedenle hareket o kadar düzgün değildir).
Denediğim / düşündüğüm şeyler:
- kenar yumuşatma dikişleri azaltır, ancak tamamen ortadan kaldırmaz
- mipmaplemeyi kapatmanın hiçbir etkisi yoktur
- her döşemeyi ayrı ayrı işleyin ve kenarları 1 piksel ekstrüde edin - ancak bu, bir seferde fayans bölgelerini oluşturamayacağından ve saydamlık alanlarının kenarları boyunca başka eserler oluşturduğundan bir de-optimizasyon.
- kaynak görüntülerin etrafına 1 piksellik bir kenarlık ekleyin ve son pikselleri tekrarlayın - ancak artık ikisinin gücü değil, NPOT desteği olmayan sistemlerde uyumluluk sorunlarına neden oluyor
- döşenmiş görüntüleri işlemek için özel bir gölgelendirici yazmak - ama sonra farklı ne yapardınız?
GL_REPEATpikseli görüntünün karşı tarafından kenarlardan tutmalı ve saydamlık almamalıdır. - geometri tam olarak bitişiktir, kayan nokta yuvarlama hatası yoktur.
- fragman gölgelendiricisi aynı rengi döndürmek için sabit kodlanmışsa , dikişler kaybolur .
- dokular olarak belirlendiyse
GL_CLAMPyerineGL_REPEAT, dikişleri kaybolur (render yanlış olsa da). - dokular olarak belirlendiyse
GL_MIRRORED_REPEAT, dikişler kaybolur (render yine yanlış olmasına rağmen). - arka planı kırmızı yaparsam, dikişler hala beyazdır. Bu, şeffaflıktan ziyade opak beyazdan bir örneklem aldığını gösterir.
Böylece dikişler sadece GL_REPEATayarlandığında görünür . Herhangi bir nedenle sadece bu modda, geometrinin kenarlarında bir miktar kanama / sızıntı / şeffaflık vardır. Nasıl olabilir? Tüm doku opaktır.
GL_NEARESTörnekleme ile 3B dokular Rda bu senaryoda çoğu şey için dizi dokularının yanı sıra çalışır . Mipmapleme işe yaramayacaktır, ancak uygulamanıza bakarak muhtemelen mipmap'lara ihtiyacınız yoktur.


