我有包含法线的纹理:
眼睛位置: 顶点着色器:
vec4 posEye = modelViewMatrix * vec4(in_Position.xyz, 1.0f);
fs_PosEye = posEye.xyz;
片段着色器:
// calculate normal from texture coordinates
vec3 coords;
coords.xy = gl_PointCoord * 2.0 - 1.0;
float r = dot(coords.xy, coords.xy);
if(r>1.0){
discard;
}
coords.z = sqrt(1.0-r);
//calculate eye position
vec4 pixelPos = vec4(fs_PosEye + normalize(coords)*pointRadius,1.0f);
编辑(带有abs()
颜色向量):
和深度:
我也有一个立方体纹理,我用它来渲染一个天空盒(你可以在上面的图片上看到它的一部分)。
我需要使用它们来创建反射效果。
之前使用framebuffers渲染纹理,现在我以这种方式在片段着色器中使用它们:
vec3 N = texture(u_normaltex,fs_texcoord).xyz;
float not_blurred_depth = texture(u_depthtex,fs_texcoord).r;
vec3 position = texture(u_positiontex,fs_texcoord).xyz;
我尝试做这样的事情(基于教程):
vec4 vCoords = vec4(reflect(position, N), 0.0);
vec4 refl_color = texture(u_cubemaptex, vCoords.xyz);
但是我无法达到适当的反射效果。
我可以看到这样的事情:
这是不正确的,因为当我从上面看球时,我只能看到一个反射的天空。我也可以在任何地方看到天空盒的相同片段。
你能帮我做一个合适的数学计算吗?我应该使用哪种矩阵(如果有的话)以及如何计算合适的立方体纹理坐标?