1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
const vec2 sobel[3][3] = {
{vec2(-1,-1), vec2(0,-2), vec2(1,-1)},
{vec2(-2,0), vec2(0,0), vec2(2,0)},
{vec2(-1,1), vec2(0,2), vec2(1,1)}
};
vec2 gradient = 0.0;
float ZNear = 0.1;
float ZFar = 100;
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 3; i++)
{
// texLookUp est compris entre 0 et 1
float texLookUp = texture2D(depthTexture,gl_TexCoord[0].xy + float2((i-1)*unSurSizeOfScreen.x,(j-1)*unSurSizeOfScreen.y));
// 1 correspond à --> ZFar
// 0 correspond à --> ZNear
// on retrouve le z
float z = 1.0/(texLookUp*(1/ZFar-1/ZNear)+1/ZNear);
gradient += z * sobel[i][j];
}
}
float texLookUp = texture2D(depthTexture,gl_TexCoord[0].xy);
float z_du_pixel_courrant = 1.0/(texLookUp*(1/ZFar-1/ZNear)+1/ZNear);
// ici on pondère le gradient par le z du pixel central (ou pixel qu'on est en train de dessiner)
gradient /= z_du_pixel_courrant*constante;
// on a notre joli contour compris entre 0 et 1
float contour = 1-min(length(gradient),1);
// on peut aussi faire ça :
if (contour > 0.1) contour = 1;
else contour = 0; |
Partager