0

プログラムをデバッグするために OpenGL で Plane を描画したいのですが、それを行う方法がわかりません (数学が苦手です)。

私は2つの属性を持つ平面を持っています:

  • 定数
  • 通常の

ここに私が持っているものがあります:

////////////////////////////////////////////////////////////
Plane::Plane( const glm::vec3& a, const glm::vec3& b, const glm::vec3& c )
{
    glm::vec3 edge1 = b - a;
    glm::vec3 edge2 = c - a;

    this->normal    = glm::cross(edge1, edge2);
    this->constant  = -glm::dot( this->normal, a );
    this->normalize();
}

////////////////////////////////////////////////////////////
Plane::Plane( const glm::vec4& values )
{
    this->normal    = glm::vec3( values.x, values.y, values.z );
    this->constant  = values.w;
}

////////////////////////////////////////////////////////////
Plane::Plane( const glm::vec3& normal, const float constant ) :
constant    (constant),
normal      (normal)
{

}

////////////////////////////////////////////////////////////
Plane::Plane( const glm::vec3& normal, const glm::vec3& point )
{
    this->normal    = normal;
    this->constant  = -glm::dot(normal, point);
    this->normalize();
}

描いて大丈夫か確認したいです。どうすればそれができますか?(描画するには頂点とインデックスを計算する必要があります)

4

2 に答える 2

2

描画するときは、法線に垂直な 2 つのベクトルと平面上の点を見つける必要があります。それはそれほど難しいことではありません。まず、 ではないベクトルを取得しましょうnormal。それを呼び出しますsome_vect。例えば:

if normal == [0, 0, 1]
    some_vect = [0, 1, 0]
else
    some_vect = [0, 0, 1]

次に、計算vect1 = cross(normal, some_vect)すると、 に垂直なベクトルが得られますnormal。計算vect2 = cross(normal, vect1)すると、 に垂直な別のベクトルが得られますnormal

平面上に2 つの垂直ベクトルvect1vect2と 1 つの点があると、平面を描くのは簡単になります。たとえば、次の 4 つのポイントを持つ正方形 (ベクトルを正規化することを忘れないでください)。

point + vect1 * SIZE
point + vect2 * SIZE
point - vect1 * SIZE
point - vect2 * SIZE

point平面上の点です。constantが原点からの距離である場合、1pointは になりますconstant * normal

于 2013-11-04T14:45:00.493 に答える
1

平面を描くことの難しさは、それが無限の表面であることです。つまり、定義上、エッジも頂点もありません。平面を典型的な多角形で表示したい場合は、正方形などの特定の領域に切り取る必要があります。

かなり簡単なアプローチは次のとおりです。

  1. 法線に垂直な任意の単位ベクトルを選択します。v1 として保存します。
  2. v1 と平面法線の外積を使用して v2 を取得します。
  3. v1 を否定して v3 を取得します。
  4. v2 を否定して v4 を取得します。

点 v1-4 は、平面と同じ向きの正方形の 4 つの角を表しています。あなたがする必要があるのは、それらを任意のサイズに乗算し、平面上の任意の点に対して相対的に描画することだけです.

于 2013-11-04T14:47:33.643 に答える