[英]Compute mesh vertices from a Plane
我想用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();
}
我想畫一下,看一切是否正常。 我該怎么做? (我需要計算頂點和索引才能繪制出來)
要繪制時,需要找到兩個垂直於法線的向量和一個平面上的點。 沒那么難。 首先,讓我們得到一個不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
向量。
在平面上有兩個垂直矢量vect1
和vect2
並有一個點,繪制平面變得微不足道。 例如,具有以下四個點的平方(記住對向量進行歸一化):
point + vect1 * SIZE
point + vect2 * SIZE
point - vect1 * SIZE
point - vect2 * SIZE
point
是平面上的點。 如果您的constant
是距原點的距離,則一個point
是constant * normal
。
繪制平面的困難在於它是一個無限大的表面。 即根據定義,它沒有邊或頂點。 如果要以典型的多邊形方式顯示平面,則必須將其裁剪到特定區域,例如正方形。
一個相當簡單的方法是:
現在,點v1-4表示一個正方形的四個角,該四個角的方向與您的平面相同。 您需要做的就是將它們乘以所需的大小,然后相對於飛機上的任何點進行繪制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.