예제 #1
0
            void Renderer2D::drawListOfTriangleSets(const vector<hesperia::decorator::models::TriangleSet> &listOfTriangleSets, const hesperia::data::environment::Point3 &position, const hesperia::data::environment::Point3 &rotation) {
                vector<TriangleSet>::const_iterator it = listOfTriangleSets.begin();
                while (it != listOfTriangleSets.end()) {
                    if ((*it).m_vertices.size() > 0) {
                        setColor((*it).m_material.getDiffuse());
                        setLineWidth(1.0);

                        // Fix inside OBJ-Wavefront-Models (OBJXArchive) (rotated 90°)!
                        vector<Point3> vertices = (*it).m_vertices;
                        vector<Point3> rotatedVertices;
                        vector<Point3>::iterator jt = vertices.begin();
                        while (jt != vertices.end()) {
                            Point3 p = (*jt).rotateX(cartesian::Constants::PI/2.0);

                            p.rotateX(rotation.getX());
                            p.rotateY(rotation.getY());
                            p.rotateZ(rotation.getZ());
                            p += position;

                            rotatedVertices.push_back(p);
                            jt++;
                        }

                        drawPolyLine(rotatedVertices);
                    }
                    it++;
                }
            }
예제 #2
0
        Point3 Transformation::transformInversely(const Point3 &coordinate, const Position &position) const {
            Point3 cc = coordinate;

            // Rotate the coordinate.
            cc.rotateX(-1 * position.getRotation().getX());
            cc.rotateY(-1 * position.getRotation().getY());
            cc.rotateZ(-1 * position.getRotation().getZ());

            // Translate the coordinate.
            cc -= position.getPosition();

            return cc;
        }
예제 #3
0
            void Renderer2D::drawTriangleSet(const TriangleSet &ts, const Point3 &position, const Point3 &rotation) {
                vector<Point3> points;
                vector<Point3>::const_iterator it = ts.m_vertices.begin();
                while (it != ts.m_vertices.end()) {
                    Point3 p = (*it);
                    p.rotateX(rotation.getX());
                    p.rotateY(rotation.getY());
                    p.rotateZ(rotation.getZ());

                    p += position;

                    points.push_back(p);

                    it++;
                }

                drawPolyLine(points);
            }