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 :

Affichage texture anormale (très étirée et buguée)


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut Affichage texture anormale (très étirée et buguée)
    Bonjour,

    Je rencontre un soucis depuis 2 jours pour texturer mon terrain.

    La texture s'affiche comme ceci. Les bosses sont des élévations générée avec du bruit de Perlin.

    Nom : texture.jpg
Affichages : 413
Taille : 161,4 Ko

    Mon vecteur décrivant les points et les coordonées de texture est de cette forme : sommets du terrain / coordonées de texture

    Comme ce sont des triangles qui composent le terrain j'ai mis comme coordonnées : 0,0 / 0.5,1 / 1,1

    Je ne comprends vraiment pas ce qu'il se passe.

    Voici le code de mes shaders :

    Vertex:

    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
    #version 330 core
    layout (location = 0) in vec3 position;
    layout (location = 2) in vec2 texCoord;
     
    out vec2 TexCoord;
     
    uniform mat4 model;
    uniform mat4 view;
    uniform mat4 projection;
     
    void main()
    {
     gl_Position = projection * view * model *vec4(position, 1.0f);
     
    	TexCoord = texCoord;
    	//TexCoord = vec2(texCoord.x, 1.0 - texCoord.y);
    }
    Fragment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #version 330 core
    in vec3 ourColor;
    in vec2 TexCoord;
     
    out vec4 color;
     
    // Texture samplers
    uniform sampler2D ourTexture1;
     
     
    void main()
    {
    	color = texture(ourTexture1, TexCoord);
    }
    Et voici la routine précédé du bind de texture

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    glBindVertexArray(VAO);	
    	long int b = vertices_terrain.size(); // offset
     
    	for (int i = 0; i < b; i += 3)
    	{
    		vertices_terrain.push_back(0.0f);
    		vertices_terrain.push_back(0.0f);
    		vertices_terrain.push_back(0.5f);
    		vertices_terrain.push_back(1.0f);
    		vertices_terrain.push_back(1.0f);
    		vertices_terrain.push_back(0.0f);
    	}
     
     
    	glBindBuffer(GL_ARRAY_BUFFER, VBO_TERRAIN);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertices_terrain.size(), &vertices_terrain[0], GL_STATIC_DRAW);
     
    	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO_TERRAIN);
    	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * faces_terrain.size(), &faces_terrain[0], GL_STATIC_DRAW);
     
    	glVertexAttribPointer(0, 3, GL_FLOAT, GL_TRUE, 0 * sizeof(GLfloat), (GLvoid*)0);
    	glEnableVertexAttribArray(0);
    	// Color attribute
    	//// TexCoord attribute
    	glVertexAttribPointer(2, 2, GL_FLOAT, GL_TRUE, 0 * sizeof(GLfloat), (GLvoid*)(b * sizeof(GLfloat)));
    	glEnableVertexAttribArray(2);
     
     
    	GLuint texture1;
    	glGenTextures(1, &texture1);
    	glBindTexture(GL_TEXTURE_2D, texture1); // All upcoming GL_TEXTURE_2D operations now have effect on our texture object
     
    	// Set our texture parameters
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);	// Set texture wrapping to GL_REPEAT
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     
    	// Set texture filtering
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     
    	// Load, create texture and generate mipmaps
    	int width, height;
    	unsigned char* image = SOIL_load_image("../imgp0913.jpg", &width, &height, 0, SOIL_LOAD_RGB);
    	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
    	glGenerateMipmap(GL_TEXTURE_2D);
    	SOIL_free_image_data(image);
    	glBindTexture(GL_TEXTURE_2D, 0);
     
    	while (!glfwWindowShouldClose(window))
    	{
    		glfwPollEvents();
    		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    		glClear(GL_COLOR_BUFFER_BIT);
     
    		glm::mat4 view;
    		glm::mat4 model3;
     
    		// Projection
    		model3 = glm::scale(model3, glm::vec3(0.9f));
    		model3 = glm::rotate(model3, -20.0f, glm::vec3(1.0f, 0.0f, 0.0f));
    		view = glm::translate(view, glm::vec3(0.0f, 0.0f, -10.0f));
     
    		glm::mat4 projection;
    		projection = glm::perspective(20.0f, (GLfloat)WINDOW_WIDTH / (GLfloat)WINDOW_HEIGHT, 0.1f, 100.0f);
     
    		// Get the uniform locations
    		GLint modelLoc = glGetUniformLocation(shader.Program, "model");
    		GLint viewLoc = glGetUniformLocation(shader.Program, "view");
    		GLint projLoc = glGetUniformLocation(shader.Program, "projection");
     
    		// Pass the matrices to the shader
    		glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model3));
    		glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
    		glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
     
    		glActiveTexture(GL_TEXTURE0);
    		glBindTexture(GL_TEXTURE_2D, texture1);
    		glUniform1i(glGetUniformLocation(shader.Program, "ourTexture1"), 0);
     
    		shader.Use();	
     
    		glBindVertexArray(VAO);
     
    		glDrawElements(GL_TRIANGLES, faces_terrain.size(), GL_UNSIGNED_INT, 0);
     
    		glBindVertexArray(0);
    	glfwSwapBuffers(window);
    }
    Lorsque que change les coordonnées de texture, la bande marron augmente, il y a plus de détail mais à un moment ça stagne et ça continue à ressembler à rien du tout.

    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Tes coordonnées de textures sont mauvaises très certainement.

    Affiche les avec un fragment shader type
    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
    #version 330 core
    in vec3 ourColor;
    in vec2 TexCoord;
     
    out vec4 color;
     
    // Texture samplers
    uniform sampler2D ourTexture1;
     
     
    void main()
    {
    	// color = texture(ourTexture1, TexCoord);
    	color = vec4(TexCoord, 0.0, 1.0);
    }
    Si tu n'obtient pas un dégradé avec dans les quatres coins du noir / vert / rouge / jaune c'est qu'il ya un problème.

    Tes coordonnées de textures doivent être différentes pour chaque vertex. (Sinon ils référencent tous la même partie de la texture).


  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    Salut,

    Merci pour ta réponse.

    Effectivement j'ai le dégradé que tu as indiqué.

    Quel pourrait-être le soucis donc si cela fonctionne ? Je ne comprends pas pourquoi chaque vertices devrait avoir des coordonnées de texture différentes.

    J'ai un pattern 0,0 / 0.5,1 / 1,0 qui se repète tous les 3 vertices, ce n'est pas bon ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par j_sb12 Voir le message
    Effectivement je n'ai pas de dégradé mais seulement un jaune uni. Je n'ai rien changé à part le fragment shader.

    Je ne comprends pas pourquoi chaque vertice devrait avoir des coordonnées de texture différentes ? Il faut qu'ils aient le même pattern pourtant non ?

    Le pattern réapparait tous les 3 vertices. Le premier : 0,0, le deuxième : 0.5,1 et le troisième 1,0 et ainsi de suite. Ce n'est pas bon ?
    Les coordonnées de texture indique quelle partie de la texture coller à quel endroit, la tu colles la même partie partout (ce qui donne le résultat que tu as).

    edit:
    Citation Envoyé par j_sb12 Voir le message
    Effectivement j'ai le dégradé que tu as indiqué.

    Quel pourrait-être le soucis donc si cela fonctionne ?
    Dans ce cas, je sais pas. :/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    D'accord bien et bien...je suis bien embêté là ! Merci quand même de ton aide !

    Si quelqu'un a une idée...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    J'ai fait quelques tests.

    J'ai dessiné un simple triangle, pris une autre image et ça a l'air de fonctionné sur un petit nombre de triangles.

    Par contre quand je prends mon terrain qui est fait une centaine de triangles, tout est étiré.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    J'ai refait quelques tests et des modifcations mais qui reviennent au même au final et...

    Il y a un seulement un carré ou triangle qui s'affiche à peu près près et c'est le dernier affiché.

    Durant mes tests bugués, la texture s'affichait très bien mais les coordonnées étaient vraiment n'importe quoi, ça ne ressemblait vraiment pas un carré plutôt à un crystal. Vous savez des pics vers le haut, d'autres vers le bas ou sur les côtés etc.

    Maintenant que c'est plat, ça s'affiche mal. Je ne comprends vraiment pas le mécanisme là

    EDIT : Ca me fait ça maintenant. C'est normal ? Je mets des coordonnées triangulaires donc ça devrait me donner un triangle dans la texture et non pas la texture entière.

    Nom : bug.jpg
