c++ - 为什么在 OpenGL 中显式管理矩阵更好?

标签 c++ c opengl matrix

最近我一直在用 OpenGL 搞乱,我遇到了允许 OpenGL 管理 View /模型/投影矩阵或自己管理它们之间的分歧,无论是使用您自己的矩阵实现还是诸如此类的库作为 GLM。我已经看到很多大型项目都有自己的相机管理(即管理自己的平移、旋转等)。我明白为什么它有助于确保您完全控制系统,但除此之外,它似乎需要做很多工作才能获得边际 yield 。

为什么自己管理比使用内置的 OpenGL 函数更好?显然这是在着色器管道的上下文中,而不是固定函数默认值。

(这适用于任何 3D 库)。

最佳答案

(顺便说一句,OpenGL ES 2 没有转换管理工具,因此在某些情况下您别无选择。)

更重要的是,我发现通过 OpenGL 的内置矩阵堆栈管理矩阵有时真的很痛苦,迫使我在渲染代码的更复杂部分大量地推送和弹出,甚至重新排序渲染有时只是为了简化堆栈管理。我还编写了一个使用 RAII 自动管理所有这些的 C++ pusher-popper 类,但它需要仔细确定局部变量的范围。

当我切换到 ES 2 时,我很沮丧地发现所有这些功能都消失了。然而,我发现切换到我自己的矩阵实际上简化了我的代码,因为我可以使用局部变量和成员变量(具有有意义的名称)的组合来处理多个转换而不会迷失在空间中,并且转换堆栈主要通过使用调用堆栈——即,当前转换只是一个局部矩阵变量,它作为父转换参数传递给下一个函数——但可以灵活地在其他时间以不同的方式执行。

关于c++ - 为什么在 OpenGL 中显式管理矩阵更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7828447/

相关文章:

c++ - 如何测试 C++ 的功能支持?

c++ - 将指针容器作为参数传递给 const

c++ - 将模板从类特化为整数

c - Gcc:匿名字符串的内存区域

c++ - 赋值运算符和深拷贝

c++ - 将 Visual C/C++ 内联汇编代码转换为 GCC 等效代码

c++ - 如何 #define 多个值 C/C++

c - OpenGL MVP 矩阵计算错误

c++ - 将 QT5 与 glLoadGen 结合使用

c++ - OpenGL VBO批处理最佳做法