虚拟阴影深度立方体纹理(VSDCT)没有间接纹理

时间:2014-03-19 15:27:30

标签: opengl glsl shadow opengl-3 linderdaum

我已使用此代码实现了VSDCT demo,以便将多维数据集地图中的vec3灯光方向转换为OpenGL 4.4 Core Profile Specification的8.13多维数据集地图纹理选择中的vec2灯光方向1}}虚拟纹理中的UV纹理坐标:

vec2 GetShadowTC( vec3 Dir )
{
    float Sc;
    float Tc;
    float Ma;
    int FaceIndex;

    float rx = Dir.x;
    float ry = Dir.y;
    float rz = Dir.z;

    vec3 adir = abs(Dir);
    Ma = max( max( adir.x, adir.y ), adir.z );

    // -X +X ok
    if ( adir.x > adir.y && adir.x > adir.z )
    {
        Sc = ( rx > 0 ) ? rz : -rz;
        Tc = ry;
        FaceIndex = ( rx > 0 ) ? 0 : 1;
    }
    // -Y +Y ok
    else if ( adir.y > adir.x && adir.y > adir.z )
    {
        Sc = rx;
        Tc = ( ry > 0 ) ? rz : -rz;
        FaceIndex = ( ry > 0 ) ? 2 : 3;
    }
    // -Z +Z ok
    else
    {
        Sc = ( rz > 0 ) ? -rx : rx;
        Tc = ry;
        FaceIndex = ( rz > 0 ) ? 4 : 5;
    }

    float s = 0.5 * ( Sc / Ma + 1.0 );
    float t = 0.5 * ( Tc / Ma + 1.0 );

/*
    Calculate texture coordinates for faces in our 3x2 layout:
        0   1   2
        3   4   5
*/
    s = s / 3.0;
    t = t / 2.0;

    s += float(FaceIndex % 3 ) / 3.0;
    t += float(FaceIndex / 3 ) / 2.0;

    return vec2( s, t );
}

此代码正常。但是,我有两个问题:

1)有没有办法减少立方体贴图面(在3x2虚拟纹理上布局)之间的过滤瑕疵?

2)是否可以在不使用间接纹理的情况下更快地制作此代码(即,通过巧妙地使用三元运算符)?

0 个答案:

没有答案