Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays GLDrainElements()希望法线数组包含什么?_Arrays_Opengl - Fatal编程技术网

Arrays GLDrainElements()希望法线数组包含什么?

Arrays GLDrainElements()希望法线数组包含什么?,arrays,opengl,Arrays,Opengl,我正在为MilkShape 3D模型编写解码器。 我将内容加载到一个顶点数组和一个面索引数组(如std::vector),然后使用glpaurements()渲染它,目前为止效果良好 但问题在于法线数组。OpenGL希望法线的顺序是什么?MilkShape 3D文件包含三条相同的float[3]法线,位于面(三角形)索引之后。但是如果我只是push_back()我在法线数组中读取的内容,OpenGL将无法正确应用照明 所以我想我把订单搞乱了。如何做对? 感谢阅读。您描述的内容听起来像MilkSh

我正在为MilkShape 3D模型编写解码器。 我将内容加载到一个顶点数组和一个面索引数组(如
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);