Hola!!!
Vamos por pasos...
1) Primeramente tienes que procesar el fichero bmp reservar memoria y asignarselo a un identificador de posteriormente poder aplicarselo a los objetos. Necesariamente y para que sea mucho mas facil necesitas las librerias glut para que sea mucho mas ameno esa tarea. Estos trozos de codigo que te voy a adjuntar son de una trabajo que tuve que desarrollar en opengl+glut
Este fragmento de codigo se encarga de procesar un fichero con extension raw de texturas para posteriormente aplicarselo a objetos.
void cargarTextura(char *fichero, int ancho, int alto, GLuint *imagen){
GLubyte *bitmap ;
FILE *file;
if((file = fopen(fichero, "rb"))==NULL){
printf("No se encontro archivo: %s\n", fichero);
exit(1);
}
bitmap = (GLubyte *) malloc(ancho * alto * 3 * (sizeof(GLubyte)));
if(bitmap == NULL){
printf("No puede asignarse memoria para la textura" );
getche();
fclose(file);
exit(1);
}
fread(bitmap, ancho * alto * 3, 1, file);
glGenTextures( 1 , &imagen[0]);
glBindTexture(GL_TEXTURE_2D, imagen[0]);
fclose(file);
/* Establecer el tipo de filtro */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, ancho, alto,
GL_RGB, GL_UNSIGNED_BYTE, bitmap);
/* Liberar memoria reservada */
free(bitmap);
}
entonces.... para procesar la textura le pasas por parametro los siguientes parametros....
void cargarTextura(char *fichero, int ancho, int alto, GLuint *imagen)
ruta del fichero de la textura, dimesiones de la textura, y un identificador para guardar la textura, En mi caso le pasa un direccion de un puntero a un array de texturas....
cargarTextura("c:\\texturas_1\\paisaje.raw",256,256,&texturas[12]);
2 ) Respecto a la luz...
Primeramente debes activar la iluminacion que se hace con estas funciones
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
Para el tipo de luz si va a ser especular, ambiental, etc... se usa esta funcion
glLightfv(GL_LIGHT0, GL_AMBIENT, colorFoco0);
Donde colorfoco es una variable de tipo Glfloat que contiene un valor numerico que se corresponde con un color.
Para controlar parametros de la luz tales como posicion direccion angulo etc se utilizan estas variables...
//posicion de los focos //
glLightfv(GL_LIGHT0, GL_POSITION, posicionFoco0);
glLightfv(GL_LIGHT1, GL_POSITION, posicionFoco1);
//propiedades de difusion//
glLighti(GL_LIGHT1, GL_SPOT_EXPONENT, 0); //intensidad
glLighti(GL_LIGHT1, GL_SPOT_CUTOFF, 60); //angulo
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direccionSpot1); //direccion a la que apunta// direccionspot1 es la de un vector.
3 ) si se puede escribir en glut pero no me acuerdo como se hacia... habia que utilizar una especie de buffer sino recuerdo mal ... en cuanto me acuerdo te lo comento...
4) con respecto a las funciones del teclado te recomiendo encarecidamente que utilices las interfaces de glut ...
http://pyopengl.sourceforge.net/documentat...rence-GLUT.htmlTe adjunto el manual de referencia online de glut. Que espero que te valga para algo... aunque esta en perfecto ingles.
Si tienes alguna duda, comentamela.
Salu2