Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: MChiz en 01 de Enero de 1970, 01:00:00 AM

Título: Sobre la especular en GL
Publicado por: MChiz en 01 de Enero de 1970, 01:00:00 AM
                                Hola a todos:
Tengo un problemilla ultimamente... espero que no suene muy triste pero... como activo la especular en un poligono en OpenGL?  Me han dicho que es con materiales, pero lo he intentado y no me sale. No utilizo luces, tan solo quiero pintar un poligono con la especular que yo le diga ( glColorMaterial? ).
Gracias por adelantado.
Un saludo!

< MChiz >                                
Título: Sobre la especular en GL
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Si con specular te refieres a cuando se forma esa zona brillante en una superficie debido a que el ángulo que forman el vector de reflexión de la luz y el de la cámara es cercano a 0 entonces supongo que necesitarás luces ya que todo eso se calcula teniendo una luz, la normal de la superficie, la posición del observador y ciertas propiedades del material de la superficie...

De todas maneras no recuerdo como lo hace OpenGL así que no te puedo ayudar más...

Un saludo
                               
Título: Sobre la especular en GL
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                Necesitaras luces para usar la iluminacion especular!!

En una luz el valor especular se define como el resto de sus parametros, osea:

Glfloat spec[]={1.0f, 1.0f, 1.0f, 1.0f};
glLightfv(GL_LIGHT0,GL_SPECULAR,spec);

Y luego en el material del poligono con:
Glfloat specmaterial[]={1.0f, 1.0f, 1.0f, 1.0f};
glMaterialfv(GL_FRONT,GL_SPECULAR,specmaterial);
glMateriali(GL_FRONT,GL_SHININESS,128);

Si al final te atreves busca mas info sobre GL_SHININESS, hace tiempo que no le doy a OpenGL y te saco esto del librito.

Saludos.                                
Título: Sobre la especular en GL
Publicado por: MChiz en 01 de Enero de 1970, 01:00:00 AM
                                Hola de nuevo:
Muchas gracias a los dos, pero es que lo necesito sin luces... estais seguros de que es imprescindible?
Yo una vez lo hice con DirectX 7, y no use luces. Creo que Dracula lo estaba pidiendo hace unos pocos posts.
En fin, gracias igualmente.
Un saludo!!

< MChiz >                                
Título: Sobre la especular en GL
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                Hola MChiz,

Me temo que lo que pides es algo dificil, ya que los ejemplos y los usos para el especular siempre deben estar basados en una luz y propiedades de un material, asi que no se como lo vas a hacer sin luces.

De todas formas, para que quieres hacerlo sin luz?

Saludos

                               
Título: Sobre la especular en GL
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                El color de un pixel se calcula así:

Color Final=(ColorCascadaTexturas+Specular)*SRC_BLEND+ColorFrameBuffer*DEST_BLEND

Creo que es así. De hecho el specular sirve para iluminar un polígono y el diffuse para oscurecerlo. Pero si utilizas las luces y los materiales, OGL calculará el specular en base a la fuente de luz, por lo que no tendrás control sobre el mismo. Y si usas el specular con los materiales, necesitas informar de la Normal en el vértice para que pueda calcular correctamente el ángulo de incidencia.                                
Título: Sobre la especular en GL
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Saludos,

Mchiz, es totalmente imposible calcular valores especulares si no hay una luz y un respectivo material por medio.
Lo único que tienes que hacer es, como ha dicho Grey, darle un valor de color (reflexion) especular al material (1.0, 1.0, 1.0, 1.0 por ejemplo).
Además esta el valor GL_SHININESS, que es para indicar el grado de enfoque de los hilights. A mayor valor, mas enfocado y pequeño, a menor valor mas grande y desenfocado.

Dos cosas a tener en cuenta:
-La fórmula de Drácula no es del todo cierta, ya que en OpenGL por defecto no se post-suma el especular (solo lo hace si se usa convenientemente la extensión de separate specular color).
-Si no usas normales unitarias, verás bastantes defectos de iluminación. Lo mas recomendable es usar siempre glEnable(GL_NORMALIZE).

Saludos,

          Ithaqua.

http://ithaqua.stravaganza.org

                               
Título: Sobre la especular en GL
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                aunque si tiene muchos objetos en la escena y cada normal esta mirando a lima, el coste del GL_NORMALIZE puede llegar a ser prohibitivo... en cualquier caso, siempre es mejor eso que tener efectos visuales extraños en la representacion
                               
Título: Sobre la especular en GL
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                MChiz, es imposible usar especular sin luces, pero..., no te referiras al efecto gouraud?por casualidad?
Si es asi es como sigue:

glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(.. Vertice ..);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(.. Vertice ..);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(.. Vertice ..);
glEnd();

Saludos.                                
Título: Sobre la especular en GL
Publicado por: Ithaqua en 01 de Enero de 1970, 01:00:00 AM
                                Emotion, el coste hoy día del GL_NORMALIZE es practicamente gratuito, no hay penalización.

Ithaqua.

http://ithaqua.stravaganza.org                                
Título: Sobre la especular en GL
Publicado por: MChiz en 01 de Enero de 1970, 01:00:00 AM
                                Hola de nuevo a todos!!
Gracias por todas vuestras respuestas, pero realmente lo necesito sin luz.
Se que me deciis que es imposible, pero yo lo consegui hace un tiempillo con D3D7, sin luces. He conseguido rescatar el codigo y he visto que usaba una estructura de D3D ( D3DTLVERTEX ), la cual tiene las propiedades de un vertice, entre ellas, la especular. Actuaba como la difusa, es decir, hacia la interpolacion de colores entre vertices y eso.
Si teneis alguna idea, porfavor, hechadme una mano. Si no, no os ralleis y perdon por molestar.
Muchisimas gracias a todos!!
Un saludo!!

< MChiz >

[ Este Mensaje fue editado por: MChiz el 2002-04-10 20:08 ]