首页 > 解决方案 > opengl中3d空间平面上的程序网格

问题描述

我有一个用 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);
}


我的问题是修改片段着色器是否是在我的平面上拥有程序网格的最佳方式,如果是这样,我应该如何编写这样的着色器?

标签: c++opengl3dglsl

解决方案


最简单的方法是使用三角函数。由于您已经在传递纹理坐标。

让颜色强度为max(cos(u), cos(v))。这会给你一个开始。然后你应该使用 cos 公式来得到你想要的结果(即乘以一些系数并对其应用幂,直到它看起来完全符合你的需要)。


推荐阅读