Ejemplo n.º 1
0
void ScenarioRenderer::loadGroundBasedComplexModel(ComplexModel &cm) {
    SharedPointer<istream> in = m_scnxArchive->getModelData(cm.getModelFile());
    if (in.isValid()) {
        // Load model.
        OBJXArchive *objxArchive = NULL;
        if (cm.getModelFile().find(".objx") != string::npos) {
            objxArchive = OBJXArchiveFactory::getInstance().getOBJXArchive(*in);
        }
        else if (cm.getModelFile().find(".obj") != string::npos) {
            objxArchive = OBJXArchiveFactory::getInstance().getOBJXArchiveFromPlainOBJFile(*in);
        }

        if (objxArchive != NULL) {
            m_listOfLoadedOBJXArchives.push_back(objxArchive);

            vector<TriangleSet> listOfTriangleSets = objxArchive->getListOfTriangleSets();

            if (listOfTriangleSets.size() > 0) {
                clog << "OBJ model successfully opened (containing " << listOfTriangleSets.size() << " sets of triangles)." << endl;
                clog << "  Translation: " << cm.getPosition().toString() << endl;
                clog << "  Rotation: " << cm.getRotation().toString() << endl;

                m_mapOfGroundBasedComplexModels[cm.toString()] = listOfTriangleSets;
            }
            else {
                clog << "OBJ model could not be opened." << endl;
            }
        }
    }
}
Ejemplo n.º 2
0
void ScenarioRenderer::visitSurroundings(Surroundings &s) {
    Lock l(m_scenarioRendererMutex);
    if ( (m_scnxArchive != NULL) && (m_renderer != NULL) ) {
        const vector<Shape*> &listOfShapes = s.getListOfShapes();

        vector<Shape*>::const_iterator it = listOfShapes.begin();
        while (it != listOfShapes.end()) {
            Shape *shape = (*it++);
            if (shape != NULL) {
                ComplexModel *cm = dynamic_cast<data::scenario::ComplexModel*>(shape);
                if (cm != NULL) {
                    vector<TriangleSet> listOfTriangleSets = m_mapOfGroundBasedComplexModels[cm->toString()];

                    // Check if the complex model must be loaded first.
                    if (listOfTriangleSets.size() == 0) {
                        loadGroundBasedComplexModel(*cm);
                    }

                    // Draw list of triangle sets.
                    m_renderer->beginPainting();
                    m_renderer->drawListOfTriangleSets(listOfTriangleSets, cm->getPosition(), cm->getRotation());
                    m_renderer->endPainting();
                }
            }
        }
    }
}