基于纹理的Skybox反射

时间:2014-06-20 21:05:50

标签: opengl reflection textures skybox

我有包含法线的纹理:

enter image description here

眼睛位置: 顶点着色器:

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);

enter image description here

编辑(带有abs()颜色向量):

enter image description here

和深度:

enter image description here

我也有一个立方体纹理,我用它来渲染一个天空盒(你可以在上面的图片上看到它的一部分)。

我需要使用它们来创建反射效果。

之前使用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);
但是我无法达到适当的反射效果。

我可以看到这样的事情:

enter image description here

这是不正确的,因为当我从上面看球时,我只能看到一个反射的天空。我也可以在任何地方看到天空盒的相同片段。

你能帮我做一个合适的数学计算吗?我应该使用哪种矩阵(如果有的话)以及如何计算合适的立方体纹理坐标?

0 个答案:

没有答案