Salut, j'ai une classe ici :
Code cpp : 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
            Instance::Instance (Material& material, sf::PrimitiveType pType) : material(material) {
                primType = pType;
                numInstances = 0;
                vertices = VertexArray(pType);
            }
            void Instance::addVertexArray(VertexArray va, TransformMatrix tm) {
 
                m_transforms.push_back(tm);
                m_vertexArrays.push_back(va);
                for (unsigned int i = 0; i < va.getVertexCount(); i++) {
                    Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
                    vertices.append(v);
                }
            }
            void Instance::sortVertexArrays(View& view) {
                vertices.clear();
                std::multimap<float, VertexArray> sortedVA;
                std::multimap<float, TransformMatrix> sortedTM;
                for (unsigned int i = 0; i < m_vertexArrays.size(); i++) {
                    odfaeg::math::Vec3f center;
                    if (m_vertexArrays[i].getEntity() != nullptr) {
                        center = view.getViewMatrix().transform(m_vertexArrays[i].getEntity()->getCenter());
                    }
                    sortedVA.insert(std::make_pair(center.z, m_vertexArrays[i]));
                    sortedTM.insert(std::make_pair(center.z, m_transforms[i]));
                }
                m_vertexArrays.clear();
                m_transforms.clear();
                std::multimap<float, VertexArray>::iterator it;
                std::multimap<float, TransformMatrix>::iterator it2;
                for (it = sortedVA.begin(); it != sortedVA.end(); it++, it2++) {
                    VertexArray va = it->second;
                    TransformMatrix tm = it2->second;
                    m_vertexArrays.push_back(va);
                    m_transforms.push_back(tm);
                    for (unsigned int i = 0; i < it->second.getVertexCount(); i++) {
                        Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
                        vertices.append(v);
                    }
                }
            }
            VertexArray& Instance::getAllVertices() {
                return vertices;
            }
            std::vector<VertexArray> Instance::getVertexArrays() {
                return m_vertexArrays;
            }
            void Instance::clear() {
                m_transforms.clear();
                m_vertexArrays.clear();
            }
Ou je ne fais que d'ajouter et trier des tableaux de sommets. Mais lorsque j'appelle la méthode sortVertexArrays j'ai un crash :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
int main(int argc, char* argv[])
{   
    RenderWindow window(sf::VideoMode(800, 600, 32), "Test odfaeg",sf::Style::Default, sf::ContextSettings(0, 0, 4, 3, 0));
    Tile tile(nullptr, Vec3f(0, 0, 0), Vec3f(100, 100, 0), sf::IntRect(0, 0, 0, 0));
    Instance instance(tile.getFaces()[0]->getMaterial(), sf::Quads);
    instance.addVertexArray(tile.getFaces()[0]->getVertexArray(), tile.getTransform());
    instance.sortVertexArrays(window.getView());
    return 0;    
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
#0 0x80aee2e	odfaeg::graphic::Instance::sortVertexArrays(this=0xbfffed40, view=...) (/home/laurent/Développement/Projets-c++/ODFAEG/src/odfaeg/Graphics/batcher.cpp:194)
#1 0x808d1aa	main(argc=1, argv=0xbffff614) (/home/laurent/Développement/Projets-c++/ODFAEG-DEMO/main.cpp:100)
On dirait que la matrice de transformation existe mais il n'arrive pas à appeler la méthode dessus, je ne comprend pas pourquoi.