• Domingo 17 de Noviembre de 2024, 05:54

Autor Tema:  Opengl  (Leído 3150 veces)

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Opengl
« en: Martes 25 de Mayo de 2004, 20:17 »
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...

Ruben3d

  • Moderador
  • ******
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Opengl
« Respuesta #1 en: Miércoles 26 de Mayo de 2004, 18:38 »
0
Hola.

Citar
1.- como trabajar con archivos .bmp en opengl y ponerle textura a los objetos

La manera más fácil de cargar un BMP es usar una de las funciones de la librería glaux:
Código: Text
  1. AUX_RGBImageRec *auxDIBImageLoad(char *nombre);
  2.  

Después, con glBindTexture() y glTexImage2D() creas la textura que usa OpenGL. Con esto hecho, cuando pintes un quad, por ejemplo, has de darle coordenadas de mapeado y seleccionar previamente la textura:

Código: Text
  1. glBindTexture(GL_TEXTURE_2D, textura);
  2. glBegin(GL_QUADS);
  3. glTexCoord2f(0.0f, 0.0f); glVertex3f(-1, -1,  1);
  4. glTexCoord2f(1.0f, 0.0f); glVertex3f( 1, -1,  1);
  5. glTexCoord2f(1.0f, 1.0f); glVertex3f( 1,  1,  1);
  6. glTexCoord2f(0.0f, 1.0f); glVertex3f(-1,  1,  1);
  7. glEnd();
  8.  

Citar
2.- quiero saber sobre como indico la direccion de la luz ,como configurar la luz ambiente ,como darle "propiedades reflectivas" a los objetos

Código: Text
  1.   glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);    // Configura la luz ambiental
  2.   glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);    // Configura la luz difusa
  3.   glLightfv(GL_LIGHT1, GL_SPECULAR, LightSpecular);  // Configura la luz especular
  4.   glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);  // Posición de la luz difusa
  5.  
  6.   glEnable(GL_LIGHT1);              // Activa la luz
  7.  
  8.   glEnable(GL_LIGHTING);              // Activa la iluminación
  9.  

Esto sirve para configurar una luz (usa iluminación por vértices, así que se nota más en objetos complejos). Ten en cuenta que para cada triángulo o quad que introduzcas has de introducir su normal, para que el back-face removal y el cálculo de luz sea correcto:
Código: Text
  1. // Entre glBegin y glEnd, y antes de cada polígono
  2. glNormal3f( 0.0f, 0.0f, -1.0f);
  3.  
Si las normal que le das no está normalizada deberás hacer esto al inicializar para que se normalice automáticamente (o la intensidad de luz dependerá del tamaño del polígono en vez de la orientación y la distancia):
Código: Text
  1. glEnable(GL_NORMALIZE);
  2.  

Consulta la referencia de estas funciones para más explicación.

En cuanto a darle a un objeto propiedades reflexivas, tienes varias posibilidades: o bien renderizas un cubemap por fotograma y se lo aplicas como textura o, si se trata de algo plano (como un espejo), usas el stencil buffer para crear reflexiones en dos pasadas. De todas formas, si no sabes texturizar, mejor no te lies con esto.

Citar
3.- quiero escribir,tengo entendido que en glut se puede pero ¡no me sale!

GLUT es una librería multiplataforma para aislar al programador de las partes en las que tiene que mediar con el sistema operativo. No es parte de OpenGL. No he usado GLUT, pero puedes escribir sin usarla (mira los links del final).

Citar
4.- y por ultimo [...]

Usa los mensajes de Windows, leidos con el WndProc. No sé cómo va en GLUT, pero probablemente te esté dando el código de tecla, no el código ASCII. Tal vez haya una función para convertir el keycode a ASCII. Para saber a qué tecla le pertenece qué código lo mejor que puedes hacer es un programa que muestre el código de la tecla que pulses. Ten en cuenta que los cursores, las teclas de función y algunas más no tienen código ASCII que las representen, pero todas tienen un código de tecla.

Por último, te darás cuenta de que no he profundizado mucho, pero es que has preguntado muy generalmente sobre todos los campos básicos de OpenGL, y no puedo escribir aqui un libro sobre el tema. Todo esto está muy bien explicado en los siguientes links, a través de tutoriales:Un saludo.

Ruben3d

scatterbrain

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Opengl
« Respuesta #2 en: Miércoles 26 de Mayo de 2004, 20:38 »
0
muchas gracias !!!

Citar
Para saber a qué tecla le pertenece qué código lo mejor que puedes hacer es un programa que muestre el código de la tecla que pulses.


esa era mi intencion ,pero como no se imprimir letras en opengl ,no me servia mucho.pero ahora supongo que sabre .
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...

cao

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
    • http://www.udec.cl/~caroruiz
Re: Opengl
« Respuesta #3 en: Jueves 27 de Mayo de 2004, 23:23 »
0
hola