0

我想编写一个可以进行纹理映射和顶点着色的 GLSL 片段着色器。是否可以在一个着色器中同时执行这两项操作?

目前,我可以这样做:

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;(看起来像第一个代码片段)

只绘制带纹理的顶点......这是我的问题。

4

1 回答 1

1

我希望看到的是在最后一个代码片段中全部显示的纹理和非纹理顶点。

你不应该期望那样。

没有“纹理顶点”或“非纹理顶点”之类的东西。只有一种颜色,无论那种颜色是什么。这就是着色器的全部意义:使用任意代码来计算你想要的颜色。

您通过将纹理提取的结果与每个顶点的插值颜色相乘来计算颜色。结果将是两种颜色的组合。即,他们的产品。因此,生成的颜色看起来有点像原始纹理。

于 2012-10-05T16:52:03.913 回答