void Flecha::drawAt(const Punto &en) const { float largo= vector.module(); Punto punta= en+vector; glColor3f(color.r(),color.g(),color.b()); if(largo<0.001){ //Es muy pequeño o nulo; lo dibujamos como un punto glPointSize(4.0); glBegin(GL_POINTS); glVertex3d(punta.x(),punta.y(),punta.z()); glEnd(); } else { //Si es más grande como un flecha glBegin(GL_LINES); glVertex3d(en.x(),en.y(),en.z()); glVertex3d(punta.x(),punta.y(),punta.z()); glEnd(); glPushMatrix(); glTranslatef(punta.x(),punta.y(),punta.z()); glRotatef(vector.longitude(),0.0,1.0,0.0); glRotatef(-vector.latitude(),1.0,0.0,0.0); glTranslatef(0.0,0.0,-largo/10.0); glutWireCone(largo/50.0,largo/10.0,10,1); glPopMatrix(); }; }
void Poligono::drawWith(const Transformacion &T)const //Dibuja el poligono solido (como Primitiva) { Vector Nt = N.transform( !(T.inverse3x3()) ); glColor3f(color.r(),color.g(),color.b()); glBegin(GL_POLYGON); glNormal3f(Nt.x(),Nt.y(),Nt.z()); for(int i=0; i< nvertices; i++){ Punto vertt = vert[i].transform(T); glVertex3f(vertt.x(),vertt.y(),vertt.z()); } glEnd(); }
Vector Punto::operator -(const Punto &p)const //Resta de puntos genera vector { return Vector(x()-p.x(),y()-p.y(),z()-p.z()); }