-1

是否可以将我的 3D 模型导出或转换为 GLSL ES 2.0?对于创建 GLSL ES 2.0 代码的 Blender/3DS MAX/Maya 等任何编辑器程序,是否存在任何转换器或任何导出器工具/插件?

我想在上述任何编辑器中方便地创建我的模型,然后我想将它们导出/转换为 GLSL ES 2.0。

我已经有一个显示我的着色器的模板 WebGL 代码。我想用转换器或导出器工具自动创建的 GLSL ES 代码替换我的片段着色器和顶点着色器部分。

我想做这样的事情(但对于 GLSL ES 2.0): Blender to GLSL

4

2 回答 2

6

您在这里将苹果与汽车进行比较。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 的现有几何图形。

着色器不用于定义或存储模型。他们只是在渲染时修改它们。

于 2012-12-29T15:06:06.357 回答
0

看看http://www.inka3d.com,它将您的 Maya 着色器转换为 GLSL。对于模型,您需要 WebGL 还是 OpenGL ES 2.0?

于 2013-07-14T09:56:11.027 回答