Ho avuto problemi con i miei ombreggiatori. Sto provando a inserire trame e ombre di phong nel mio gioco usando glsl ma non riesco a ottenere alcun effetto positivo.Utilizzo di phong e textures in glsl
Sono alla ricerca di Google da molto tempo e non riesco a trovare nessuna informazione su come connettere ligh e texture insieme, quindi ho deciso di scrivere e chiedere qui.
questo è il mio gioco senza consistenza:
e questo è con struttura:
Quello che voglio achive è quello di rendere questa texture rosato rendere meglio visibile con spot su un centro - proprio come senza trama, e anche riparare quelle ombreggiature per vertici su grondaie - renderlo per ombreggiatura pixel, non so cosa c'è di sbagliato ora.
Ho controllato circa 10 shader con ombreggiatura phong e ho ottenuto anche per vertice non per ombreggiatura pixel.
Questo è il mio codice di vertice del frammento in cui qualcuno può vedere qualcosa?
varying vec3 N;
varying vec3 v;
uniform sampler2D myTexture;
varying vec2 vTexCoord;
void main (void)
{
vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0);
vec3 L = normalize(gl_LightSource[0].position.xyz - v);
vec3 E = normalize(-v); // we are in Eye Coordinates, so EyePos is (0,0,0)
vec3 R = normalize(-reflect(L,N));
//calculate Ambient Term:
vec4 Iamb = gl_FrontLightProduct[0].ambient;
//calculate Diffuse Term:
vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0);
// calculate Specular Term:
vec4 Ispec = gl_FrontLightProduct[0].specular
* pow(max(dot(R,E),0.0),0.3*gl_FrontMaterial.shininess);
finalColor+=Iamb + Idiff + Ispec;
// write Total Color:
gl_FragColor = gl_FrontLightModelProduct.sceneColor + (texture2D(myTexture, vTexCoord)) + finalColor;
}
e la mia vertex shader
varying vec3 N;
varying vec3 v;
varying vec2 vTexCoord;
void main(void)
{
v = vec3(gl_ModelViewMatrix * gl_Vertex);
N = normalize(gl_NormalMatrix * gl_Normal);
vTexCoord = vec2(gl_MultiTexCoord0);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Sarò felice di aiuto.
EDIT:
è così che ho messo la mia texture in shader. Funziona bene (credo) perché posso modificare i valori delle texture nello shader - in qualche modo.
int my_sampler_uniform_location = glGetUniformLocation(brickProg, "myTexture");
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(my_sampler_uniform_location,0);
CUTIL::drawBox();
glBindTexture(GL_TEXTURE_2D,0);
EDIT 2:
Dopo Nicol Bolas suggerimento sui colori add ho modificato il mio shader e modificarlo in questo modo:
gl_FragColor = (Texture2D (myTexture, vTexCoord)) + finalColor;
Ora è solo per luminoso, ma ora devo chenge un po 'di luce sul palco e sarebbe fantastico. Ma ancora non ho ottenuto l'ombreggiatura per pixel, invece ho l'ombreggiatura per vertice. Questa è la mia schermata corrente e ho segnato sul esempio quello che voglio dire parlando shading:
È possibile visualizzare il codice in cui si imposta e si passa alle coordinate di texture GL? –
@ MārtiņšMožeiko modificato e aggiunto – sebap123
Cosa succede se si esegue il rendering della trama senza illuminazione? –