【发布时间】:2020-11-05 14:36:21
【问题描述】:
我有一个用 c++ 编写的简单图形程序,它使用 opengl 进行渲染。我有一个在原点绘制的平面,我想向它添加程序网格纹理。在我当前的片段着色器中,我只做一些光照计算:
#version 330 core
out vec4 FragColor;
in vec3 Normal;
in vec2 TexCoord;
in vec3 FragPos;
uniform vec3 objectColor;
uniform vec3 lightColor;
uniform vec3 lightPos;
void main()
{
float ambientStrength = 0.5;
vec3 ambient = ambientStrength * lightColor;
vec3 norm = normalize(Normal);
vec3 lightDir = normalize(lightPos - FragPos);
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * lightColor;
vec3 result = (((ambient + diffuse) * objectColor) * 0.5) ;
FragColor = vec4(result, 1.0);
}
我的问题是,如果修改片段着色器是在我的平面上拥有程序网格的最佳方式,那么我应该如何编写这样的着色器?
【问题讨论】:
-
既然你已经有了 texcoord 属性,你需要创建纹理,用数据填充它,将它绑定到一个纹理单元,创建一个统一的采样器变量,将它的值设置为指向适当的纹理单元,对纹理进行采样并将结果与您当前的代码相结合。除非您根本不想使用纹理,在这种情况下您可以直接将生成放在片段着色器中。
-
@BartekBanachewicz 感谢您的建议。我不想使用纹理,但我正在努力在片段着色器中生成网格。