【发布时间】:2012-06-29 23:40:08
【问题描述】:
奇怪的问题。似乎我的 GLSL 程序的行为与逻辑和规范建议的不同。这是垂直着色器:
#version 120
uniform mat4 q;
varying vec2 TextureCoord;
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vec4 p = q*gl_Vertex;
TextureCoord = vec2(.01f,.01f);
gl_Position= gl_ModelViewProjectionMatrix*p;
gl_PointSize = gl_Normal.x / -p.z;
}
这是碎片着色器:
#version 120
uniform sampler2D theTex;
varying vec2 TextureCoord;
void main()
{
vec2 realTexCoord = ( gl_TexCoord[0].st*vec2(0.024f,0.024f)) + TextureCoord;
gl_FragColor = gl_Color*texture2D(theTex, realTexCoord);
}
皱纹是这个。如果我将 + TextureCoord 放在 frag 着色器中并用一些常量 vec2 替换它,例如 (.1f,.1f) 一切都很好,我会看到纹理。但像这样,我只会得到奇怪的垃圾颜色噪音。这是带有平滑点和纹理坐标替换的 GL_POINTS。我正在使用 TexCoord[0].st 因为 gl_PointCoord 始终为零...
看起来正在发生的事情是垃圾值以某种方式进入了我之间的变化。但是这怎么会发生呢?如果这些值以某种方式在顶点着色器和片段着色器之间“插值”,那么应用了什么样的逻辑?
我尝试在制服上发送值,但它也始终为零。
我正在使用 LWJGL。
【问题讨论】:
-
您是否真的在检查着色器链接并编译信息日志中的错误?我认为在片段着色器中采样 gl_TexCoord 是不合法的。
-
是的,我是。没关系,但对于这种乱码。我正在使用一些较旧的硬件,但仍然...