gpt4 book ai didi

c - 如何为 GLSL 中的不同结构成员定义不同的限定符?

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:28 25 4
gpt4 key购买 nike

我正在使用 WebGL,并且我想在我的片段和顶点着色器代码中使用结构化代码,而不仅仅是全局定义它们,因为在 OOP 方面进行了大量工作后眼睛变得锐利。

我遇到了下一个问题,我无法为不同的 struct 成员定义不同的限定符。

例如:

struct Light
{
vec3 normal;
vec3 position;
bool isDirectional;
...
};

我可以像这样创建这个结构的实例:

uniform Light lightInstance;

但是,如您所见,我只能定义一个限定符。

如果尝试使用类似的东西:

varying Light.normal normalValue;
uniform Light.position lightPosition;

然后,我也不能在使用 GLSL 时使用 typedefmemcpypointers。我知道,我应该阅读更多有关 GLSL 的内容,并且我会这样做。

但是要准确地找到关于 WebGL 着色语言的文档是相当困难的。

所以,问题是:我想为单个结构的不同成员定义不同的限定符。在 GLSL(用于 WebGL)中甚至有可能吗?如果答案是,传递它的优雅方式是什么?

最佳答案

引用 GLSL ES .

通过着色语言对 GPU 进行编程与使用 C 对 CPU 进行编程不同,GPU 不是 CPU 并且GLSL 不是 C:一些关键字和缺少结构。

您应该将顶点着色器视为函数,其中统一值是全局只读变量,而变化值是输出值。片段着色器类似,但变化值现在是输入值,统一值仍然是全局只读变量。
因此全局变量与 CPU 应用程序中的通常情况不同,着色器很少变得复杂到足以从 OOP 中受益,过程方法仍然更优雅

为什么您希望结构的一个成员被限定为 uniformsame 结构的另一个成员被限定为 varying
通常光线是均匀的,在什么值(即顶点属性)之间会插入光线的法线成员(方向?)?

这种使用限定符的尝试要么意味着您不完全理解什么是 uniform 变量和 varying 变量,要么您不完全理解 struct 在编程中的用途。

关于c - 如何为 GLSL 中的不同结构成员定义不同的限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388598/

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