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++; } }
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; }
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); }