我有一个使用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);
}
我的问题是,修改片段着色器是否是在飞机上制作程序网格的最佳方式?如果是,我应该如何编写这样的着色器? 最佳答案
最简单的方法是使用Trig函数。由于您已经传递了纹理坐标。
设颜色强度为max(cos(u), cos(v))
。那会给你一个开始。然后,您应该尝试使用cos公式来获得所需的精确值(即,将其乘以一些系数并对其施加幂,直到它看起来完全符合您的需要)。
关于c++ - opengl中3d空间中的平面上的过程网格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64699381/