gpt4 book ai didi

c++ - 如何在没有主要功能的情况下使用片段着色器

转载 作者:行者123 更新时间:2023-11-28 04:48:18 25 4
gpt4 key购买 nike

我从 http://madebyevan.com/shaders/fast-rounded-rectangle-shadows/ 找到了一个可以做阴影的着色器

// License: CC0 (http://creativecommons.org/publicdomain/zero/1.0/)

// This approximates the error function, needed for the gaussian integral
vec4 erf(vec4 x) {
vec4 s = sign(x), a = abs(x);
x = 1.0 + (0.278393 + (0.230389 + 0.078108 * (a * a)) * a) * a;
x *= x;
return s - s / (x * x);
}

// Return the mask for the shadow of a box from lower to upper
float boxShadow(vec2 lower, vec2 upper, vec2 point, float sigma) {
vec4 query = vec4(point - lower, upper - point);
vec4 integral = 0.5 + 0.5 * erf(query * (sqrt(0.5) / sigma));
return (integral.z - integral.x) * (integral.w - integral.y);
}

我认为着色器需要一个主要函数并且应该返回颜色。我的问题是如何在 c++ 代码中使用函数 boxShadow 和 opengl 给定一个盒子谢谢

最佳答案

函数可以在着色器中定义,就像您对 C 函数所做的那样。我的意思是,该函数的代码与着色器的其余部分位于相同的“单元”中。

#version XX-YY

//MyFunc(.....)
whateverreturn MyFunc(.....)
{
do something and return a whateverreturn
}

void main(void)
{
//use MyFunc
whateverreturn var = MyFunc(....)
}

有点不同的情况是当你有一个函数可以是几个着色器的一部分,但它不是一个“完整的”着色器,它没有 main()功能。此函数存在于文件或字符串数​​组或类似的东西中。

假设您在特定文件中有函数:

#version XX-YY

//MyFunc(.....)
whateverreturn MyFunc(.....)
{
do something and return a whateverreturn
}

以及您要在其中使用着色器的文件:

#version XX-YY

//declare the function
whateverreturn MyFunc(.....);

void main(void)
{
//use MyFunc
whateverreturn var = MyFunc(....)
}

就像处理任何常见 GLSL 代码一样,使用 glShaderSourceglCompileShader

现在关键的一步是如何将代码集成到一个完整(带有'main')着色器中:只需使用glAttachShader(再次,就像你在 glLinkProgram 之前对 VS 或 FS 做的那样),仅此而已。

关于c++ - 如何在没有主要功能的情况下使用片段着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48752195/

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