gpt4 book ai didi

c++ - 连续内存、OpenGL,以及如何包装顶点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:46 24 4
gpt4 key购买 nike

因此,OpenGL 编程的一个关键要求是以保证连续内存的方式存储顶点。我最近读了几本专业图形程序员写的不错的书,他们都使用了相同想法的变体:将顶点打包成一个 struct of 3 floats, x ,y,z,然后将多个顶点打包到这些 structs 的 c 风格数组或 std::vector 中。并且有效。

但是我在这个站点上看到它一次又一次地说 struct 不能保证内存连续性。有人说,如果您的结构包含所有 float ,那么它们可能是连续的,但不能保证。数组std::vector 确实保证了这一点,但如果您放入数组或 vector 中的内容不连续,那将无关紧要。

对于生产代码,我希望“可能”不会削减它。因此,尽管这两本书中的建议显然更适合学习,但我想知道还有哪些其他好的技术可以以保证连续内存的方式轻松组织顶点数据,或者,我会接受我不应该为此担心的建议,可能应该足够好。

图形领域还有哪些常用的好用的方法?

最佳答案

So, a critical requirement for OpenGL programming is that you store your vertices in a fashion that guarantees contiguous memory.

不,不是真的。连续内存可以节省空间,但只要属性之间的步幅(以字节为单位的距离)在所有元素之间是相同的,这个东西就可以工作。

What are other common and good methods used in the graphics field?

原始数据类型的简单、普通、平面数组,如 std::vector<float> , 或 std::vector<char>如果您只想要一大块内存,您可以在其中手动连续分布数据。您可以使用 getter 和 setter 方法以及抽象偏移量和步幅计算的迭代器接口(interface)将其很好地包装在一个类中。

如果可以使用编译器扩展来指定其内存布局,则也可以使用结构。例如 GCC 的 __attribute__((packed))将使元素之间没有间隙的紧密结构。

关于c++ - 连续内存、OpenGL,以及如何包装顶点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961495/

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