У меня проблемы с моими шейдерами. Я пытаюсь поместить текстуры и phong shading в мою игру с помощью glsl, но я не могу получить хороший эффект.Использование phong и текстур в glsl
Я долго искал google, и я не могу найти информацию о том, как соединяться между собой и текстурой вместе, поэтому я решил написать и спросить здесь.
Это моя игра без текстуры:
и это с текстурой:
То, что я хочу для того чтобы достигнуть, чтобы сделать это розовато текстуры сделать лучше видны с пятном на центр - точно так же, как без текстуры, а также отремонтировать те за вершинную затенение на желобах - сделать это за пиксельное затенение, я не знаю, что сейчас не так.
Я проверил около 10 шейдеров с phong shading, и у меня есть также за вершину, а не за пиксельное затенение.
Это мой вершинный код фрагмента, возможно, кто-то может что-то увидеть?
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;
}
и моя вершинный шейдер
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;
}
Я буду рад помочь.
EDIT:
это, как я положил текстуру в затенении. Он отлично работает (я думаю), потому что я могу редактировать значения текстуры в шейдере - в некотором роде.
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:
После Nicol Bolas предложение о цветах добавить я редактировал свой шейдер и изменить его следующим образом:
gl_FragColor = (Texture2D (myTexture, vTexCoord)) + finalColor;
Теперь это только яркий, но теперь мне нужно немного освежить сцену и было бы здорово. Но все же у меня нет затенения за пиксель, вместо этого у меня есть за вершинное затенение. Это мой текущий экран и я пометил на примере, что я имею в виду говорить о затенении:
Можете ли вы показать код, где вы настроили и перейти к координатам текстуры GL? –
@ MārtiņšMožeiko отредактирован и добавлен – sebap123
Что произойдет, если вы просто визуализируете текстуру без освещения вообще? –