Affichages : 345
Taille : 299,4 Ko

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    Bon j'ai bidouillé un peu et j'ai trouvé des coordonnées qui me donne une satisfaction partielle. En effet il y a encore des bug en haut du quadrillage. Je ne sais pas pourquoi mais ça fera l'affaire pour le reste du développement.

    Coordonnées : 100,100 / 150, 100 / 100, 150

    Je reviendrai sur ce thread quand je retravaillerai sur ces textures

    Nom : bug2.jpg
Affichages : 431
Taille : 177,1 Ko

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    Salut,
    J'imagine que c'est du C/C++, je m'y connait pas trop. Ce qui m'interpelle ce sont tes appels à glVertexAttribPointer
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_TRUE, 0 * sizeof(GLfloat), (GLvoid*)(b * sizeof(GLfloat)));

    Ton buffer contient les données de position (x,y,z) et de texture(x,y) si j'ai bien compris.

    Ton 4ème paramètre indique le 'stride' (en gros la taille des données par vertices), par défaut à 0 si tu n'a qu'un attribut, sinon la somme des coordonnées, 5 * sizeof(GLfloat).
    3 coordonnées de position du vertice, et 2 pour la coordonnées de texture
    Ensuite, le dernier paramètre : l'offset(décalage), donc 3 * sizeof(GLfloat) pour le 2ème appel, 3 pour position(x, y, z)

    ce qui donne

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_TRUE, 5 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);
    // Color attribute
    //// TexCoord attribute
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_TRUE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
    glEnableVertexAttribArray(2);

    En espérant avoir été clair

    Edit : tu indique GL_TRUE pour le 4ème paramètre, en clair tu demande à ce que les coordonnées soit normalisées. Ne sachant pas ce que contient ton buffer, j'ai un doute sur ce point.

  10. #10
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    @jwar0: J'ai eu la même réflexion que toi, mais en fait il packe ses coordonnées de texture en bout de VBO, donc son code m'a paru correct.

    @j_sb12: Peux-tu confirmer cela?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    Et donc ça ne marche pas. En tout cas pas si je me base sur la doc glVertexAttribPointer.
    Les données pour chaque vertex position/texture/(normal ou autre) doivent être consécutives.
    https://www.opengl.org/sdk/docs/man3...ribPointer.xml

  12. #12
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Ce n'est marqué nulle part qu'il ne faut pas faire comme il fait.
    Personnellement je ne le ferais pas, mais ça équivaut à avoir 2 VBO, ce qui est tout à fait légal.

    Quelle est la ligne de la doc qui te fait penser que ça ne marche pas?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    Cest comme ça que je fait et ça marche(suffit de lire la doc après faut bouffer du tutoriel/examples pour bien assimiler.

    Je vois pas comment la même methode(function) interprète de 2 manières différentes. Comme je disais je m'y connait peu en C/C++, mais je programme en java/opengl(depuis peu) et webgl et je ne vois pas comment ce code peut fonctionner.

  14. #14
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par jwar0 Voir le message
    Et donc ça ne marche pas. En tout cas pas si je me base sur la doc glVertexAttribPointer.
    Les données pour chaque vertex position/texture/(normal ou autre) doivent être consécutives.
    https://www.opengl.org/sdk/docs/man3...ribPointer.xml
    Il est recommandé d'entrelacer ses données : [position_0/tex_0][position_1/tex_1][...]
    Mais ce n'est pas obligatoire : [position_0/position_1/...][tex_0/tex_1/...] marche aussi.

  15. #15
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Et quelle(s) est(sont) la(les) ligne(s) dans la doc, qui te permettent de dire que ça ne fonctionne pas, ce qu'il fait?
    Parce que
    Cest comme ça que je fait et ça marche
    , n'est pas un argument suffisant, à mon goût. (sachant que moi aussi je fais de l'interleaved array)

    EDIT:

    En tout cas, cela n'a rien à voir avec une eventuelle différence C/C++ VS Java/WebGL.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    J'ai juste dis que ce qu'il faisait me semblait pas correct, j'explique en gros le pourquoi et comment JE procède.

    Désolé d'être intervenu

    Edit : Je viens de comprendre, Méa culpa , par contre c'est pas trop optimiser pour OpenGl qui doit sans cesse se replacer sur le buffer pour alimenter les shader(sur les gros model en tout cas)

  17. #17
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Tu n'as pas à t'excuser d'être intervenu, la confrontation d'opinions n'est jamais une mauvaise chose.
    Je cherchais juste à comprendre ce qui te faisait penser que ça ne pouvait pas fonctionner.
    Par contre, je peux être un peu brusque, il est vrai.

    Ensuite pour les performances, n'ayant pas testé je ne peux pas dire, mais j'ose espérer que les implémentations d'OpenGL stockent en interne l'adresse de la position de chaque attribut plutôt que de devoir se replacer sur le buffer au bon endroit à chaque fois ^^.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 292
    Points
    292
    Par défaut
    Si le GPU fonctionne à la manière d'un CPU il va mettre en cache une partie du buffer en prévision d'accès, en accédant à des plages non consécutives, ça peu impacter les perfs (mais pas dans ce cas)

    J'ai du mal à voir ce qu'il y'a dans le buffer vertices_terrain. Du coup je ne sais pas trop ce qui est fait derrière. Et pourquoi normaliser les attributs ?

  19. #19
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    La normalisation n'est prise en compte que lors de la conversion d'entiers vers des flottants, donc ne devrait pas avoir d'influence.

    Moi, ce qui me chagrine le plus dans vertices_terrain, c'est que les quads ont tous les mêmes coordonnées de texture. (Par rapport à la boucle de génération de ses coordonnées de texture, il semblerait qu'il ait des quads formés de 2 triangles?)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 41
    Points : 14
    Points
    14
    Par défaut
    Salut !

    Merci pour ce débat

    Citation Envoyé par dragonjoker59 Voir le message
    @j_sb12: Peux-tu confirmer cela?
    J'ai complètement oublié de vous dire que maintenant mes données sont entrelacées. Vu que ça ne fonctionnait pas quand elles étaient à la suite j'ai décidé de les entrelacer. J'ai eu des améliorations de suite donc j'ai continué sur cette mise en forme des données. Elles sont donc rangées de cette façon : vertices / coordonnées texture / vertices / coordonnées texture ...

    Du coup, mes calls de glVertexAttribPointer sont comme jwar0 l'a indiqué. Veuillez m'excuser sur ce manque de communication...

    Citation Envoyé par dragonjoker59 Voir le message
    Moi, ce qui me chagrine le plus dans vertices_terrain, c'est que les quads ont tous les mêmes coordonnées de texture. (Par rapport à la boucle de génération de ses coordonnées de texture, il semblerait qu'il ait des quads formés de 2 triangles?)
    Oui ils ont tous les mêmes coordonnées de texture car je veux que le terrain soit uniforme. Si c'est faux alors je n'ai rien compris du tout !

    Chaque quad est formé de 2 triangles oui.


    Concernant la normalisation des vertices c'est parce que mes coordonnées de terrain sont entre -Length, +Length, -Width, et +Width. Vu que les coordonnées d'openGL sont entre -1 et 1 je me suis dit qu'il fallait que ça soit normalisé entre ces valeurs. J'utilise mal cet attribut ?

Discussions similaires

  1. [Débutant][OpenGL ES] Problème affichage textures
    Par Niicoo dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/06/2009, 15h15
  2. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  3. GLSL : Affichage Texture
    Par Lhudel dans le forum OpenGL
    Réponses: 5
    Dernier message: 09/03/2007, 16h12
  4. Affichage d'une très grande image
    Par Exca dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 26/12/2006, 20h26
  5. [obj][irrSpintz] affichage texture
    Par Husqvarna dans le forum Irrlicht
    Réponses: 2
    Dernier message: 15/05/2006, 19h29

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