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

Fra*_*act -1 3d graphics opengl-es 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到GLSL

dat*_*olf 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的现有几何体.

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

  • @Fract:您在此WebGL玩具上看到的着色器不包含几何体.它们是什么,它们采用通常的手段(顶点数组,缓冲区对象)提供的几何体并修改它们.**着色器不包含模型!**Plase,不讨论这个.这不是着色器的作用.如果要在WebGL设置中加载模型,请将其导出为JSON格式并加载.但请理解**着色器没有定义模型!**您不能使用着色器从三角形制作立方体. (2认同)