У меня есть правильная обратная матрица проекции. Но ничто не кажется правильным! Реконструированное положение полностью деформировано, а значение z очень мало? Любое предложение?LWGL // восстановить положение в фрагментном шейдере
vec3 calculatePosition(vec2 coord, float depth)
{
vec4 clipSpaceLocation;
clipSpaceLocation.x = coord.x * 2.0 - 1.0;
clipSpaceLocation.y = coord.y * 2.0 - 1.0;
clipSpaceLocation.z = depth * 2.0 - 1.0;
clipSpaceLocation.w = 1.0;
vec4 homogenousPosition = uProjectionInverse * clipSpaceLocation;
return homogenousPosition.xyz/homogenousPosition.w;
}
z-значение круглое около -0,001; Почему так?
коорд глубина унд является:
vec2 coord = vec2(gl_FragCoord.x/width, gl_FragCoord.y/height);
float currentDepth = texture(depthBuffer, coord).r;
Я должен реализовать SSAO для университета, и я использую Eclipse, и Java с LWJGL-плагин. Пожалуйста, мне нужна помощь. У меня меньше недели.
EDIT: Я попытался это сейчас ... но до сих пор не lenearized:
float camera_space_z_from_depth(sampler2D depthbuffer, vec2 uv) {
float depth = texture(depthbuffer, uv).x;
return (2 * uNearPlane)/(uFarPlane + uNearPlane - depth * (uFarPlane - uNearPlane));
}
vec3 calculatePosition(vec2 coord, float depth)
{
vec4 clipSpaceLocation;
clipSpaceLocation.x = coord.x * 2.0 - 1.0;
clipSpaceLocation.y = coord.y * 2.0 - 1.0;
clipSpaceLocation.z = depth * 2.0 - 1.0;
clipSpaceLocation.w = 1.0;
vec4 homogenousPosition = uProjectionInverse * clipSpaceLocation;
return homogenousPosition.xyz/homogenousPosition.w;
}
vec3 getPosition(vec2 coord){
float currentDepth = camera_space_z_from_depth(depthBuffer,coord);
vec3 position = calculatePosition(coord, currentDepth);
return position;
}
Исходный код (не редактировать) выглядит нормально до сих пор. Линеаризация в редактировании на самом деле не имеет смысла, предполагая, что ваш обработчик глубины просто использовал обычную z-координату. Для меня это похоже на проблему с 'uProjectionInverse' или - и это было бы моим первым предположением - текстурой глубины (или самой глубиной rende rpass). Действительно ли значение 'near' для вашей проекции' 0,001'? Если это так, похоже, что значение глубины, которое вы пытаетесь выполнить unproject, равно 0 во всех точках. – derhass