View Full Version : [OpenGL] Illuminazione e Textures
GordonFreeman
10-06-2006, 21:40
Ho un problema con la gestione dell'illuminazione in OpenGL.
Ho copiato e incollato qua sotto il post che ho scritto su un altro forum,in inglese,non mi va di tradurlo ^_^
Grazie in anticipo per l'aiuto
I tried drawing some triangles with some material properties,such as shininess and ambient/diffuse reflectance.
Then,i enabled GL_LIGHT0 and tried to set GL_SPECULAR parameter with different colors,and the triangles reflected the light as expected...
At this point,i mapped a texture on those triangles,leaving unchanged the material parameters,and they always look like they are fully enlightened with a light color of (1,1,1,1) (full white) , no matter how i modify the light and material parameters,and even with a total dark light (0,0,0,0) or (0,0,0,1).
It seems that textured triangles are not affected by lighting operations,is it so??
Is it the same with Direct3D ?
glTexEnv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
http://www.opengl.org/resources/faq/technical/texture.htm
Dai un'occhiata alla terza domanda :)
Devi impostare la modalita' di blend di OGL per fare questa operazione:
C = L * T
Dove:
C e' il colore finale che andra' all'alpha blending
T e' il colore che arriva dalla texture
L e' il colore che arriva dall'unita' di illuminazione
L'operatore * in grafica viene spesso chiamato MODULATE.
Al momento immagino che tu stia facendo semplicemente questo:
C = T
E quindi ti trovi l'oggetto sempre totalmente illuminato.
DanieleC88
12-06-2006, 10:19
Al momento immagino che tu stia facendo semplicemente questo:
C = T
E quindi ti trovi l'oggetto sempre totalmente illuminato.
Non è C = L?
Non è C = L?
Se a schermo vede pixel solo con la texture base allora e' C = T. Se vedesse poligoni solo con l'illuminazione ma senza texture allora e' C = L.
Lui credo voglia fare C = T * L.
DanieleC88
12-06-2006, 10:47
Se a schermo vede pixel solo con la texture base allora e' C = T. Se vedesse poligoni solo con l'illuminazione ma senza texture allora e' C = L.
Lui credo voglia fare C = T * L.
Si, proprio quello intendevo: se lui vede l'illuminazione ma non le texture illuminate allora credo sia C = L, mentre gli serve C = L*T. :)
GordonFreeman
12-06-2006, 16:32
ho risolto,tutto ok
comunque non va benissimo il GL_BLEND,va meglio invece questo
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
e poi bisogna dare il colore (1,1,1,1) al triangolo da texturizzare,in modo che poi il bianco venga illuminato dalla luce,e poi tale bianco avrà effettivamente il colore della luce,con il quale la texture verrà modulata come se la luce avesse illuminato la texture,è vero o no?
il GL_BLEND combina il risultato di GL_MODULATE con un ulteriore colore costante,ma adesso non va bene , giusto?
il GL_DECAL non va bene perchè non fa altro che rimpiazzare il colore del triangolo con la texture,senza tenere conto della luce,quindi la texture sarà sempre visibile al massimo,come l'immagine originale
tutto ciò l'ho letto da MSDN dove parla di glTexEnv , e poi ho pensato bene di colorare di bianco il triangolo in modo che poi assuma il colore della luce,e tale colore sarà il colore che modula la texture...come se fosse illuminata da tale colore,spero sia tutto giusto,i risultati a video di quelche prova che ho fatto sembravano corretti
il GL_BLEND combina il risultato di GL_MODULATE con un ulteriore colore costante,ma adesso non va bene , giusto?
Il blend fa questa cosa qui:
C = a * X + (a - 1) * Y
Dove:
X e Y possono essere un qualunque input (ad esempio texture e illuminazione)
a e' il fattore di blend che puo' essere impostato costante o arrivare ad esempio dal canale alpha di una texture
Blend si usa per rendere ad esempio oggetti trasparenti dove X e' il colore del pixel sullo schermo e Y e' il nuovo colore del pixel e vengono fusi assieme.
tutto ciò l'ho letto da MSDN dove parla di glTexEnv , e poi ho pensato bene di colorare di bianco il triangolo in modo che poi assuma il colore della luce,e tale colore sarà il colore che modula la texture...come se fosse illuminata da tale colore,spero sia tutto giusto,i risultati a video di quelche prova che ho fatto sembravano corretti
Bene :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.