[英]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.