C++ 从平面计算网格顶点
我想用OpenGL绘制我的平面来调试我的程序,但我不知道怎么做(我的数学不是很好) 我有一架飞机有两个属性:C++ 从平面计算网格顶点,c++,opengl,math,C++,Opengl,Math,我想用OpenGL绘制我的平面来调试我的程序,但我不知道怎么做(我的数学不是很好) 我有一架飞机有两个属性: 恒量 正常人 以下是我得到的: //////////////////////////////////////////////////////////// Plane::Plane( const glm::vec3& a, const glm::vec3& b, const glm::vec3& c ) { glm::vec3 edge1 = b - a
- 恒量
- 正常人
////////////////////////////////////////////////////////////
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();
}
我想画出来看看是否一切正常。我怎么能做到?
(我需要计算顶点和索引来绘制它)当你想要绘制时,你需要找到两个垂直于法线的向量和一个平面上的点。这并不难。首先,让我们得到一个不正常的向量。称之为
some\u 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
和一个点,绘制平面变得很简单。例如,具有以下四个点的sqaure(记住规范化向量):
其中,
点
是平面上的点。如果你的常数
是距离原点的距离,那么一个点
将是常数*法线
当你想画图时,你需要找到两个垂直于法线的向量和平面上的一个点。这并不难。首先,让我们得到一个不正常的向量。称之为some\u 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
和一个点,绘制平面变得很简单。例如,具有以下四个点的sqaure(记住规范化向量):
其中,
点
是平面上的点。如果你的常数
是距离原点的距离,那么一个点
将是常数*法线
当你想画图时,你需要找到两个垂直于法线的向量和平面上的一个点。这并不难。首先,让我们得到一个不正常的向量。称之为some\u 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
和一个点,绘制平面变得很简单。例如,具有以下四个点的sqaure(记住规范化向量):
其中,
点
是平面上的点。如果你的常数
是距离原点的距离,那么一个点
将是常数*法线
当你想画图时,你需要找到两个垂直于法线的向量和平面上的一个点。这并不难。首先,让我们得到一个不正常的向量。称之为some\u 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
和一个点,绘制平面变得很简单。例如,具有以下四个点的sqaure(记住规范化向量):
其中,
点
是平面上的点。如果你的常数
是距离原点的距离,那么一个点
就是常数*法线绘制平面的困难在于它是一个无限曲面;i、 e.根据定义,它没有边或顶点。如果要以典型的多边形方式显示平面,则必须将其裁剪到特定区域,例如正方形
一个相当简单的方法是:
拾取垂直于法线的任意单位向量。将其存储为v1
使用v1和平面法线的叉积得到v2
对v1求反得到v3
求反v2得到v4
点v1-4现在表示与平面方向相同的正方形的四个角。你所需要做的就是将它们相乘到你想要的大小,然后相对于平面上的任何点绘制它。绘制平面的困难在于它是一个无限的曲面;i、 e.根据定义,它没有边或顶点。如果要以典型的多边形方式显示平面,则必须将其裁剪到特定区域,例如正方形
一个相当简单的方法是:
拾取垂直于法线的任意单位向量。将其存储为v1
使用v1和平面法线的叉积得到v2
对v1求反得到v3
求反v2得到v4
点v1-4现在表示与平面方向相同的正方形的四个角。你所需要做的就是将它们相乘到你想要的大小,然后相对于平面上的任何点绘制它。绘制平面的困难在于它是一个无限的曲面;i、 e.根据定义,它没有边或顶点。如果要以典型的多边形方式显示平面,则必须将其裁剪到特定区域,例如正方形
一个相当简单的方法是:
拾取垂直于法线的任意单位向量。将其存储为v1
<