是否可以将我的3D模型(dae / blend / 3ds / ...)转换/导出到GLSL ES 2.0中?

时间:2012-12-29 14:59:18

标签: graphics opengl-es 3d glsl blender

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

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

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

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

2 个答案:

答案 0 :(得分: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的现有几何体。

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

答案 1 :(得分:0)

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