2009-08-13 26 views
1

Je crée une application opengl simple qui inclut évidemment des objets 3d et des textures. Mon problème est cependant que les artefacts apparaissent sur chaque texture. Ceux-ci viennent sous la forme de triangles le long des bords.Suppression d'artefacts de texture OpenGL

J'ai remarqué qu'il disparaît dès que je rapproche le point de vue de la texture qu'il rend parfaitement. Par conséquent, je soupçonne qu'il a quelque chose à faire, soit avec le mipmapping ou le z-buffer. Veuillez noter que toutes les coordonnées de texture sont chargées à partir d'un fichier .3ds et que toutes sont vérifiées dans la plage de 0-1.

Voici une photo de mon problème:

Picture 1

Les textures sont chargées comme ceci:

//Texture parameters 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

//Define the 2d texture 
glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, array); 

//Create 2d mipmaps 
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, array); 
+0

Pouvez-vous également publier une photo du maillage? Est-ce que le moteur couvre un seul quad ou fait de nombreux triangles? –

Répondre

3

Quand je programmation en utilisant DirectX, le rapport plan proche/lointain distance plane causé des artefacts dans les bords. Dans mon cas, si le plan proche était à 1 unité de la caméra et que le plan éloigné était à 10000 unités, le ratio est de 1/10000 et cela a créé des problèmes. Si je règle le plan proche à 10 ou 100, le rapport devient plus grand. Il a résolu le problème des bords dentelés.

Je ne sais pas si/comment cela s'applique en OpenGL, mais vous voudrez peut-être le vérifier.

+0

Thats Z-Buffer prceision. Si vous aviez utilisé un tampon Z de 24 bits, vous auriez vu les problèmes disparaître aussi. Occupez-vous d'une leçon importante en définissant vos unités de manière appropriée. c'est-à-dire ne pas avoir un objet de 0,01 unité de large avec une distance de tirage maximale de 10000 unités;) – Goz

+1

Nice, en changeant le plan proche de 0,1 à 10 a résolu le problème! –

+0

@Goz ... Oui. DirectX a également traité quelque chose appelé w-buffer. Tout était lié. Cela fait longtemps que je n'ai pas utilisé DirectX pour la dernière fois que je me souviens de la dure leçon apprise: D - garder le ratio élevé - et pas les détails exacts. –