Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre la especular en GL

Iniciado por MChiz, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

MChiz

                                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 >                                

BeRSeRKeR

                                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
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

_Grey

                                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.                                

MChiz

                                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 >                                

Emotion

                                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

                               
G3: Get the Power!

Drácula

                                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.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Ithaqua

                                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

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Emotion

                                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
                               
G3: Get the Power!

_Grey

                                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.                                

Ithaqua

                                Emotion, el coste hoy día del GL_NORMALIZE es practicamente gratuito, no hay penalización.

Ithaqua.

http://ithaqua.stravaganza.org                                
thaqua^Stravaganza
http://ithaqua.stravaganza.org

MChiz

                                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 ]                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.