c++ - 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);
}
我的问题是修改片段着色器是否是在我的平面上拥有程序网格的最佳方式,如果是这样,我应该如何编写这样的着色器?
解决方案
最简单的方法是使用三角函数。由于您已经在传递纹理坐标。
让颜色强度为max(cos(u), cos(v))
。这会给你一个开始。然后你应该使用 cos 公式来得到你想要的结果(即乘以一些系数并对其应用幂,直到它看起来完全符合你的需要)。
推荐阅读
- spring-boot - 为什么在交换访问令牌的授权码时收到无效的令牌响应?(弹簧靴,oauth2,天蓝色)
- asp.net-web-api - 使用特定列表以角度检索数据
- django - 批量创建主对象和同时引用主对象的对象?
- javascript - 提供给图像 React Native 的无效道具源
- shell - 如何测试是否存在与 shell 中环境 yml 文件的确切包描述匹配的 conda 环境?
- mysql - 如何按聚合列过滤非聚合查询结果?
- javascript - 需要一些想法来在 React Native 应用程序中实现异步存储以保持用户登录应用程序
- java - 更新和/或删除时违反 Hibernate H2 参照完整性约束
- scala - 如何在 Play 框架中进行 Flyway 迁移
- ios - 如何处理 FittedBox 中的动态图像