コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: Malla.cpp プロジェクト: hristoivanov/master-ucm-GC
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;
}
コード例 #4
0
ファイル: main.cpp プロジェクト: lcosteroucm/GCOM
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();
}