gpt4 book ai didi

opengl - 包装opengl模型的最佳方法

转载 作者:行者123 更新时间:2023-12-02 07:20:02 26 4
gpt4 key购买 nike

简而言之:包装更高级别“模型”对象所需的 OpenGL 缓冲区、着色器和/或矩阵的“首选”方式是什么?

我正在尝试用基于 OpenGL 3.3 核心的 C++ 编写这个微型图形引擎,我想实现一个尽可能干净的解决方案来包装更高级别的“模型”对象,其中包含其顶点缓冲区、全局位置/旋转、纹理(也许还有着色器?)以及可能的其他信息。

我调查过this open source engine, called GamePlay3D并且不太同意其解决这个问题的许多方面。有没有什么好的资源可以讨论现代 OpenGL 的这个主题?或者有一些简单而干净的方法来做到这一点?

最佳答案

这在很大程度上取决于您希望使用引擎实现什么功能。另请注意,这些概念与 DirectX(或任何其他图形 API)相同,因此不要过多关注 OpenGL。以下是 3D 引擎中非常常见的几点(名称可能有所不同):

网格:网格包含子网格,每个子网格包含一个顶点缓冲区和一个索引缓冲区。这个想法是每个子网格将使用不同的 Material (例如,在角色的网格中,可能有一个用于 body 的子网格和一个用于衣服的子网格。)

实例:实例(或网格实例)引用网格、 Material 列表(网格中的每个子网格一个),并包含“每个实例”着色器制服(世界矩阵等),通常分组在统一缓冲区中。

Material :(这部分根据引擎的复杂程度变化很大)。基本版本将包含一些纹理、一些渲染状态(混合状态、深度状态)、着色器程序和所有实例通用的一些着色器制服(例如颜色,但也可能在实例中,具体取决于什么)你想做的事。)

更复杂的版本通常将 Material 分为 channel (有时是包含 channel 技术),其中包含上一段中的所有内容。您可以查看Ogre3D documentation有关更多信息并查看一种可能的实现。 GPU PRO 3 中还有一篇非常好的文章,名为设计数据驱动渲染器它描述了一个基于相同想法的更灵活的系统(但也更复杂)。

场景:(我在这里将其称为场景,但它实际上可以被称为任何名称)。它提供来自环境的着色器参数和纹理(光照值、环境贴图等)。

我认为这就是基础知识。考虑到这一点,如果您想要了解实现细节,您应该能够找到任何开源 3D 引擎的代码。

关于opengl - 包装opengl模型的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27975244/

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