Example #1
0
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();
	};
}
Example #2
0
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());
}