2

単純な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    

前もって感謝します

4

1 に答える 1

2

OpenGL では、法線は位置やテクスチャ座標と同様にベクトル属性です。

面ごとの法線を持つことは妥当に思えるかもしれませんが、実際には機能しません。

理由: 1 つの三角形は物理的に平らですが、曲面に近似していることがよくあります。三角形の頂点間で異なる法線ベクトルを使用すると、それらの間を補間して、サーフェスの任意の点で近似法線ベクトルを取得できます。

頂点法線は、滑らかなサーフェスの特定の点における法線のサンプルと考えてください。

(もちろん、立方体のようなハード エッジを持つサーフェスをレンダリングする場合、上記は実際には役に立たず、多くの場合、法線だけが異なる頂点を複製する必要があります。)

于 2012-11-24T09:10:35.390 に答える