Nel mio gioco c'è un terreno simile a Minecraft fatto di cubi. Genero un buffer di vertici dai dati voxel e utilizzo un atlante di trama per look di blocchi diversi:
Il problema è che la trama di cubi distanti si interpola con tessere adiacenti nell'atlante della trama. Ciò si traduce in linee di colori errati tra i cubi (potrebbe essere necessario visualizzare lo screenshot di seguito a dimensioni intere per vedere i difetti grafici):
Per ora utilizzo queste impostazioni di interpolazione ma ho provato ogni combinazione e anche GL_NEAREST
senza il mipmapping non fornisce risultati migliori.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Ho anche provato ad aggiungere un offset nelle coordinate della trama per selezionare un'area leggermente più piccola della piastrella, ma poiché l'effetto indesiderato dipende dalla distanza dalla fotocamera, questo non può risolvere completamente il problema. A grandi distanze le strisce si verificano comunque.
Come posso risolvere questo sanguinamento della trama? Poiché l'utilizzo di un atlante di texture è una tecnica popolare, potrebbe esserci un approccio comune. Purtroppo, per alcuni motivi spiegati nei commenti, non posso passare a trame o matrici di trama diverse.
GL_LINEAR
che darà un risultato simile o selezionerà il pixel più vicino GL_NEAREST
che comunque comporterà anche strisce tra i blocchi. L'ultima opzione menzionata diminuisce ma non elimina il difetto dei pixel.