【问题标题】:GLSL uniform behaviourGLSL 统一行为
【发布时间】:2015-01-18 12:45:57
【问题描述】:


因此,为了开始使用着色器,我决定创建一个简单的 程序,其中渲染的纹理(加载有 Slick)通过按键逐渐变暗。一切都按预期工作,但我似乎无法正确理解制服以及与着色器的交互方式。
这是我的简单顶点着色器:

varying vec2 vTexCoord;

void main()
{
    vTexCoord = gl_MultiTexCoord0.xy;
    gl_Position = ftransform();
}

还有片段着色器:

uniform sampler2D myTexture;
uniform vec3 darknessParam;
varying vec2 vTexCoord;

void main()
{
    gl_FragColor = texture2D(myTexture, vTexCoord).rgba *  vec4(darknessParam, 1);
}

所以程序按预期执行,但是当我正常设置统一darknessParam 时,我没有设置统一sampler2D 或在主 java-lwjgl 程序中完全引用它。那么片段着色器如何使用统一的sampler2D 而无需我在任何地方设置呢?
提前致谢,我为这篇长文道歉。
祝你有美好的一天!

【问题讨论】:

标签: java opengl glsl lwjgl


【解决方案1】:

首先sampler2D 是一个类型而不是制服,所以我将问题解释如下:

我没有将myTexture 设置为任何值,为什么它仍然有效?

要使用采样器对象访问着色器中的纹理,必须将纹理单元的编号传递给制服。例如,请参见此处:https://www.opengl.org/wiki/Sampler_%28GLSL%29#Binding_textures_to_samplers

现在假设您使用的是纹理单元 0,则不需要设置制服,因为所有制服都已初始化为 0。

来自https://www.khronos.org/opengles/sdk/docs/man31/html/glLinkProgram.xhtml

由于成功的链接操作,所有活动的用户定义 属于程序的统一变量将被初始化为0,...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    相关资源
    最近更新 更多