【问题标题】:OpenGL arrangement of normal data in VBOsVBO中普通数据的OpenGL排列
【发布时间】:2012-11-24 06:21:00
【问题描述】:

在阅读简单 VBO 程序的示例时​​,我注意到正常数据与顶点数据之间似乎存在关联。但是从法线的定义来看,我会认为法线数据应该与人脸数据相关联。

从下面的代码段中,我可以注意到每个 MyVertex 的法线数据是相同的,因此“三角形面”的法线是有意义的。但我不确定如何存储较大对象的正常数据,其中几个面可能共享存储在 GL_ELEMENT_ARRAY_BUFFER 中的相同顶点。

问题: OpenGL 在概念上如何处理普通数据?还是我对法线在某处的工作方式做出了错误的假设?

(以下代码来自http://www.opengl.org/wiki/VBO_-_just_examples

struct MyVertex
  {
    float x, y, z;        //Vertex
    float nx, ny, nz;     //Normal
    float s0, t0;         //Texcoord0
  };

  MyVertex pvertex[3];
  //VERTEX 0
  pvertex[0].x = 0.0;
  pvertex[0].y = 0.0;
  pvertex[0].z = 0.0;
  pvertex[0].nx = 0.0;
  pvertex[0].ny = 0.0;
  pvertex[0].nz = 1.0;
  pvertex[0].s0 = 0.0;
  pvertex[0].t0 = 0.0;
  //VERTEX 1    

提前致谢

【问题讨论】:

  • 代码部分的其余部分在哪里?
  • 它在链接中,我不确定是否应该在他的问题本身中发布一大块代码

标签: opengl vbo


【解决方案1】:

在 OpenGL 中,法线是矢量属性,就像位置或纹理坐标一样。

拥有每个面的法线似乎是合理的,但在实践中是行不通的。

原因:一个三角形在物理上是平坦的,但通常是曲面的近似值。使三角形顶点之间的法线向量不同,您可以在它们之间进行插值,以在表面的任何点处获得近似的法线向量。

将顶点法线视为平滑表面某些特定点的法线样本。

(当然,当渲染具有硬边的表面时,比如立方体,上面的方法并没有真正的帮助,而且很多要求你有重复的顶点,它们的区别只是法线不同。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多