如何将浮点值发送到片段着色器?

问题描述

我不知道如何将浮点数传递给片段着色器。我想改变

float ambientStrength;

作为取自 mainloop 的值。例如,应该有一个案例(“O”键)将此环境强度更改为 1.0。

case sf::Event::KeyPressed:
                switch (windowEvent.key.code) {
                case sf::Keyboard::Escape:
                    running = false;
                    break;
                case sf::Keyboard::O:
                    
                    break;
                }

片段着色器如下所示:

const GLchar* fragmentSource = R"glsl(
#version 150 core
in vec3 Color;
in vec2 TexCoord;
in vec3 Normal;
in vec3 FragPos;
in vec3 lightPos;
in int lightOn
out vec4 outColor;
uniform sampler2D texture1;

void main()
{
float ambientStrength = 0.1; //I WANT CHANGE THIS FROM THE PRESSED KEY
vec3 ambientlightColor = vec3(1.0,1.0,1.0);
vec4 ambient = ambientStrength * vec4(ambientlightColor,1.0);
vec3 difflightColor = vec3(1.0,1.0);
vec3 norm = normalize(Normal);
vec3 lightDir = normalize(lightPos - FragPos);
float diff = max(dot(norm,lightDir),0.0);
vec3 diffuse = diff * difflightColor;
outColor = vec4(Color,1.0);
outColor = (ambient+vec4(diffuse,1.0)) * texture(texture1,TexCoord);

//outColor=texture(texture1,TexCoord);
}
)glsl";

解决方法

在片段着色器中包含“uniform float environmentStrength”并在您的 C++ 代码击键中使用它:

loginStatus='logged'

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...