Tengo un problema con mis sombreadores. Estoy tratando de poner texturas y sombreado Phong en mi juego usando GLSL pero no puedo obtener ningún buen efecto.Uso de phong y texturas en glsl
He estado buscando en google durante mucho tiempo, y no puedo encontrar ninguna información sobre cómo conectar luz y textura, así que decidí escribir y preguntar aquí.
Este es mi juego sin textura:
y esto es con textura:
Lo que quiero achive es hacer esta textura rosáceo hacer más visible con una mancha en una centrar, al igual que sin textura, y también reparar los sombreados por vértices en las canaletas, hacerlo por sombreado de píxeles, no sé qué es lo que está mal ahora.
He comprobado unos 10 sombreadores con sombreado phong y también tengo sombreado por vértice no por píxel.
Este es mi fragmento de código de vértice mayby alguien puede ver allí algo?
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;
}
y mi sombreado de vértices
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;
}
me alegraré en busca de ayuda.
EDIT:
así es como me pongo en la textura de sombreado. Funciona bien (creo) porque puedo editar valores de textura en shader, de alguna manera.
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:
Después de Nicol Bolas sugerencia acerca de colores añaden he editado mi Shader y cambiar así:
gl_FragColor = (Texture2D (myTexture, vTexCoord)) + finalColor;
Ahora solo es brillante, pero ahora tengo que hacer un poco de luz en el escenario y sería fantástico. Pero todavía no tengo sombreado por píxel en cambio tengo sombreado por vértice. Este es mi pantalla actual y he marcado en ejemplo lo que quiero decir hablando de sombreado:
¿Se puede mostrar el código donde se configuró y pasar a las coordenadas de textura GL? –
@ MārtiņšMožeiko editado y agregado – sebap123
¿Qué sucede si solo renderizas la textura sin iluminación? –