Arrays GLDrainElements()希望法线数组包含什么?
我正在为MilkShape 3D模型编写解码器。 我将内容加载到一个顶点数组和一个面索引数组(如Arrays GLDrainElements()希望法线数组包含什么?,arrays,opengl,Arrays,Opengl,我正在为MilkShape 3D模型编写解码器。 我将内容加载到一个顶点数组和一个面索引数组(如std::vector),然后使用glpaurements()渲染它,目前为止效果良好 但问题在于法线数组。OpenGL希望法线的顺序是什么?MilkShape 3D文件包含三条相同的float[3]法线,位于面(三角形)索引之后。但是如果我只是push_back()我在法线数组中读取的内容,OpenGL将无法正确应用照明 所以我想我把订单搞乱了。如何做对? 感谢阅读。您描述的内容听起来像MilkSh
std::vector
),然后使用glpaurements()
渲染它,目前为止效果良好
但问题在于法线数组。OpenGL希望法线的顺序是什么?MilkShape 3D文件包含三条相同的float[3]
法线,位于面(三角形)索引之后。但是如果我只是push_back()
我在法线数组中读取的内容,OpenGL将无法正确应用照明
所以我想我把订单搞乱了。如何做对?
感谢阅读。您描述的内容听起来像MilkShape3D,为您提供了每一张脸的法线。OpenGL需要逐顶点法线
因此,您需要处理数据以从每个面生成每个顶点。关于这一点,网络上有很多文献,只要点击一下谷歌就会给出。你描述的东西听起来像MilkShape3D,会给出每一张脸的法线。OpenGL需要逐顶点法线
因此,您需要处理数据以从每个面生成每个顶点。网络上有很多关于这方面的文献,谷歌上的一个例子就是。OpenGL假设索引的法线与顶点位置非常相似。必须了解,顶点本身是属性向量的向量,或者换句话说,是所有属性值(位置、法线、颜色、纹理坐标等)的向量。GLD元素索引数组处理顶点数组,其中每个顶点都是这样一个高维向量 现在可能发生的是,这个乳状体混合了面部缠绕,并给你法线,其中一些法线被翻转到了相反的方向(向内而不是向外)。我不知道它是如何在Milkshape中完成的,但在Blender中有一个函数“重新计算法线”(通过CTRL+N热键访问),可以解决这个问题 如果不想修复法线,则必须启用双面照明(这会影响性能)
OpenGL假设索引的法线与顶点位置非常相同。必须了解,顶点本身是属性向量的向量,或者换句话说,是所有属性值(位置、法线、颜色、纹理坐标等)的向量。GLD元素索引数组处理顶点数组,其中每个顶点都是这样一个高维向量 现在可能发生的是,这个乳状体混合了面部缠绕,并给你法线,其中一些法线被翻转到了相反的方向(向内而不是向外)。我不知道它是如何在Milkshape中完成的,但在Blender中有一个函数“重新计算法线”(通过CTRL+N热键访问),可以解决这个问题 如果不想修复法线,则必须启用双面照明(这会影响性能)
我确实把常态的顺序搞乱了 MilkShape 3D模型文件结构可以近似为:
float[3]
short[3]
,每个三角形+3条法线为float[3]
您需要在
法线[currentFace.index123]
处加载法线。用简单的英语来说,法线
数组中的法线索引必须与顶点
数组中的顶点索引相对应。我确实弄乱了法线的顺序
MilkShape 3D模型文件结构可以近似为:
float[3]
short[3]
,每个三角形+3条法线为float[3]
法线[currentFace.index123]
处加载法线。简单地说,来自法线
数组的法线索引必须与来自顶点
数组的顶点索引相对应
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);