IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[texture] - A propos des bords


Sujet :

OpenGL

  1. #1
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut [texture] - A propos des bords
    Salut,

    j'explique rapidement
    j'ai une surface composée de carré (dim = 200x200carre de 100 unites)
    j'applique une texture sur chaque carré (la meme)
    mais a la restitution, on remarque les carres.
    y a t'il moyen d'eviter ca ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    mais a la restitution, on remarque les carres
    Tu peux être plus précis ? Un petit screenshot peut-être ?

  3. #3
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Si j'ai bien compris les bords de ta texture sont visibles et du coup on a pas l'impression que les textures se suivent

    un petit screenshot serait tout de même le bienvenu comme dit Loulou24

    sinon pour ton problème, si j'ai bien compris, regardes du côté de glTexParameter
    les paramètres intéressants sont GL_TEXTURE_WRAP_S et GL_TEXTURE_WRAP_T
    il faudrait surement les associer à un GL_CLAMP_TO_EDGE
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    pour le rendu, j'ai un souci, je ne sais pas comment inserer une image dans mon post

    sinon, je pense que ca viens de ma fonction de dessin d'environnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //Fonction de dessin d'une surface rectangulaire
    void dessinersurface(int longeur, int largeur, int hauteur, unsigned int texID)
    {
    	int x,z = 0;
    	const int pas = 100;
    	largeur /= pas;
    	longeur /= pas;
     
    	glBindTexture(GL_TEXTURE_2D, texID);
     
    	for (int i=0; i<largeur; i++)
    	{
    		for (int j=0; j<longeur; j++)
    		{
    			glBegin(GL_QUADS);
    			glTexCoord2i(0.0f, 0.0f); glVertex3i(0.0f + x, hauteur, 0.0f + z);
    			glTexCoord2i(0.0f, 1.0f); glVertex3i(0.0f + x, hauteur, pas + z);
    			glTexCoord2i(1.0f, 1.0f); glVertex3i(pas + x, hauteur, pas + z);
    			glTexCoord2i(1.0f, 0.0f); glVertex3i(pas + x, hauteur, 0.0f + z);
    			glEnd();
     
    			x += pas;
    		}
    		x=0;
    		z+=pas;
    	}
    }
    que j'utilise de cette facon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	glPushMatrix();
    	glTranslatef(-10000, 0, -10000);
    	dessinersurface(20000, 20000, 0, Terraintexture.ID);	//le terrain
    	glTranslatef(9750, 0, 10000);
    	dessinersurface(500, 3000, 0, Tarmactexture.ID);		//la piste
    	glPopMatrix();
    bon je sais c'est pas la meilleure facon, mais pour le moment mon objectif n'est pas la
    de plus je me suis apercu qu'avec un pas de 500, ca allait bcp mieux sauf pour la piste
    j'ai controler mes images, et elles sont bien uniformes.

    je vais essayer de me pencher sur les parametres que tu as donné

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    pour le rendu, j'ai un souci, je ne sais pas comment inserer une image dans mon post
    Tu uploades ton image sur un site de ce genre si tu n'as pas d'espace perso, et tu utilises la balise [ img ] pour l'insérer dans ton post.

  6. #6
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    ok le voila



    ici le pas est a 100, et on discerne les jonctions de textures (enfin c'est mon avis) et je me demande si c'est normal ?

  7. #7
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    une question supplementaire.

    Que vaut-il mieux faire, créer n carrés et leur appliquer a chacun la texture (comme je le fais actuellement) ou repeter plusieurs fois la texture (mais a ce moment la ca fait beaucoup de repet)?

    Surtout, quelle solution est la plus performante (quand je vois le FPS ca me fait peur, meme si le reste de mon code n'est pas encore tout a fait optimisé)?

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ci le pas est a 100, et on discerne les jonctions de textures (enfin c'est mon avis) et je me demande si c'est normal ?
    Ben... Si ta texture n'est pas prévue pour être repétée (ie. que son bord droit soit dans la continuité de son bord gauche), il est normal de voir une "cassure". Choppe plutôt une texture prévue à cet effet, il en existe plein sur le net.

    Que vaut-il mieux faire, créer n carrés et leur appliquer a chacun la texture (comme je le fais actuellement) ou repeter plusieurs fois la texture (mais a ce moment la ca fait beaucoup de repet)?

    Surtout, quelle solution est la plus performante (quand je vois le FPS ca me fait peur, meme si le reste de mon code n'est pas encore tout a fait optimisé)?
    Entre afficher 2 triangles et 1000, le choix est rapide. Si tu as une seule texture repétée sur un terrain plat, fais un seul quad avec des coordonnées de textures élevées afin de répeter la texture. That's all.

  9. #9
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    voila j'ai apporté quelques modifs
    je dessine un seul polygone et je repete la texture (50x c'est pas trop ?, mais sinon c'est pas terrible au rendu).

    dans un premier temp j'ai utilisé glTexImage2D() et le mode GL_LINEAR
    puis je suis passé à glBuild2DMipmap() mais j'ai vu aucune difference.

    en modifiant GL_LINEAR par GL_LINEAR_MIPMAP_LINEAR pour le filtre GL_TEXTURE_MIN_FILTER comme indiqué dans certain tuto, bin je vois une difference mais c'est franchement moins bien :o

    bon bref je reste en GL_LINEAR, et pis c'est tout

    allez derniere question et pis c'est fini avec mes textures
    si on utilise glBuild2DMipmap(), on n'a plus besoin de glTexImage2D()
    du moins c'est ce que j'ai compris.
    Pourtant dans la plupart des codes que j'ai pu voir, les deux sont presents ?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    glBuild2DMipmap fait en fait un glTexImage2D sur tous les niveaux de mipmap de ta texture, donc non tu n'as pas besoin des deux. Tu peux donner un exemple de code où tu as vu les deux ?

  11. #11
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    en vitesse ici

    mais c'est assez frequent dans les codes traitant de textures et meme certains tut (la preuve)

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ben je pense pas que ça serve à grand chose, mais peut-être que je me trompe (mes connaissances en OpenGL sont toutes fraîches).

  13. #13
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    donc avis au specialiste

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En même temps, la documentation de gluBuild2DMipmaps est assez claire sur le sujet.

    [...]
    glTexImage2D is called to load each of these mipmap levels. Level 0 is a copy of data.
    [...]
    Je ne vois vraiment pas pourquoi il faudrait repasser un coup de glTexImage2D sur l'un des niveaux.

  15. #15
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    tout a fait d'accord, mais maintenant j'ai un autre probleme et avec le test de profondeur cette fois
    si je l'active, l'affichage de la piste est completement foiré.
    j'ai l'impression qu'il ne sait pas qui est devant et qui est derrière.

    j'ai donc monté la hauteur de la piste legèrement et tjours pareil.
    ca ne revient à la normale que si la piste est au minimum à 50 au dessus du terrain.

    j'ai vu quelque part que le plan near de la perspective ne devait pas etre a zero, mais bon ca n'a rien changé.

    je peut bien m'en passer, mais s'il est la c'est qu'il doit marché le GL_DEPTH_TEST, non?

  16. #16
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    de mon avis dans les exemples du site que tu as donné, le gars ne s'est pas bien documenté car glTexImage2D est inutile après un glBuild2DMipmap
    j'ai vu d'autres choses discutables dans ce qui est écrit tel que
    Nous chargeons la matrice de projection et nous la vidons pour éviter toute erreur avec glLoadIdentity().
    pour éviter toute erreur ?
    et il y en a d'autres des comme ça
    même si le code est "bon" (dans le sens où ça fonctionne), on va dire qu'il est pas optimisé et surtout mal documenté

    bref, je ne voit pas ce site comme une référence lol

    Citation Envoyé par grand's
    j'ai donc monté la hauteur de la piste legèrement et tjours pareil.
    ca ne revient à la normale que si la piste est au minimum à 50 au dessus du terrain.
    c'est un problème de précision du zbuffer, tu peux essayer d'augmenter la précision mais ce n'est pas la meilleure solution

    regarde du côté de "glPolygonOffset" qui permet de résoudre ce genre de problème
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  17. #17
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    probleme de z fighting : il faut mettre le near clip plane a la valeure 1 MINIMUM et adapter la longeur du cone de vision, un far clip plane à 10000 alors qu'on voit max a 500 est completement inutile car les valeure Z des fragment sera comprise entre 1 et 10000 alors qu'ils ne vont qu'a 500. malheureusement, contre les Z fighting il n'existe pas de solution miracle, le seul moyen est de limiter la distance de vision, et quand les objets sont loins, n'afficher qu'une version "low poly" pour limiter les effets de figthing desagreables...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  18. #18
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    ok j'ai reglé le pb

    d'abord, modif de mes parametres de carte graphique
    -profondeur de z-buffer imposé à 24bits
    -triple buffering activé

    sais pas si c'etait utile, mais ca a amélioré le rendu (mais pas entierement)

    +

    modif du code en utilisant glPolygonOffset()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	glEnable(GL_POLYGON_OFFSET_FILL);
    	glPolygonOffset(2.0, 1.0);
    	dessinerRectangle(20000, 20000, 0, textTabName[1], 50);
    	glDisable(GL_POLYGON_OFFSET_FILL);
     
    	glTranslatef(9750, 0, 10000);
    	dessinerRectangle(500, 3000, 0, textTabName[0], 10);
    	glPopMatrix();
    là j'ai pas vraiment compris, mais ca fonctionne

  19. #19
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    pour repondre à bafman, j'ai effectivement mis à 1 (et plus à 0) mon near clip plane
    seulement pour le far, je suis obligé d'avoir une grande valeur (actuellement 15000), sinon du haut de mon avion, je ne vois rien.

Discussions similaires

  1. Aide a propos des TMenuEdit
    Par scooper dans le forum C++Builder
    Réponses: 9
    Dernier message: 27/05/2004, 15h39
  2. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo