OpenGL 3D 图形数据管理全解析
在使用 OpenGL 渲染 3D 图像时,通常需要将多个数据集通过 OpenGL 着色器管道进行传输。例如,要绘制一个简单的 3D 立方体,至少需要发送以下数据:
- 立方体模型的顶点
- 一些变换矩阵,用于控制立方体在 3D 空间中的方向和外观
将数据通过 OpenGL 管道传输有两种方式:
- 通过缓冲区传输到顶点属性
- 直接传输到统一变量
了解这两种机制的工作原理非常重要,这样才能为传输的每个数据项选择合适的方法。接下来,我们将从渲染一个简单的立方体开始。
1. 缓冲区和顶点属性
要绘制一个对象,其顶点必须被发送到顶点着色器。通常的做法是将顶点放在 Java 端的缓冲区中,并将该缓冲区与着色器中声明的顶点属性关联起来。这一过程包括几个步骤,有些步骤只需执行一次,而如果场景是动画,则有些步骤必须在每一帧都执行:
只需执行一次(通常在 init() 函数中)
- 创建一个缓冲区
- 将顶点复制到缓冲区
每一帧都要执行(通常在 display() 函数中)
- 启用包含顶点的缓冲区
- 将缓冲区与顶点属性关联
- 启用顶点属性
- 使用 glDrawArrays(…) 绘制对象
在 OpenGL 中,缓冲区包含在顶点缓冲区对象(Vertex Buffer Object,VBO)中,它在 Java/JOGL 应用程序中声明和实例化。一个场景可能需要多
超级会员免费看
订阅专栏 解锁全文
866

被折叠的 条评论
为什么被折叠?



