5

次の配列があるとしましょう:

float QuadVertices[4 * 2];
float QuadNormals[4 * 2];

私はこのように記入します:

//Fill vertices for a 2d quad
Renderer->FillVertices(QuadVertices,GL_QUADS,x,y,width,height);

この時点で、すべてがOKです。クワッドをレンダリングし、テクスチャを付け、ストレッチし、すべてを行うことができます。

しかし今、私はクワッドの法線を計算したい:

for (int i = 0; i < 8;i++)
{
    QuadNormals[i] = ??
}

しかし、GL_QUADS の 4 つの頂点または GL_TRIANGLES の 6 つの頂点のいずれかを含む単純な 2D 頂点配列の法線を計算する方法がわかりません....

4

1 に答える 1

11

これがあれば -

   v1        v2
    +---------+
    |         | 
    |         |
    +---------+
    v3        v4

v1..v4 がクワッドの頂点である場合、v1 で法線を計算するには、法線が存在する 2 つのエッジに沿ってベクトルを計算し、それらの頂点の外積を計算する必要があります。

したがって、v1 での法線は

CrossProduct((v2-v1), (v3-v1))

頂点ごとにこれを繰り返すことができますが、クワッドが「フラット」の場合はすべて同じになります

この四角形に他の四角形が接続されている場合は、各四角形の法線を計算し、接続されているすべての四角形の平均をその頂点の法線に割り当てることができます。

于 2012-03-21T14:54:43.727 に答える