/**
 *  DrawNeutral function.
 *
 *  This function draws the stick figure depending on the
 *  transforming stage of the player or draws a diamond if the
 *  player is not tracked.
 *
 *  @param player is the ID of the player.
 *
 */
void NeutralModel :: drawNeutral (XnUserID player)
{
    // UserGenerator.
    UserGenerator userGen;

    // Color of the stick figure.
    XnFloat color[3];

    // Material properties.
    GLfloat mat_specular[] = { 0.3, 0.3, 0.3, 0.3 };
    GLfloat mat_shininess[] = { 10.0 };

    // Center of mass.
    XnPoint3D com;

    // Player's stage.
    int stage;

    float ax;
    Vector3D a;
    Vector3D b;
    Vector3D c;
    Vector3D u;
    Vector3D v;
    Vector3D w;

    GLuint mode;

    // Select the players color according his ID.
    color[0] = Colors[player % nColors][0];
    color[1] = Colors[player % nColors][1];
    color[2] = Colors[player % nColors][2];

    // Set the material for the stick figure.
    GLfloat materialColor[] = {color[0], color[1], color[2], 1.0f};
    
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materialColor);
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

    userGen = nm_UserDetector -> retUserGenerator();
    SkeletonCapability skelCap = userGen.GetSkeletonCap();

    mode =  GLM_SMOOTH | GLM_MATERIAL;


    a = Vector3D(joint[LSHOULDER]);
    b = Vector3D(joint[RSHOULDER]);
    c = Vector3D(joint[RHIP]);

    u = b - a;
    v = c - a;

    w = u.cross(v);
    w.y = 0.0;
    w.normalize();

    ax = 57.2957795 * acos(w.z);

    if (w.x <= 0.0) {
        ax = -ax;
    }

    // Init the drawing process.
    // Draws a stick figure if player is been tracked.
    if (skelCap.IsTracking(player)) {
       
        // Get player's stage.
        stage = nm_UserDetector -> retStage(player);

        loadJoints(player, skelCap);

        // Drawing legs.
        if ((stage >= 0) && (stage < 4)) { 

            // Left leg.
            glPushMatrix();
                orientMatrix(joint[RHIP],joint[RKNEE]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(250.0, 250.0, 250.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.thigh, mode); 

            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[RKNEE],joint[RFOOT]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(100.0, 100.0, 100.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.leg, mode); 
            glPopMatrix();

            // Right leg.
            glPushMatrix();
                orientMatrix(joint[LHIP], joint[LKNEE]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(-250.0, 250.0, 250.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.thigh, mode); 

            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[LKNEE], joint[LFOOT]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(-100.0, 100.0, 100.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.leg, mode); 

            glPopMatrix();
                  
            // Foots.
            glPushMatrix();
                glTranslatef( joint[LFOOT].X, joint[LFOOT].Y, joint[LFOOT].Z);
                glScalef(40.0,-40.0,-40.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glTranslatef(0.0,-0.25, 0.5);
                glmDraw(zamusModelParts.foot, mode); 

            glPopMatrix();
            
            glPushMatrix();
                glTranslatef( joint[RFOOT].X, joint[RFOOT].Y, joint[RFOOT].Z);
                glScalef(-40.0,-40.0,-40.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glTranslatef(0.0,-0.25, 0.5);
                glmDraw(zamusModelParts.foot, mode); 

            glPopMatrix();
            


        } 
        else {
            drawLimp(joint[LKNEE],joint[LFOOT]);
            drawLimp(joint[RKNEE],joint[RFOOT]);
            drawLimp(joint[LHIP],joint[LKNEE]);
            drawLimp(joint[RHIP],joint[RKNEE]);
        }

        // Draw torso.
        if ((stage > 0) && (stage < 4)) {

            glPushMatrix();
                orientMatrix(joint[NECK],joint[TORSO]);
                glScalef(400.0, 400.0, 400.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glTranslatef(0.0, -0.1, 0.0);
                glmDraw(zamusModelParts.chest, mode); 
            glPopMatrix();

        }
        else {
            drawTorso();
        }

        // Drawing arms.
        if (stage == 2) {
    
            // Shoulders
            glPushMatrix();
                glTranslatef(joint[LSHOULDER].X, 
                             joint[LSHOULDER].Y,
                             joint[LSHOULDER].Z);
                glRotatef(-ax, 0.0,-2.0, 0.0);
                glTranslatef(-30.0,-40.0, 0.0);
                glScalef(500.0,-500.0, 500.0);
                glmDraw(zamusModelParts.shoulder, mode); 
            glPopMatrix();
            glPushMatrix();
                glTranslatef(joint[RSHOULDER].X, 
                             joint[RSHOULDER].Y,
                             joint[RSHOULDER].Z);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glTranslatef( 30.0,-40.0, 0.0);
                glScalef(500.0,-500.0, 500.0);
                glmDraw(zamusModelParts.shoulder, mode); 
            glPopMatrix();

            // LeftArm
            glPushMatrix();
                orientMatrix(joint[RSHOULDER], joint[RELBOW]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(500.0, 500.0, 500.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.arm, mode); 
            glPopMatrix();
            glPushMatrix();
                orientMatrix(joint[RELBOW], joint[RHAND]);
                glTranslatef( 0.0, 0.0, 60.0);
                glScalef(250.0, 250.0, 250.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.forearm, mode); 
            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[LSHOULDER], joint[LELBOW]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(500.0, 500.0, 500.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.arm, mode); 
            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[LELBOW],joint[LHAND]);
                glTranslatef( 0.0, 0.0, 80.0);
                glScalef(300.0, 300.0, 300.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(zamusModelParts.cannon, mode); 
            glPopMatrix();
           
        }
        else if ((stage == 4) || (stage == 5)) {

            glPushMatrix();
                glTranslatef(joint[LSHOULDER].X, 
                             joint[LSHOULDER].Y,
                             joint[LSHOULDER].Z);
                glRotatef(-ax, 0.0,-2.0, 0.0);
                glScalef(500.0,-500.0, 500.0);
                glmDraw(linqModelParts.shoulder, mode); 
            glPopMatrix();

            glPushMatrix();
                orientMatrix(joint[LSHOULDER],joint[LELBOW]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(-180.0, 180.0, 180.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(linqModelParts.thigh, mode); 
            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[LELBOW],joint[LHAND]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(-80.0, 80.0, 80.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(linqModelParts.leg, mode); 
            glPopMatrix();
            
        }
        else {
            drawLimp(joint[LSHOULDER],joint[LELBOW]);
            drawLimp(joint[LELBOW],joint[LHAND]);
        }
        
        if (stage == 5) {
        
            
            glPushMatrix();
                glTranslatef(joint[RSHOULDER].X, 
                             joint[RSHOULDER].Y, 
                             joint[RSHOULDER].Z);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glScalef(500.0,-500.0, 500.0);
                glmDraw(linqModelParts.shoulder, mode); 
            glPopMatrix();


            glPushMatrix();
                orientMatrix(joint[RSHOULDER],joint[RELBOW]);
                glTranslatef( 0.0, 0.0, 50.0);
                glScalef(350.0, 350.0, 350.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(ax, 0.0,-1.0, 0.0);
                glmDraw(linqModelParts.arm, mode); 
            glPopMatrix();
            
            glPushMatrix();
                orientMatrix(joint[RELBOW],joint[RHAND]);
                glTranslatef( 0.0, 0.0, 60.0);
                glScalef(250.0, 250.0, 250.0);
                glRotatef(90, -1.0, 0.0, 0.0);
                glRotatef(-ax, 0.0,-1.0, 0.0);
                glmDraw(linqModelParts.forearm, mode); 
            glPopMatrix();
        
        } 
        else {
            drawLimp(joint[RSHOULDER],joint[RELBOW]);
            drawLimp(joint[RELBOW],joint[RHAND]);
        }


        // Draw head.
        drawHead();
    }
    // Draws a diamond in the player's center of mass.
    else {
        userGen.GetCoM(player, com);
        nm_DepthGenerator.ConvertRealWorldToProjective(1, &com, &com);

        glPushMatrix();

            glTranslatef(com.X, com.Y, com.Z);
            glutSolidSphere(60.0, 4, 2);

        glPopMatrix();
    }

}
Ejemplo n.º 2
0
void MapObject::draw(float size, bool mapDependency) {
	if (model != nullptr) {
		glmDraw(model, GLM_COLOR | GLM_SMOOTH, 0);
	}
}
Ejemplo n.º 3
0
void
display(void)
{
    static char s[256], t[32];
    static char* p;
    static int frames = 0;
    
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    //glBindFramebuffer(GL_FRAMEBUFFER, shadowBuffer);
    
    glUseProgram(shadowShaderID);
    
    // Render to our framebuffer
    
    glViewport(0,0,windowW,windowH); // Render on the whole framebuffer, complete from the lower left corner to the upper right
    
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    
    glTranslatef(pan_x, pan_y, 0.0);
    
    gltbMatrix();
    
#if 0   /* glmDraw() performance test */
    if (material_mode == 0) { 
        if (facet_normal)
            glmDraw(model, GLM_FLAT);
        else
            glmDraw(model, GLM_SMOOTH);
    } else if (material_mode == 1) {
        if (facet_normal)
            glmDraw(model, GLM_FLAT | GLM_COLOR);
        else
            glmDraw(model, GLM_SMOOTH | GLM_COLOR);
    } else if (material_mode == 2) {
        if (facet_normal)
            glmDraw(model, GLM_FLAT | GLM_MATERIAL);
        else
            glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
    }
#else
    glCallList(model_list);
#endif
    
    
    drawTexToScreen();
    
    glDisable(GL_LIGHTING);
    if (bounding_box) {
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glEnable(GL_BLEND);
        glEnable(GL_CULL_FACE);
        glColor4f(1.0, 0.0, 0.0, 0.25);
        glutSolidCube(2.0);
        glDisable(GL_BLEND);
    }
    
    glPopMatrix();
    
    if (stats) {
        /* XXX - this could be done a _whole lot_ faster... */
        int height = glutGet(GLUT_WINDOW_HEIGHT);
        glColor3ub(0, 0, 0);
        sprintf(s, "%s\n%d vertices\n%d triangles\n%d normals\n"
            "%d texcoords\n%d groups\n%d materials",
            model->pathname, model->numvertices, model->numtriangles, 
            model->numnormals, model->numtexcoords, model->numgroups,
            model->nummaterials);
        shadowtext(5, height-(5+18*1), s);
    }
    
    /* spit out frame rate. */
    frames++;
    if (frames > NUM_FRAMES) {
        sprintf(t, "%g fps", frames/elapsed());
        frames = 0;
    }
    if (performance) {
        shadowtext(5, 5, t);
    }
    
    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    
    
    glutSwapBuffers();
    glEnable(GL_LIGHTING);
}
Ejemplo n.º 4
0
/* DRAW POLICE
*	funzione che disegna le navette nemiche caricate come obj
* 		model		modello del nemico caricato
*		pos		posizione del nemico
*		direcion (r1)	orientazione (versore direzione di movimento)	
*
*/
GLvoid drawPolice(GLMmodel* model, Point3 pos, Point3 r1){
	// vettore temporaneo: ci serve per definire una terna di assi ortogonali tra loro di cui uno di essi e' r3  	
	Point3 temp;
	temp.x=1;
	temp.y=1;
	temp.z=1;
	
	// CI TROVIAMO LA TERNA DI ASSI ORTOGONALI TRA LORO:	r1,r2,r3
	// normalizziamo r1, anche se dovrebbe essere gia' stato normalizzato	
	r1=Normalize(r1);
	// il prodotto esterno del vettore 'r1' per un qualsiasi vettore 'temp', mi fornisce il vettore 'r2' ortogonale a r1
	Point3 r2=Normalize(Cross(r1, temp));
	// ci troviamo il versore r3, ortogonale a 'r2' e quindi anche a 'r1'  
	Point3 r3=Normalize(Cross(r1,r2));
	
	// ci creiamo un vettore che definisce la matrice (4x4) di rototraslazione che dobbiamo applicare
	/* MATRICE DI ROTO-TRASLAZIONE
		Mappatura indici del vettore sulla matrice:
			0	1	2	3
			4	5	6	7
			8	9	10	11
			12	13	14	15
		POSIZIONI:		
			0:2 		coordinate di r1		(prime tre posizioni della prima riga)
			4:6			coordinate di r2		(prime tre posizioni della seconda riga)
			8:10		coordinate di r3		(prime tre posizioni della terza riga)
			12:14		coordinate della posizione	(prime tre posizioni della quarta riga)
			3,7,11		impostate a 0			(prime tre posizioni dell'ultima colonna)
			15			impostata a 1
	*/
	GLfloat r[16];
	r[0]=r1.x;
	r[1]=r1.y;
	r[2]=r1.z;

	r[4]=r2.x;
	r[5]=r2.y;
	r[6]=r2.z;
	
	r[8]=r3.x;
	r[9]=r3.y;
	r[10]=r3.z;
	
	r[3]=0;
	r[7]=0;
	r[11]=0;
	
	r[12]=pos.x;
	r[13]=pos.y;
	r[14]=pos.z;
	r[15]=1;	
		
	glPushMatrix();
		glMultMatrixf(r);
		//printf("diff=%f\n", (glutGet(GLUT_ELAPSED_TIME)-anglePolice)*0.032); fflush(stdout);
		// se non sono nel freeze		
		if(!freezeShip)
			anglePolice += 0.896000;
		glRotatef(anglePolice, 1, 0, 0);
		//ROTAZIONE perche' stia dritto:		
		//glRotatef(-135, 1, 0, 0);
		glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);	
		//glmDraw(model, GLM_SMOOTH|GLM_TEXTURE|GLM_MATERIAL);		
	glPopMatrix();
}
Ejemplo n.º 5
0
void Inicializa(){
	char str[40+1];
	
	OB_ovni.ponto.x = 0.0;
	OB_ovni.ponto.y = 0.0;
	OB_ovni.ponto.z = 0.0;
	
	OB_nave.ponto.x = 0.0;
	OB_nave.ponto.y = -17.5;
	OB_nave.ponto.z = 3.0;
	
	for(i=0;i<QTD_MISSEL_NAVE;i++){
		OB_missel1[i].ponto.x = OB_nave.ponto.x;
		OB_missel1[i].ponto.y = OB_nave.ponto.y + trans_missel_nave;
		OB_missel1[i].ponto.z = 0;
		OB_missel1[i].habilitado = false;
		OB_missel1[i].dispara_missel_esfera = false;
	}
	
	for(i=0;i<QTD_MISSEL_OVNI;i++){
		OB_missel2[i].ponto.x = 0.0;
		OB_missel2[i].ponto.y = 0.0;
		OB_missel2[i].ponto.z = 0.0;
		OB_missel2[i].habilitado = false;
		OB_missel2[i].dispara_missel_esfera = false;
	}
	
	//imagem = CarregaJPG("490020730_5d1ef91b20_o.jpg");

	//importarBlenderWrl("nave_pronta3.wrl",&SA_faces,&points);
	sprintf(textpontos,"%s","Pontos: 0");
	//printf("Inicializa 1\n");



	/*aviao = CarregaObjeto("nave_pronta_gabriel2.obj", true);
	if(aviao == NULL){
		printf("ERRO teste.obj\n");
	}else{
		printf("Nave Importado\n");
	}*/
	
	GLM_background = glmReadOBJ("fundo.obj");
	GLM_background_list = glGenLists(1);
	glNewList(GLM_background_list, GL_COMPILE);
	glmDraw(GLM_background, GLM_NONE|GLM_SMOOTH|GLM_TEXTURE|GLM_COLOR);
	glEndList();
	
	GLM_aviao = glmReadOBJ("nave_pronta_gabriel2.obj");
	GLM_aviao_list = glGenLists(1);
	glNewList(GLM_aviao_list, GL_COMPILE);
	glmDraw(GLM_aviao, GLM_SMOOTH|GLM_TEXTURE|GLM_COLOR);
	glEndList();
	
	GLM_aviao2 = glmReadOBJ("nave_pronta_gabriel2.obj");
	GLM_aviao_list2 = glGenLists(1);
	glNewList(GLM_aviao_list2, GL_COMPILE);
	glmDraw(GLM_aviao2, GLM_SMOOTH);
	glEndList();
	
	
	GLM_missel = glmReadOBJ("missel.obj");
	GLM_missel_list = glGenLists(1);
	glNewList(GLM_missel_list, GL_COMPILE);
	glmDraw(GLM_missel, GLM_NONE|GLM_SMOOTH|GLM_TEXTURE|GLM_COLOR);
	glEndList();
	
	GLM_missel2 = glmReadOBJ("missel2.obj");
	GLM_missel_list2 = glGenLists(1);
	glNewList(GLM_missel_list2, GL_COMPILE);
	glmDraw(GLM_missel2, GLM_NONE|GLM_SMOOTH|GLM_TEXTURE|GLM_COLOR);
	glEndList();
	
	/*missel=glGenLists(1);
	glNewList(missel,GL_COMPILE);
	importarBlenderWrl("missel.wrl",&SA_faces,&points);
	glEndList();

	DestroiRegFaces(&SA_faces);
	DestroiRegPoints(&points);*/


	/*ovni = CarregaObjeto("ovni.obj", true);
	if(ovni == NULL){
		printf("ERRO ovni.obj\n");
	}else{
		printf("Ovni Importado\n");
	}*/
	
	GLM_ovni = glmReadOBJ("ovni.obj");
	GLM_ovni_list = glGenLists(1);
	glNewList(GLM_ovni_list, GL_COMPILE);
	glmDraw(GLM_ovni, GLM_NONE|GLM_SMOOTH|GLM_TEXTURE|GLM_MATERIAL);
	glEndList();
	
	/*background = CarregaObjeto("background.obj", false);
	if(background == NULL){
		printf("ERRO background.obj\n");
	}else{
		printf("background Importado\n");
	}*/
	
	CriaDisplayList(NULL);

	iluminacao();
	InitEsferas(esfera);



}
Ejemplo n.º 6
0
void Wheel::draw(float timeElapsed, float speed) {
    
    //glPushMatrix();
    //assuming the current position where to make the wheel
    //since it is always drawn with the car, so we can have the angle to turn the wheel from the time elapsed and Velocity
    int i;
		

    float angleRotated = (10*speed*timeElapsed*180)/(M_PI*rad); //making the circle in XY plane

		angle += angleRotated;
		if(angle > 360) {
			angle = angle-360;
		}
		if(angle < 0) {
			angle += 360;
		}

//	 printf(">>angle = %f\n", timeElapsed);
   
    
    
    glPushMatrix();
		glColor3f(1,1,1);
		glRotatef(angle,1,0,0);

		int mode = GLM_NONE;    /* reset mode */

		mode = mode | GLM_SMOOTH;

		mode = mode | GLM_2_SIDED;

		mode = mode | GLM_MATERIAL;

		mode = mode | GLM_TEXTURE;

//		glTranslatef(0,20,0);
		glPushMatrix();
		glmUnitize(wheel_model);
		glScalef(18, 18,18);
		if (wheel_model) {
			glEnable(GL_TEXTURE_2D);
			glmDraw(wheel_model, mode);
			glDisable(GL_TEXTURE_2D);

		}
		glPopMatrix();


	


		/*
    glBindTexture(GL_TEXTURE_2D, _wheel);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
    glBegin(GL_POLYGON);
    
    for(i=0; i<360; ++i) {
        glTexCoord2f((cos((i)*M_PI/180)+1)/2, (sin((i)*M_PI/180)+1)/2);
        glVertex2f(rad*cos((i)*M_PI/180), rad*sin((i)*M_PI/180));
    }
    glEnd();*/
    glPopMatrix();
    //glRotatef(angleRotated,0,0,1);
    //glPopMatrix();
}
Ejemplo n.º 7
0
/* DRAW ENEMY
*	funzione che disegna le navette nemiche caricate come obj
* 		model		modello del nemico caricato
*		pos		posizione del nemico
*		direcion (r3)	orientazione (versore direzione di movimento)	
*
*/
GLvoid drawEnemy(GLMmodel* model, Point3 pos, Point3 r3){	
	// vettore temporaneo: ci serve per definire una terna di assi ortogonali tra loro di cui uno di essi e' r3  	
	Point3 temp;
	temp.x=1;
	temp.y=1;
	temp.z=1;
	
	// CI TROVIAMO LA TERNA DI ASSI ORTOGONALI TRA LORO:	r1,r2,r3
	// normalizziamo r3, anche se dovrebbe essere gia' stato normalizzato	
	r3=Normalize(r3);
	// il prodotto esterno del vettore 'r3' per un qualsiasi vettore 'temp', mi fornisce il vettore 'r1' ortogonale a r3
	Point3 r1=Normalize(Cross(r3, temp));
	// ci troviamo il versore r2, ortogonale a 'r1' e quindi anche a 'r3'  
	Point3 r2=Normalize(Cross(r3,r1));
	
	// ci creiamo un vettore che definisce la matrice (4x4) di rototraslazione che dobbiamo applicare
	/* MATRICE DI ROTO-TRASLAZIONE
		Mappatura indici del vettore sulla matrice:
			0	1	2	3
			4	5	6	7
			8	9	10	11
			12	13	14	15
		POSIZIONI:		
			0:2 		coordinate di r1		(prime tre posizioni della prima riga)
			4:6		coordinate di r2		(prime tre posizioni della seconda riga)
			8:10		coordinate di r3		(prime tre posizioni della terza riga)
			12:14		coordinate della posizione	(prime tre posizioni della quarta riga)
			3,7,11		impostate a 0			(prime tre posizioni dell'ultima colonna)
			15		impostata a 1
	*/
	GLfloat r[16];
	r[0]=r1.x;
	r[1]=r1.y;
	r[2]=r1.z;

	r[4]=r2.x;
	r[5]=r2.y;
	r[6]=r2.z;
	
	r[8]=r3.x;
	r[9]=r3.y;
	r[10]=r3.z;
	
	r[3]=0;
	r[7]=0;
	r[11]=0;
	
	r[12]=pos.x;
	r[13]=pos.y;
	r[14]=pos.z;
	r[15]=1;	
	
	/*glDisable(GL_LIGHTING);

	glPushAttrib(GL_ALL_ATTRIB_BITS);
	glPushMatrix();

		glEnable(GL_LIGHT0);
		glEnable(GL_LIGHT1);
		glEnable(GL_LIGHT2);
		glEnable(GL_COLOR_MATERIAL);			// abilita il materiale
		glColorMaterial(GL_FRONT, GL_EMISSION);	// tipo di materiale
*/

	glPushMatrix();
		// applichiamo la roto-traslazione
		glMultMatrixf(r);
		if(!freezeShip)
			angleEnemy += 0.896000;
		glRotatef(angleEnemy, 0, 0, 1);	
		glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
		//glmDraw(model, GLM_SMOOTH|GLM_TEXTURE|GLM_MATERIAL);		
	glPopMatrix();
/*		
		glDisable(GL_COLOR_MATERIAL);			// disabilita il materiale
		glDisable(GL_LIGHT2);
		glDisable(GL_LIGHT1);
		glDisable(GL_LIGHT0);

	glPopMatrix();
	glPopAttrib();


	//glEnable(GL_LIGHTING);}
*/
}
Ejemplo n.º 8
0
void LoadSelectionModels()
{

	//Setup Teapot
	SelectTeapot = glmReadOBJ( "./models/teapot.obj" );
	glmUnitize( SelectTeapot );
	glmFacetNormals( SelectTeapot );
	glmVertexNormals( SelectTeapot, 180 );

	TeapotList = glGenLists(1);
	glNewList(TeapotList,GL_COMPILE);
	 glmDraw( SelectTeapot, GLM_SMOOTH );
	glEndList();

	//Setup Triceratops
	SelectTriceratops = new HalfEdgeModel( "./models/triceratops.hem", TYPE_HEM_FILE );
	if (!SelectTriceratops->IsValid()) printf( "triceratops.hem not loaded!\n" );
	TriceratopsList = SelectTriceratops->CreateOpenGLDisplayList(USE_TRIANGLES | WITH_NORMALS);

	//Setup Door
	SelectDoor = glmReadOBJ( "./models/selection/door.obj" );
	glmUnitize( SelectDoor );
	glmFacetNormals( SelectDoor );
	glmVertexNormals( SelectDoor, 180 );

	DoorList = glGenLists(1);
	glNewList(DoorList,GL_COMPILE);
	 glmDraw( SelectDoor, GLM_SMOOTH );
	glEndList();

	//Setup Fridge
	SelectFridge = glmReadOBJ( "./models/selection/fridge1.obj" );
	glmUnitize( SelectFridge );
	glmFacetNormals( SelectFridge );
	glmVertexNormals( SelectFridge, 180 );

	FridgeList = glGenLists(1);
	glNewList(FridgeList,GL_COMPILE);
	 glmDraw( SelectFridge, GLM_SMOOTH );
	glEndList();

	//Setup SinkStand
	SelectSinkStand = glmReadOBJ( "./models/selection/sinkstand.obj" );
	glmUnitize( SelectSinkStand );
	glmFacetNormals( SelectSinkStand );
	glmVertexNormals( SelectSinkStand, 180 );

	SinkStandList = glGenLists(1);
	glNewList(SinkStandList,GL_COMPILE);
	 glmDraw( SelectSinkStand, GLM_SMOOTH );
	glEndList();

	//Setup Sink
	SelectSink = glmReadOBJ( "./models/selection/sink.obj" );
	glmUnitize( SelectSink );
	glmFacetNormals( SelectSink );
	glmVertexNormals( SelectSink, 180 );

	SinkList = glGenLists(1);
	glNewList(SinkList,GL_COMPILE);
	 glmDraw( SelectSink, GLM_FLAT);
	glEndList();

	//Setup Table
	SelectTable = glmReadOBJ( "./models/selection/table1.obj" );
	glmUnitize( SelectTable );
	glmFacetNormals( SelectTable );
	glmVertexNormals( SelectTable, 180 );

	TableList = glGenLists(1);
	glNewList(TableList,GL_COMPILE);
	 glmDraw( SelectTable, GLM_SMOOTH );
	glEndList();

	//Setup Chair
	SelectChair = glmReadOBJ( "./models/selection/chair1.obj" );
	glmUnitize( SelectChair );
	glmFacetNormals( SelectChair );
	glmVertexNormals( SelectChair, 180 );

	ChairList = glGenLists(1);
	glNewList(ChairList,GL_COMPILE);
	 glmDraw( SelectChair, GLM_SMOOTH );
	glEndList();


	//Setup Sideboard
	SelectSideboard = glmReadOBJ( "./models/selection/sideboard.obj" );
	glmUnitize( SelectSideboard );
	glmFacetNormals( SelectSideboard );
	glmVertexNormals( SelectSideboard, 180 );

	SideboardList = glGenLists(1);
	glNewList(SideboardList,GL_COMPILE);
	 glmDraw( SelectSideboard, GLM_FLAT );
	glEndList();

	//Setup Microwave
	SelectMicrowave = glmReadOBJ( "./models/selection/microwave.obj" );
	glmUnitize( SelectMicrowave );
	glmFacetNormals( SelectMicrowave );
	glmVertexNormals( SelectMicrowave, 180 );

	MicrowaveList = glGenLists(1);
	glNewList(MicrowaveList,GL_COMPILE);
	 glmDraw( SelectMicrowave, GLM_SMOOTH );
	glEndList();

	//Setup Cabinet
	SelectCabinet = glmReadOBJ( "./models/selection/cabinet.obj" );
	glmUnitize( SelectCabinet );
	glmFacetNormals( SelectCabinet );
	glmVertexNormals( SelectCabinet, 180 );

	CabinetList = glGenLists(1);
	glNewList(CabinetList,GL_COMPILE);
	 glmDraw( SelectCabinet, GLM_SMOOTH );
	glEndList();

}
Ejemplo n.º 9
0
void Player::forceRender() {
    glPushMatrix();
    GLfloat emission[] = { 0.5f, 0.5f, 0.5f, 1.f };
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission);
    glColor3f(1.f, 1.f, 1.f);
    glTranslatef((GLfloat) (std::abs(current.x)), -current.y*2, (GLfloat) (std::abs(current.z)));
    glRotatef(-current.roty, 0.f, 1.f, 0.f);
    glScalef(0.5f, 0.5f, 0.5f);
    //glTranslatef(-0.5f, 0.0f, -0.5f);
    glmDraw(playerModel, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
    GLfloat noEmission[] = { 0.f, 0.f, 0.f, 1.f };
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, noEmission);
    glPopMatrix();

    /*glPushMatrix();
    glScalef(1.0f, 0.5f, 1.0f);
    glTranslatef((GLfloat) (std::abs(current.x)), -current.y*2, (GLfloat) (std::abs(current.z)));
    glRotatef(-current.roty, 0.f, 1.f, 0.f);
    glTranslatef(-0.5f, 0.0f, -0.5f);

    glBegin(GL_QUADS);
    glColor3f   (1.0f,0.0f,0.0f);

    glTexCoord2f(      1.f, 0.f);
    glVertex3f  ( 0.f, 0.f, 0.f);
    glTexCoord2f(      1.f, 1.f);
    glVertex3f  ( 0.f, 0.f, 1.f);
    glTexCoord2f(      0.f, 1.f);
    glVertex3f  ( 0.f,-1.f, 1.f);
    glTexCoord2f(      0.f, 0.f);
    glVertex3f  ( 0.f,-1.f, 0.f);

    glTexCoord2f(      1.f, 1.f);
    glVertex3f  ( 1.f, 0.f, 1.f);
    glTexCoord2f(      1.f, 0.f);
    glVertex3f  ( 1.f, 0.f, 0.f);
    glTexCoord2f(      0.f, 0.f);
    glVertex3f  ( 1.f,-1.f, 0.f);
    glTexCoord2f(      0.f, 1.f);
    glVertex3f  ( 1.f,-1.f, 1.f);

    glTexCoord2f( 1.f, 1.f);
    glVertex3f  ( 1.f, 0.f, 1.f);
    glTexCoord2f( 0.f, 1.f);
    glVertex3f  ( 0.f, 0.f, 1.f);
    glTexCoord2f( 0.f, 0.f);
    glVertex3f  ( 0.f,-1.f, 1.f);
    glTexCoord2f( 1.f, 0.f);
    glVertex3f  ( 1.f,-1.f, 1.f);

    glTexCoord2f( 0.f, 1.f);
    glVertex3f  ( 0.f, 0.f, 0.f);
    glTexCoord2f( 1.f, 1.f);
    glVertex3f  ( 1.f, 0.f, 0.f);
    glTexCoord2f( 1.f, 0.f);
    glVertex3f  ( 1.f,-1.f, 0.f);
    glTexCoord2f( 0.f, 0.f);
    glVertex3f  ( 0.f,-1.f, 0.f);

    glVertex3f  ( 0.f, 0.f, 0.f);
    glVertex3f  ( 1.f, 0.f, 0.f);
    glVertex3f  ( 1.f, 0.f, 1.f);
    glVertex3f  ( 0.f, 0.f, 1.f);
    glEnd();

    glPopMatrix();*/
}
Ejemplo n.º 10
0
void ObjModel::draw()
{
	glmDraw(objModel, GLM_SMOOTH);
}
Ejemplo n.º 11
0
void display(void)
{
  static char s[256], t[32];
  static char* p;
  static int frames = 0;
    
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
  glPushMatrix();
    
  glTranslatef(pan_x, pan_y, 0.0);
    
  gltbMatrix();
  if(!start) {
#if 0   // glmDraw() performance test 
    if (material_mode == 0) { 
      if (facet_normal)
	glmDraw(model, GLM_FLAT);
      else
	glmDraw(model, GLM_SMOOTH);
    } else if (material_mode == 1) {
      if (facet_normal)
	glmDraw(model, GLM_FLAT | GLM_COLOR);
      else
	glmDraw(model, GLM_SMOOTH | GLM_COLOR);
    } else if (material_mode == 2) {
      if (facet_normal)
	glmDraw(model, GLM_FLAT | GLM_MATERIAL);
      else
	glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
    }
#else
    glCallList(model_list);
#endif
  
    glDisable(GL_LIGHTING);
    if (bounding_box) {
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glEnable(GL_BLEND);
      glEnable(GL_CULL_FACE);
      glColor4f(1.0, 0.0, 0.0, 0.25);
      glutSolidCube(2.0);
      glDisable(GL_BLEND);
    }
  
  } else {

    //glDisable(GL_LIGHTING);

    newDrawMechanism();
    glEnable(GL_LIGHTING);
  }  
  glPopMatrix();
    
  if (stats) {
    /* XXX - this could be done a _whole lot_ faster... */
    int height = glutGet(GLUT_WINDOW_HEIGHT);
    glColor3ub(0, 0, 0);
    sprintf(s, "%s\n%d vertices\n%d triangles\n%d normals\n"
            "%d texcoords\n%d groups\n%d materials",
            model->pathname, model->numvertices, model->numtriangles, 
            model->numnormals, model->numtexcoords, model->numgroups,
            model->nummaterials);
    shadowtext(5, height-(5+18*1), s);
  }
    
  /* spit out frame rate. */
  frames++;
  if (frames > NUM_FRAMES) {
    sprintf(t, "%g fps", frames/elapsed());
    frames = 0;
  }
  if (performance) {
    shadowtext(5, 5, t);
  }
    
  glutSwapBuffers();
  glEnable(GL_LIGHTING);
}
Ejemplo n.º 12
0
void ofxGLM::draw() {
	//cout << render_mode << "," << GLM_TEXTURE << endl;
	glmDraw(model, render_mode);
}