#include "marbleball.h" void MarbleBall::init_posizione(float x, float y, float z) { vet_compon_controllo.Zero(); vet_posizione[0]= x + 0.5; vet_posizione[1]= y + 0.5; vet_posizione[2]= z + 0.5; palla_viva=true; // setta la palla viva muro_di_morte = 4; //inizializza la var che determina se la pallina si e' spiaccicata su un muro(0..3) o sul pavimento (4) vet_velocita.Zero(); } void MarbleBall::Draw(int option) { Point3f zero; zero[XX]=0; zero[YY]=0; zero[ZZ]=0; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]); glBindTexture(GL_TEXTURE_2D,ti); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); if (palla_viva) { glRotatef(angolo_rotazione,vettore_rotazione[0],vettore_rotazione[1],vettore_rotazione[2]); switch(option) { case SOLID: glDisable(GL_TEXTURE_2D); case TEXTURED: CreateSphere(zero,0.5,30); break; default: CreateSphere(zero,0.35,30); case WIREFRAME: //glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75); // glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75); glDisable(GL_TEXTURE_2D); glutWireSphere(0.5,10,10); //glTranslatef(-vet_posizione[0],-vet_posizione[1],-vet_posizione[2]-0.75); break; } glEnable(GL_TEXTURE_2D); } else { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(0.5,0,0.5); switch (muro_di_morte) { case 0: glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75); break; case 1: glTranslatef(vet_posizione[0]+0.75,vet_posizione[1],vet_posizione[2]); glRotatef(90,0,1,0); // zero[XX]=+0.75; break; case 2: glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]+0.75); //glRotatef(90,1,0,0); // zero[ZZ]=+0.75; break; case 3: glTranslatef(vet_posizione[0]-0.75,vet_posizione[1],vet_posizione[2]); glRotatef(90,0,1,0); break; case 4: glTranslatef(vet_posizione[0],vet_posizione[1]-0.5,vet_posizione[2]); glRotatef(90,1,0,0); break; } CreateSphere(zero,0.5,30); glDisable(GL_TEXTURE_2D); glutSolidTorus(0.35,0.25,20,20); } } MarbleBall::MarbleBall(void) { float circonferenza = 0.5*0.5*M_PI; angolo_rotazione=0.0; lung_arco_per_grado =circonferenza/360.0; attrito=ATTRITONORMALE; tocca_mappa_piana = true; tocca_mappa_inclinata = true; } MarbleBall::~MarbleBall(void) { }