gpt4 book ai didi

opengl - (OpenGL 3.1 - 4.2) 动态统一数组?

转载 作者:行者123 更新时间:2023-12-02 08:49:06 25 4
gpt4 key购买 nike

假设我有 2 个物种,例如人类和小马。它们具有不同的骨骼系统,因此每个物种的统一骨骼阵列必须有所不同。我是否必须实现两个单独的着色器程序才能正确渲染每个骨骼数组,或者是否有办法动态声明统一数组并迭代该动态数组?

牢记性能(所有着色器在决策分支方面都很糟糕)。

最佳答案

在 OpenGL 4.3 之前,GLSL 中的数组必须具有固定的编译时大小。 4.3 允许使用着色器存储缓冲区对象,这允许它们的最终长度“无界”。基本上,你可以这样做:

buffer BlockName
{
mat4 manyManyMatrices[];
};

OpenGL 将根据您使用 glBindBufferRange 的方式在运行时计算出此数组中有多少个矩阵。 。因此,您仍然可以使用 manyManyMatrices.length() 来获取长度,但它不会是编译时常量。

但是,此功能(在进行本次编辑时)非常新,并且仅在测试版中实现。它还需要 GL 4.x 级硬件(又名:Direct3D 11 级硬件)。最后,由于它使用着色器存储 block ,因此访问数据可能比人们希望的要慢。

因此,我建议您仅使用具有最大数量矩阵的统一 block 。如果这成为内存问题(不太可能),那么您可以根据数组大小拆分着色器或使用着色器存储 block 或其他方式。

关于opengl - (OpenGL 3.1 - 4.2) 动态统一数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916103/

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