• Domingo 17 de Noviembre de 2024, 00:50

Autor Tema:  Opengl  (Leído 6321 veces)

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Opengl
« en: Martes 25 de Mayo de 2004, 20:12 »
0
quiero saber donde puedo conseguir un buen manual de opengl ,o tambien puede ser que alguien me responda algunas dudas que tengo al respecto :

1.- como trabajar con archivos .bmp en opengl y ponerle textura a los objetos.
2.- quiero saber sobre como indico la direccion de la luz ,como configurar la luz ambiente ,como darle "propiedades reflectivas" a los objetos.
3.- quiero escribir,tengo entendido que en glut se puede pero ¡no me sale!

4.- y por ultimo ,sobre el callback del teclado (glKeyboardFunc),se que da la posicion del cursor del mouse, pero en ese momento ,cual es el valor ascii de 'key'?  y ,por ejemplo cual es el valor ascii de la flecha hacia arriba, lo que yo se es que es un conjunto de dos bytes,el nulo y me parece que el M o alguna letra asi, pero si es asi que valor me "entregaria" la funcion??

he leido algunos manuales de opengl pero no dicen nada de estas cosas ,isi alguen sabe....
gracias.
We`re the dollars and cents
and the PoUNDS and Pence
the MARK and the YEN

we gonna crack your little souls,crack your little souls...

whoisneo

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Opengl
« Respuesta #1 en: Domingo 30 de Mayo de 2004, 12:44 »
0
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.html

Te 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
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

whoisneo

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Opengl
« Respuesta #2 en: Domingo 30 de Mayo de 2004, 12:49 »
0
jejejeje se me olvidaba una cosa... una vez que ya tienes cargada la textura aplicarla a un objeto es apilar y despues hacer un blindtexure con el id de la textura... tipo esto...


 glPushMatrix();
 glBindTexture(GL_TEXTURE_2D,texturas[4]);


Salu2
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Opengl
« Respuesta #3 en: Miércoles 9 de Junio de 2004, 20:07 »
0
una pregunta mas sobre texturas:

el formato de la textura tiene que ser un formato especial?
o sea ,puede ser un archivo .bmp cualquiera?
We`re the dollars and cents
and the PoUNDS and Pence
the MARK and the YEN

we gonna crack your little souls,crack your little souls...

Ruben3d

  • Moderador
  • ******
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Opengl
« Respuesta #4 en: Miércoles 9 de Junio de 2004, 20:34 »
0
Hola.

En este tutorial te explican cómo abrir un BMP y usarlo como textura:
Lesson 6: Texture Mapping

Un saludo.

Ruben3d

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Opengl
« Respuesta #5 en: Miércoles 9 de Junio de 2004, 20:37 »
0
ese tutorial ya lo vi lo que pasa es que usa la libreria glaux

y yo no la tengo (no se si se puede implementar en el borland)

sabes donde la puedo conseguir??
We`re the dollars and cents
and the PoUNDS and Pence
the MARK and the YEN

we gonna crack your little souls,crack your little souls...

Ruben3d

  • Moderador
  • ******
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Opengl
« Respuesta #6 en: Miércoles 9 de Junio de 2004, 21:42 »
0
Hola.

Bueno, yo uso Visual Studio y sí trae la librería glaux. En Borland no sé cómo es que no viene.

Puedes probar cargando un TGA, que está bastante bien explicado aqui (y tiene un formato sencillo):
Busca 'Texture Mapping Part4 (TGA)'
o puedes descargarte el tutorial de Nehe portado a Borland
Borland C++ Builder 6 Code For This Lesson.

Un saludo.

Ruben3d

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Opengl
« Respuesta #7 en: Jueves 10 de Junio de 2004, 01:19 »
0
oooh muchas gracias en el archivo del curso de nehe estaba la libreria
saludos

chao
We`re the dollars and cents
and the PoUNDS and Pence
the MARK and the YEN

we gonna crack your little souls,crack your little souls...