Salut, je veux créer un cube comme ceci (une 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
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");
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.
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; } } }
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 :
Déjà là la position de mes sommets n'est plus bonne pour la face3.
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; } }
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());
Partager