Tôi gặp vấn đề với trình đổ bóng của mình. Tôi đang cố gắng đặt họa tiết và bóng râm phong trong trò chơi của tôi bằng cách sử dụng glsl nhưng tôi không thể có được bất kỳ hiệu ứng tốt nào.Sử dụng cả hai phong bì và họa tiết trong glsl
Tôi đã tìm kiếm trong một thời gian dài và tôi không thể tìm thấy bất kỳ thông tin nào về cách kết nối và kết nối với nhau, vì vậy tôi đã quyết định viết và hỏi tại đây.
Đây là trò chơi của tôi mà không kết cấu:
và đây là với kết cấu:
Những gì tôi muốn đạt được là làm cho kết cấu hồng nhạt này làm cho có thể nhìn thấy tốt hơn với vị trí trên trung tâm - giống như không có kết cấu, và cũng sửa chữa những người trên mỗi vertex shading trên máng xối - làm cho nó mỗi pixel shading, tôi không biết những gì là sai bây giờ.
Tôi đã kiểm tra khoảng 10 trình đổ bóng với hiệu ứng đổ bóng phong và tôi cũng có được mỗi điểm ảnh không phải trên mỗi pixel.
Đây là đoạn mã phân đoạn của tôi có thể ai đó có thể nhìn thấy gì đó?
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;
}
và 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;
}
đỉnh của tôi, tôi sẽ rất vui mừng để được giúp đỡ.
CHỈNH SỬA:
đây là cách tôi đặt kết cấu vào bóng đổ. Nó hoạt động tốt (tôi nghĩ) bởi vì tôi có thể chỉnh sửa các giá trị kết cấu trong trình đổ bóng - theo một cách nào đó.
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:
Sau Nicol Bolas gợi ý về màu sắc add Tôi đã chỉnh sửa đổ bóng của tôi và thay đổi nó như thế này:
gl_FragColor = (texture2D (myTexture, vTexCoord)) + finalColor;
Bây giờ nó chỉ sáng, nhưng bây giờ tôi phải chenge một chút ánh sáng trên sân khấu và sẽ là tuyệt vời. Nhưng tôi vẫn chưa có một pixel shading thay vì tôi đã có cho mỗi vertex shading. Đây là màn hình hiện tại của tôi và tôi đã đánh dấu trên ví dụ những gì tôi có nghĩa là nói về bóng:
Bạn có thể hiển thị mã nơi bạn thiết lập và chuyển tới tọa độ kết cấu GL không? –
@ MārtiņšMožeiko chỉnh sửa và thêm – sebap123
Điều gì sẽ xảy ra nếu bạn chỉ hiển thị kết cấu mà không cần chiếu sáng? –