奇怪的问题。似乎我的 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。