Salut, je veux créer un cube comme ceci (une skybox) :
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
//Droite.
                VertexArray va1(sf::Quads, 4, this);
                Vertex v1(Vector3f(1, -1, -1));
                Vertex v2(Vector3f(1, 1, -1));
                Vertex v3(Vector3f(1, 1, 1));
                Vertex v4(Vector3f(1, -1, 1));
                va1[0] = v1;
                va1[1] = v2;
                va1[2] = v3;
                va1[3] = v4;
                Material material1;
                material1.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face1 (va1, material1, getTransform());
                //Gauche.
                VertexArray va2(sf::Quads, 4, this);
                Vertex v5(Vector3f(-1, -1, -1));
                Vertex v6(Vector3f(-1, 1, -1));
                Vertex v7(Vector3f(-1, 1, 1));
                Vertex v8(Vector3f(-1, -1, 1));
                va2[0] = v5;
                va2[1] = v6;
                va2[2] = v7;
                va2[3] = v8;
                Material material2;
                material2.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face2 (va2, material2, getTransform());
                //Dessus
                VertexArray va3(sf::Quads, 4, this);
                Vertex v9(Vector3f(-1, 1, -1));
                Vertex v10(Vector3f(1, 1, -1));
                Vertex v11(Vector3f(1, 1, 1));
                Vertex v12(Vector3f(-1, 1, 1));
                va3[0] = v9;
                va3[1] = v10;
                va3[2] = v11;
                va3[3] = v12;
                Material material3;
                material3.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face3 (va3, material3, getTransform());
                //Dessous.
                VertexArray va4(sf::Quads, 4, this);
                Vertex v13(Vector3f(-1, -1, -1));
                Vertex v14(Vector3f(1, -1, -1));
                Vertex v15(Vector3f(1, -1, 1));
                Vertex v16(Vector3f(-1, -1, 1));
                va3[0] = v13;
                va3[1] = v14;
                va3[2] = v15;
                va3[3] = v16;
                Material material4;
                material4.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face4 (va4, material4, getTransform());
                //Devant
                VertexArray va5(sf::Quads, 4, this);
                Vertex v17(Vector3f(-1, -1, 1));
                Vertex v18(Vector3f(1, -1, 1));
                Vertex v19(Vector3f(1, 1, 1));
                Vertex v20(Vector3f(-1, 1, 1));
                va5[0] = v17;
                va5[1] = v18;
                va5[2] = v19;
                va5[3] = v20;
                Material material5;
                material5.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face5 (va5, material5, getTransform());
 
                //Derrière.
                VertexArray va6(sf::Quads, 4, this);
                Vertex v21(Vector3f(-1, -1, -1));
                Vertex v22(Vector3f(1, -1, -1));
                Vertex v23(Vector3f(1, 1, -1));
                Vertex v24(Vector3f(-1, 1, -1));
                va6[0] = v21;
                va6[1] = v22;
                va6[2] = v23;
                va6[3] = v24;
                Material material6;
                material6.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face6 (va6, material6, getTransform());
                setName("SKYBOX");
Donc je crée 6 faces qui ont chacune 4 sommets. Mais je me retrouve avec un problème inquiétant. En effet, lors de l'ajout d'une de mes faces dans mon std::vector, lors de la récupération de la face après l'ajout de la face dans mon std::vector, la position de mes 4 sommets est de 0 hors que ce n'était pas le cas avant d'ajouter la face dans mon std::vector, le plus bizarre c'est que le bug ne se fait que avec la face n°3.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
void GameObject::addFace (Face face) {
            faces.push_back(face);
            Face f = faces.back();
            if (name == "SKYBOX") {
                for (unsigned int i = 0; i < f.getVertexArray().getVertexCount(); i++) {
                    std::cout<<f.getVertexArray()[i].position.x<<std::endl;
                }
            }
        }
Pour la face 3 seulement (celle du dessous), la position de mes sommets est de 0 après l'ajout de la face dans le std::vector, hors qu'elle devrait être de -1 et de 1. Pour les autres faces la position est bonne.

Bug de std::vector ?

Merci.

PS : j'utilise mingw-w64 version 12.
PS2 : A cause de ça j'ai une face de ma cubemap qui ne s'affiche pas.

EDIT : apparemment c'est avant le problème c'est lorsque je passe la face en argument de la fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void GameObject::addFace (Face face) {
            if (name == "SKYBOX") {
                for (unsigned int i = 0; i < face.getVertexArray().getVertexCount(); i++) {
                    std::cout<<face.getVertexArray()[i].position.x<<std::endl;
                }
            }
Déjà là la position de mes sommets n'est plus bonne pour la face3.

EDIT 2 : ah bah j'ai trouvé j'avais oublié de changer v3 par v4 ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
//Dessous.
                VertexArray va4(sf::Quads, 4, this);
                Vertex v13(Vector3f(-1, -1, -1));
                Vertex v14(Vector3f(1, -1, -1));
                Vertex v15(Vector3f(1, -1, 1));
                Vertex v16(Vector3f(-1, -1, 1));
                va4[0] = v13;
                va4[1] = v14;
                va4[2] = v15;
                va4[3] = v16;
                Material material4;
                material4.addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                Face face4 (va4, material4, getTransform());