仅使用顶点着色器对象的glsl会丢失颜色/纹理

时间:2014-03-16 20:54:16

标签: c++ opengl glsl

我只需要一个顶点着色器功能,但没有片段着色器,我的对象只是黑色。如果我需要一个片段着色器,如何编写片段着色器,这样对象就不会失去它的颜色?我得到的最接近的是以下集合:

在顶点着色器中:

// some functionality regarding changing objects position
gl_FrontColor = gl_Color;
gl_FrontSecondaryColor = gl_SecondaryColor;
gl_BackColor = gl_Color;
gl_BackSecondaryColor = gl_SecondaryColor;

根本不加载片段着色器。这样物体被着色但没有纹理。如何保持对象的着色/纹理不变?

1 个答案:

答案 0 :(得分:0)

您可以编写的最简单的片段着色器只使用您在顶点着色器中指定的颜色:

void main()
{
    gl_FragColor = gl_Color;
}

要获得纹理,您需要通过添加以下行来更改顶点着色器以传递纹理坐标:

gl_TexCoord[0] = gl_MultiTexCoord0;

您的片段着色器将是:

uniform sampler2D tex_sampler;
void main()
{
    gl_FragColor = texture2D(tex_sampler,gl_TexCoord[0].st);
}

这会将纹理应用于您的对象。我不确定你的原始设置是什么样的,但是如果你想做照明,那么你需要找出最初使用的照明类型,并在着色器中实现它。