gpt4 book ai didi

c++ - OpenSceneGraph 和 GLSL 330 光影

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:17 31 4
gpt4 key购买 nike

我写了很多

#version 330 core

GLSL 着色器我想与 OpenSceneGraph (OSG) 3.2.0 框架一起重用,并尝试弄清楚如何从我需要通过制服传入的 OSG 获取状态,以及如何设置它们而不用必须更改经过良好测试的着色器代码,以及如何填充任意命名的属性。

这个(版本 140,OpenGL 3.1) http://trac.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/examples/osgsimplegl3/osgsimplegl3.cpp

还有这个(版本 400) http://trac.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/examples/osgtessellationshaders/osgtessellationshaders.cpp

示例产生了将某些属性和统一名称别名为“osg_”的概念,但我想为统一使用任意名称,

uniform mat4 uMVMatrix;
/*...*/

并且仅通过属性的编号来引用或让 OSG 引用属性,所以像这样

/*...*/
layout(location = 0) in vec4 aPosition;
layout(location = 1) in vec3 aNormal;
layout(location = 2) in vec2 aST;

在我的遗留着色器中使用时,我希望 OSG 框架使用它已经为“Drawables”维护的 vbo 填充,或者至少使用 API 调用并自己完成。

此外,我想通过场景图和访客为灯光和投影图填充制服; SG 中的“某处”和“某种方式”必须为默认着色聚合光和 esp 阴影信息,因此我只想使用此数据并对其进行定制以适合我的自定义着色器。

所以根本的问题是

如何使用 OSG 中的数据填充任意 GLSL 330 着色器,而不必对冗余的统一分配感到不满 - 除了“osg_[...]”由 OSG 统一设置 - 或更改着色器源中的属性名称?

最佳答案

我只是偶然发现了 this ,事实证明,如果您只指定布局位置,您毕竟可以使用自己的名称(到目前为止,我只尝试了顶点位置,因此您可能必须注意使用正确的布局位置,因为 osg 会指定它们,即顶点位置为 0,法线位置为 1(虽然未完成 the example of the link))

layout (location = 0) in vec3 vertex;

这足以在着色器中使用名为 vertex 的变量。

该链接还提供了一个为矩阵使用自定义名称的示例:您创建一个 osg::Uniform::Callback 类,将矩阵上传到 uniform。当您创建 osg::Uniform 对象时,您指定您选择的名称并添加回调。

关于c++ - OpenSceneGraph 和 GLSL 330 光影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24291095/

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