我想编写一个可以进行纹理贴图和顶点着色的GLSL Fragment Shader。是否可以在一个着色器中同时执行这两个操作?
目前,我可以这样做:
gl_FragColor = texture2D(tex, gl_TexCoord[0].st);
这会导致绘制纹理顶点,但不会绘制颜色顶点。 (看起来像这样:http://www.tiikoni.com/tis/view/?id=124eb69)
我也可以这样做:
gl_FragColor = gl_Color;
这会导致绘制彩色顶点但不会绘制纹理顶点。 (看起来像这样:http://www.tiikoni.com/tis/view/?id=5bcd838)
如果我这样做:
gl_FragColor = texture2D(tex, gl_TexCoord[0].st) * gl_Color;
(看起来像第一个代码段)
只绘制了纹理顶点...这是我的问题。
答案 0 :(得分:1)
我希望看到的是在最后一段代码片段中显示的纹理和非纹理顶点。
你不应该期待那样。
没有“纹理顶点”或“非纹理顶点”这样的东西。无论颜色是什么,只有颜色。这就是着色器的重点:使用任意代码来计算你想要的颜色。
您通过将纹理提取的结果与每顶点插值颜色相乘来计算颜色。结果将是两种颜色的组合。即,它们的产物。因此,结果颜色看起来有点像原始纹理。