Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卷影实现_Java_Opengl_Shader_Lwjgl_Shadow - Fatal编程技术网

Java 卷影实现

Java 卷影实现,java,opengl,shader,lwjgl,shadow,Java,Opengl,Shader,Lwjgl,Shadow,我需要一些帮助在我的演示中实现卷影。我已经找到了一些GLSL着色器文件,并且已经创建了一个合适的着色器加载程序。我只需要知道如何以正确的方式实施它。 我正在使用LWJGL 2.9.0 shadowvolumes.vs void main() { vec4 lightAngle; vec4 pos; lightAngle = normalize(gl_Vertex-gl_ModelViewMatrixInverse*gl_LightSource[0].position);

我需要一些帮助在我的演示中实现卷影。我已经找到了一些GLSL着色器文件,并且已经创建了一个合适的着色器加载程序。我只需要知道如何以正确的方式实施它。 我正在使用LWJGL 2.9.0

shadowvolumes.vs

void main()
{
    vec4 lightAngle;
    vec4 pos;
    lightAngle = normalize(gl_Vertex-gl_ModelViewMatrixInverse*gl_LightSource[0].position);
    if (dot(gl_Normal,lightAngle.xyz)<0.0) 
    {
        if (gl_Color.r>0.0)
            pos = gl_Vertex+lightAngle * 10.0;
        else
            pos = gl_Vertex;
    }
    else {
        pos = vec4(0.0, 0.0, 0.0, 0.0);
    }
    gl_Position = gl_ModelViewProjectionMatrix*pos;
}
void main()
{
    gl_FragColor = vec4(0.1, 0.1, 0.1, 1.0);
}

只要给出尽可能多的建议。

您的代码是一个挤出顶点着色器

它所做的只是检查三角形是否朝向灯光(参见
dot
说明)。如果不是,则将
w
坐标设置为零(
vec4(0.0,0.0,0.0,0.0)
),以便顶点投影到无穷远处。否则,如果cpu计算标志为非零(
gl_Color.r
),则顶点将按照
lightAngle
lightAngle
是灯光朝向顶点的方向,而不是角度)从光源挤出

该着色器仅负责构建一个体积,其中其内部的每个片段都将处于阴影中

更有趣的部分是计算施法者照亮的轮廓,并使用模具缓冲区来测试碎片是在体积内部还是外部

是一个非常好的、易于学习的阴影体积教程


有一篇文章介绍了一些技巧,可以更快地生成无伪影的阴影卷。

这可以为您提供一些基本信息:@Grimmy链接的文章讨论了阴影映射(而不是阴影卷),这是一种不同的技术。NeHe教程使用了许多不推荐的方法,因此,用它来学习如何做卷影是非常糟糕的。@Vallentin非常好的观点:大多数NeHe教程都是在T&L时编写的。但是,要学习z-pass卷影的基础知识,一些cpu代码和固定函数模具缓冲区就可以了(这些并不是不推荐使用的)。正因为如此,我想提到古老但超级酷的NeHe教程,在那里,有文化的编程风格帮助了很多人。我同意,使用不推荐的方法有利于学习,尽管在答案中说明这一点会很好,因此人们知道使用不推荐的方法。