Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从平面计算网格顶点_C++_Opengl_Math - Fatal编程技术网

C++ 从平面计算网格顶点

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

我想用OpenGL绘制我的平面来调试我的程序,但我不知道怎么做(我的数学不是很好)

我有一架飞机有两个属性:

  • 恒量
  • 正常人
以下是我得到的:

////////////////////////////////////////////////////////////
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
  • <