我有一个使用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/

10-08 23:39