gpt4 book ai didi

c++ - OpenGL - 制服没有被正确传递?

转载 作者:行者123 更新时间:2023-11-30 05:08:27 25 4
gpt4 key购买 nike

我有一个非常简单的片段着色器:

#version 330 core

// Interpolated values from the vertex shaders
in vec3 positionW;

// Output data
out vec3 frag_color;

uniform vec3 alsoLightW;

void main(void) {
vec3 temp = normalize(alsoLightW);
frag_color = vec3((temp.x + 1.0) / 2, (temp.y + 1.0) / 2, (temp.z + 1.0) / 2);
}

它所做的只是标准化我传递给它的一个统一的 vec3,然后为它设置我的片段颜色(在 0 和 1 之间——所以 0 vector 的颜色为 0.5、0.5、0.5)。我在我的 C++ 代码中打印出这个 vector ,并验证它是否通过 renderdoc 正确传递,但是它吐出的实际颜色始终是错误的——它们似乎与我的制服没有任何关系,但它总是无论如何,给我相同的颜色。例如,我的 vec3 应该有一个 0 的 y 坐标,所以我期望绿色值为 0.5,但根据 renderdoc,我得到的是 .2 左右

这可能是什么原因?这让我发疯,让我的更复杂的着色器根本无法工作。

编辑:将制服传递给 OpenGL:

ctx.shader->Enable();

...

glm::vec3 oppOffset = *Object::globalOffset;
oppOffset *= -1;

glUniform3fv(lightLocation, 1, glm::value_ptr(oppOffset));

glm::vec3 norm = glm::normalize(oppOffset);
//Prints the correct information
std::cout << (norm.x + 1) / 2 << "," << (norm.y + 1) / 2 << "," << (norm.z + 1) / 2 << std::endl;

Edit2:我尝试将它们作为单独的 float 传递,但我得到的数字与以前完全相同。 I've uploaded an image of what I mean - 左下角的数字是我从 cout 得到的,右上角的是 RenderDoc 给我的

这就是我的制服传球现在的样子:

glm::vec3 norm = glm::normalize(oppOffset);
norm = (norm + glm::vec3(1.0, 1.0, 1.0)) * glm::vec3(0.5, 0.5, 0.5);
float x, y, z;
x = norm.x;
y = norm.y;
z = norm.z;
ctx.shader->uniform1fv("lightx", 1, &x);
ctx.shader->uniform1fv("lighty", 1, &y);
ctx.shader->uniform1fv("lightz", 1, &z);
std::cout << x << "," << y << "," << z << std::endl;

还有我的着色器:

#version 330 core

// Interpolated values from the vertex shaders
in vec3 positionW;

// Output data
out vec3 frag_color;

uniform float lightx;
uniform float lighty;
uniform float lightz;

void main(void) {
//vec3 temp = normalize(alsoLightW);
frag_color = vec3(lightx, lighty, lightz);
}

一些非常奇怪的事情正在发生......

最佳答案

问题不在于制服(或传递制服),而在于渲染缓冲区的格式。缓冲区采用 SRGB 格式,这意味着它不会存储线性颜色,而是经过 Gamma 校正的颜色。

你所有的结果都将由这个等式决定:

color_srgb = pow(color_rgb, 2.2);

关于c++ - OpenGL - 制服没有被正确传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46845878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com