Salut, j'ai une classe ici :
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
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(); }
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; }On dirait que la matrice de transformation existe mais il n'arrive pas à appeler la méthode dessus, je ne comprend pas pourquoi.
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)
Partager