您在这里将苹果与汽车进行比较。OpenGL 是一种绘图 API,GLSL 是一种用于实现着色器代码的编程语言。
3D 模型都不是。唯一的问题“如何将我的 3D 模型转换为 OpanGL?” 没有意义。
是否可以?
不,因为那不是 GLSL 的目的
选择一个模型文件格式(最好是直接实现读取解析器)实现解析器,填充适当的数据结构并将其提供给 OpenGL 的正确部分,进行正确的调用来绘制它们。
OpenGL 本身不处理模型、场景甚至文件。GLSL 甚至不是一种文件格式,它是一种语言。
我会从 OBJ 或 STL 文件开始。它们相当容易阅读和解释,并且非常接近 OpenGL 使用的原始类型。
可能最难阅读的格式是 .blend 文件;实际上,.blend 文件是 Blender 进程内存映像的转储。它需要一个功能齐全的 Blender(或与之非常相似的东西)来理解 .blend 文件。
由于评论而更新:
请仔细阅读您链接到的此导出器脚本的作用:它需要对象材质设置(不是模型本身)并生成 GLSL 代码,当在正确的框架中使用时(即适当的统一和属性名称、矩阵设置等.) 将导致与这些材质设置尽可能接近的着色操作。该脚本不导出模型!
您询问了有关导出 3D 模型的问题。那将是模型的网格和将其放置在世界中的属性。材料不是存储在 OBJ 或 STL 文件中的内容。它们是纹理,是的,着色器。但它们完全独立于模型数据本身。完全可以在多个模型上使用相同的材质设置,或者自由地交换模型的材质(纹理和着色器),只要模型提供所有必需的顶点属性以使该材质工作。
由于评论更新2:
您甚至了解着色器的作用吗?如果没有,这里有一个简短的概要:您有顶点属性数据(在缓冲区中)。这些索引属性被提交给 OpenGL。使用对 glDrawElements 或 glDrawArrays 的调用,属性被解释为基元(点、线或三角形(或旧 OpenGL 版本上的四边形))。然后对每个基元进行多次转换。
强制:第一步是顶点着色器,负责确定其在视口中的最终位置。
可选:在对顶点着色后,由顶点形成的图元进行镶嵌着色。Tesselation 用于细化几何图形,例如向地形添加细节或使曲面更平滑。
可选:接下来是几何着色,它可以用(少量)顶点替换单个顶点。几何着色器甚至可以改变基元类型。因此,例如可以用三角形替换单个点(对于渲染粒子系统很有用)。
强制:最后一步是对基元进行片段着色。在确定了图元在视口中的位置后,它所覆盖的每个像素都会在一个或多个片段中进行处理。片段着色器是一个程序,用于确定目标帧缓冲区中的最终颜色和半透明度。
每个着色步骤都由用户定义的程序控制。正是这些程序,它们被称为着色器,是用 GLSL 编写的。不是几何,没有模型。程式!还有非常简单的程序。它们不会从无到有地生成几何图形,它们总是处理传递给 OpenGL 的现有几何图形。
着色器不用于定义或存储模型。他们只是在渲染时修改它们。