#include "frameTransform.h" using namespace std; using namespace qglviewer; // Vec void Viewer::init() { restoreFromFile(); setSceneRadius(1.5); showEntireScene(); setDrawAxis(); glDisable(GL_LIGHTING); help(); } void Viewer::draw() { // Draws line sets (red, green, blue) with different origins, but with a common // end point, located on a circle in the XY plane. const float nbLines = 50.0; glBegin(GL_LINES); for (float i=0; i<nbLines; ++i) { float angle = 2.0*M_PI*i/nbLines; glColor3f(.8,.2,.2); // These lines will never be seen as they are always aligned with the viewing direction. glVertex3fv(camera()->position().address()); glVertex3f (cos(angle), sin(angle), 0.0); glColor3f(.2,.8,.2); // World Coordinates are infered from the camera, and seem to be immobile in the screen. glVertex3fv(camera()->worldCoordinatesOf(Vec(.3*cos(angle), .3*sin(angle), -2.0)).address()); glVertex3f (cos(angle), sin(angle), 0.0); glColor3f(.2,.2,.8); // These lines are defined in the world coordinate system and will move with the camera. glVertex3f(1.5*cos(angle), 1.5*sin(angle), -1.0); glVertex3f(cos(angle), sin(angle), 0.0); } glEnd(); Vec origin = camera()->cameraCoordinatesOf(Vec(0.0, 0.0, 0.0)); cout << "Camera position in world coord. system = " << camera()->position() << endl; cout << "World origin position in camera frame = " << origin << endl; cout << endl; } QString Viewer::helpString() const { QString text("<h2>F r a m e T r a n s f o r m</h2>"); text += "This example illustrates how easy it is to switch between the camera and "; text += "the world coordinate systems : using the <i>camera()->cameraCoordinatesOf()</i> "; text += "and <i>camera::worldCoordinatesOf()</i> functions.<br>"; text += "You can create your own hierarchy of local coordinates systems and each of "; text += "them can be manipulated with the mouse (see the <i>manipulatedFrame</i> and <i>luxo</i> examples). "; text += "Standard functions allow you to convert from any local frame to an other, "; text += "the world/camera relation presented here simply being one of its illustration.<br>"; text += "See <i>examples/frameTransform.html</i> for an explanation of the meaning of these weird lines."; return text; }