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