Questo è il mio programma, è un cubo che può ruotare tramite le frecce direzionali e in modo random tramite il tasto f1. Ora, non riesco proprio ad aggiungerci una texture (che sia un'immagine unica o 6 immagini diverse). Qualcuno potrebbe aiutarmi? Grazie mille
codice:
/************************    includes    **************************/#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <stdarg.h>
#include <math.h>
#define GL_GLEXT_PROTOTYPES
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif




/****************    prototipi delle funzioni    ******************/
void display();
void specialKeys();
/*********************    variabili globali    ********************/
double rotate_y=0;
double rotate_x=0;
double rotate_z=0;


int nRandom;
int rRandom;


/**************************    random   **************************/


void randomRotation(){
    srand(time(NULL));
    nRandom = rand() % 3;


    if(nRandom == 0){


      srand(time(NULL));
      rRandom = 18* (rand() % 4 + 2);
      rotate_x += 5*rRandom;




    }else if(nRandom == 1){


      srand(time(NULL));
      rRandom = 18* (rand() % 4 + 2);
      rotate_y += 5*rRandom;


    }else if(nRandom == 2){


      srand(time(NULL));
      rRandom = 18* (rand() % 4 + 2);
      rotate_z += 5*rRandom;




    }


}




/**************************    display    **************************/


/** funzione display
*   Tutte le operazioni di disegno dei cubi verranno effettuate in questa funzione.
*   l'idea generale per realizzarli è di disegnare tutte e sei le facce singolarmente
*   e posizionarle
*/
void display(){


  // Cancellare la schermata e azzerare il buffer Z
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);


  //uso GL_POLYGON per disegnare ogni lato del cubo


  // Resetta le trasformazioni
  glLoadIdentity();


  // Ruota quando l'utente modifica rotate_x, rotate_y e rotate_z
  glRotatef( rotate_x, 1.0, 0.0, 0.0 );
  glRotatef( rotate_y, 0.0, 1.0, 0.0 );
  glRotatef( rotate_z, 0.0, 0.0, 1.0 );
  // Altre trasformazioni
  // glScalef( 2.0, 2.0, 0.0 );          // Non incluso


  /** assegno i colori alle facce
  *   alla faccia frontale definisco un nuovo colore per ogni vertice. Siccome
  *   ogni vertice ha un colore diverso OpenGl li mescolerà automaticamente.
  *   Le altre facce avranno un unico colore.
  */
  // Lato multicolore - FRONTALE
  glBegin(GL_POLYGON);


    glColor3f( 1.0, 0.0, 0.0 );     glVertex3f(  0.5, -0.5, -0.5 );      // P1 rosso
    glColor3f( 0.0, 1.0, 0.0 );     glVertex3f(  0.5,  0.5, -0.5 );      // P2 verde
    glColor3f( 0.0, 0.0, 1.0 );     glVertex3f( -0.5,  0.5, -0.5 );      // P3 blu
    glColor3f( 1.0, 0.0, 1.0 );     glVertex3f( -0.5, -0.5, -0.5 );      // P4 viola


  glEnd();


  // Lato Bianco - POSTERIORE
  glBegin(GL_POLYGON);
    glColor3f(   1.0,  1.0, 1.0 );
    glVertex3f(  0.5, -0.5, 0.5 );
    glVertex3f(  0.5,  0.5, 0.5 );
    glVertex3f( -0.5,  0.5, 0.5 );
    glVertex3f( -0.5, -0.5, 0.5 );
  glEnd();


  // Lato Viola - DESTRO
  glBegin(GL_POLYGON);
    glColor3f(  1.0,  0.0,  1.0 );
    glVertex3f( 0.5, -0.5, -0.5 );
    glVertex3f( 0.5,  0.5, -0.5 );
    glVertex3f( 0.5,  0.5,  0.5 );
    glVertex3f( 0.5, -0.5,  0.5 );
  glEnd();


  // Lato Verde - SINISTRO
  glBegin(GL_POLYGON);
    glColor3f(   0.0,  1.0,  0.0 );
    glVertex3f( -0.5, -0.5,  0.5 );
    glVertex3f( -0.5,  0.5,  0.5 );
    glVertex3f( -0.5,  0.5, -0.5 );
    glVertex3f( -0.5, -0.5, -0.5 );
  glEnd();


  // Lato Blu - SUPERIORE
  glBegin(GL_POLYGON);
    glColor3f(   0.0,  0.0,  1.0 );
    glVertex3f(  0.5,  0.5,  0.5 );
    glVertex3f(  0.5,  0.5, -0.5 );
    glVertex3f( -0.5,  0.5, -0.5 );
    glVertex3f( -0.5,  0.5,  0.5 );
  glEnd();


  // Lato Rosso - INFERIORE
  glBegin(GL_POLYGON);
    glColor3f(   1.0,  0.0,  0.0 );
    glVertex3f(  0.5, -0.5, -0.5 );
    glVertex3f(  0.5, -0.5,  0.5 );
    glVertex3f( -0.5, -0.5,  0.5 );
    glVertex3f( -0.5, -0.5, -0.5 );
  glEnd();




  /**
  * glFlush(); e glutSwapBuffers(); inseriscono l'effetto di double buffering.
  */
  glFlush();
  glutSwapBuffers();


}


void specialKeys( int key, int x, int y ) {


  // Freccia destra - aumenta la rotazione di 5 gradi
  if (key == GLUT_KEY_RIGHT)
    rotate_y += 5;


  // Freccia sinistra - riduci la rotazione di 5 gradi
  else if (key == GLUT_KEY_LEFT)
    rotate_y -= 5;


  else if (key == GLUT_KEY_UP)
    rotate_x += 5;


  else if (key == GLUT_KEY_DOWN)
    rotate_x -= 5;


  else if (key == GLUT_KEY_F1)
    randomRotation();


  // Richiedi l'aggiornamento dell'immagine
  glutPostRedisplay();


}




/***************************    main    ***************************/


int main(int argc, char* argv[]){


    //  Inizializzare il GLUT e processare i parametri degli utenti
    glutInit(&argc,argv);


    /**  Richiedi una finestra a colori veri con doppio buffering e buffer Z
    *   lo z-buffer permette di ottenere l'effetto 3d, OpenGL usa un sistema di
    *   coordinate a tre dimensioni, con gli assi x, y e z. Per dare l'effetto
    *   che un oggetto sia più vicino a te sarà aumentata la sua posizione
    *   sull'asse z, e viceversa per allontanarlo
    */
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);


    /** Creo finestra
    *   creo la finestra all'interno della quale verranno disegnati i cubi
    *   il parametro è il nome della finestra
    */
    glutCreateWindow("Progetto dadi");


    /** abilito test di profondità
    *   In OpenGl non è abilitata nessuna funzionalità speciale. Per poter
    *   visualizzare correttamente in 3 dimensioni il programma usando il buffer z
    *   devo abilitare il test di profondità
    */
    glEnable(GL_DEPTH_TEST);


    /** funzioni di richiamo
    *   Funzioni chiamate ogni volta nel loop principale. La funzione di
    *   visualizzazione ridisegna la scena sulla base delle modifiche alle
    *   variabili che sono state effettuate dopo la chiamata precedente.
    *   La funzione specialKeys permette di interagire con il programma.
    */
    glutDisplayFunc(display);
    glutSpecialFunc(specialKeys);


    //Avvio il main loop
    glutMainLoop();


    return 0;
}