PuntoVector3D* Extrusion::vectT(GLfloat t) { PuntoVector3D* aux = new PuntoVector3D( -(a - b) * sin(t) - c * sin(((a - b) / b) * t) * ((a - b) / b), 0.0f, (a - b) * cos(t) - c * cos(((a - b) / b) * t) * ((a - b) / b), 0 ); aux->normalizar(); return aux; }
PuntoVector3D* Extrusion::vectB(GLfloat t) { PuntoVector3D* c1 = new PuntoVector3D( -(a - b) * sin(t) - c * sin(((a - b) / b) * t) * ((a - b) / b), 0.0f, (a - b) * cos(t) - c * cos(((a - b) / b) * t) * ((a - b) / b), 0 ); PuntoVector3D* c2 = new PuntoVector3D( -(a - b) * cos(t) - c * cos(((a - b) / b) * t) * ((a - b) / b) * ((a - b) / b), 0.0f, -(a - b) * sin(t) + c * sin(((a - b) / b) * t) * ((a - b) / b) * ((a - b) / b), 0 ); PuntoVector3D* aux = c2->productoVectorial(c1); aux->normalizar(); return aux; }
PuntoVector3D* Malla::CalculoVectorNormalPorNewell(Cara* c){ PuntoVector3D* n = new PuntoVector3D(0, 0, 0, 1); for (int i = 0; i < c->getNumeroVertices(); i++){ PuntoVector3D* vertActual = vertice[c->getIndiceVerticeK(i)]; PuntoVector3D* vertSiguiente = vertice[c->getIndiceVerticeK((i + 1) % c->getNumeroVertices())]; int aux = c->getIndiceVerticeK((i + 1) % c->getNumeroVertices()); n->setX((vertActual->getY() - vertSiguiente->getY()) * (vertActual->getZ() + vertSiguiente->getZ())); n->setY((vertActual->getZ() - vertSiguiente->getZ()) * (vertActual->getX() + vertSiguiente->getX())); n->setZ((vertActual->getX() - vertSiguiente->getX()) * (vertActual->getY() + vertSiguiente->getY())); } n->normalizar(); return n; }
void drawScene(){ glMatrixMode(GL_MODELVIEW); glPushMatrix(); // Rotating the scene glRotatef(angX, 1.0f, 0.0f, 0.0f); glRotatef(angY, 0.0f, 1.0f, 0.0f); glRotatef(angZ, 0.0f, 0.0f, 1.0f); glLineWidth(1.5f); // Drawing axes glBegin(GL_LINES); glColor3f(1.0, 0.0, 0.0); glVertex3f(0, 0, 0); glVertex3f(20, 0, 0); glColor3f(0.0, 1.0, 0.0); glVertex3f(0, 0, 0); glVertex3f(0, 20, 0); glColor3f(0.0, 0.0, 1.0); glVertex3f(0, 0, 0); glVertex3f(0, 0, 20); glEnd(); // Drawing the scene glColor3f(1.0, 1.0, 1.0); //........................................... GLfloat xA, xB, xC, xD; GLfloat zA, zB, zC, zD; PuntoVector3D* EYE = new PuntoVector3D(eyeX, 0.0f, eyeZ, 1.0f); //PuntoVector3D* LOOK = new PuntoVector3D(lookX, 0.0f, lookZ, 1.0f); PuntoVector3D* dir = new PuntoVector3D(lookX - eyeX, 0.0f, lookZ - eyeZ, 0.0f); dir->normalizar(); PuntoVector3D* perpen = new PuntoVector3D(-1.0*dir->getZ(), 0.0f, dir->getX(), 0.0f); perpen->escalar((xRight - xLeft) / 2.0f); //aux centro del plano cercano PuntoVector3D* aux = dir->clonar(); aux->escalar(N); aux->sumar(EYE); xA = aux->getX() + perpen->getX(); zA = aux->getZ() + perpen->getZ(); xD = aux->getX() - perpen->getX(); zD = aux->getZ() - perpen->getZ(); delete aux; //aux centro del plano lejano aux = dir->clonar(); aux->escalar(F); aux->sumar(EYE); xB = aux->getX() + perpen->getX(); zB = aux->getZ() + perpen->getZ(); xC = aux->getX() - perpen->getX(); zC = aux->getZ() - perpen->getZ(); delete aux; delete EYE; delete dir; delete perpen; b->dibuja(min(xA, min(xB, min(xC, xD))), min(zA, min(zB, min(zC, zD))), max(xA, max(xB, max(xC, xD))), max(zA, max(zB, max(zC, zD))) ); //........................................... glPopMatrix(); }