C++ 如何获取由平面描述的多边形的顶点

C++ 如何获取由平面描述的多边形的顶点,c++,graphics,3d,C++,Graphics,3d,这是一个没有答案的问题的复述 基本上,我正在尝试为具有以下格式的地图建模: 每个笔刷定义一个实体区域。笔刷将该区域定义为四个或更多平面的交点。每个平面由三个非共线点定义。这些点必须以顺时针方向移动: 1--2-----------------> | 3 | | | | | , 1--2-----------------> | 3. | | | | | , 每个笔刷语句如下所示: { ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) //plane 1 ( 256 0

这是一个没有答案的问题的复述

基本上,我正在尝试为具有以下格式的地图建模:

每个笔刷定义一个实体区域。笔刷将该区域定义为四个或更多平面的交点。每个平面由三个非共线点定义。这些点必须以顺时针方向移动:

1--2-----------------> | 3 | | | | | , 1--2-----------------> | 3. | | | | | , 每个笔刷语句如下所示:

{ ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) //plane 1 ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) //plane 2 ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) //plane 3 ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) //plane 4 ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) //plane 5 ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 )//plane 6 } { (12800)(12810)(12801)//平面1 (256 0 0)(256 0 1)(256 1 0)//平面2 (0 128 0)(0 128 1)(1 128 0)//平面3 (03840)(13840)(03841)//平面4 (0 0 64)(1 0 64)(0 1 64)//平面5 (0 0 128)(0 1 128)(1 0 128)//平面6 } 当你第一次看到它的时候,可能有点困惑。它定义了一个从(128128,64)延伸到(256384128)的矩形区域。以下是单行线的含义:

( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) 1st Point 2nd Point 3rd Point ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) 第1点第2点第3点 我需要找到平面的交点,这样我就可以只使用可以在三维空间中绘制二维面板的方法来绘制形状。 例如,以下代码将在空间中绘制三角形:

beginShape(); vertex(x0,y0,z0); vertex(x1,y1,z1); vertex(x2,y2,z2); vertex(x0,y0,z0); endShape(); beginShape(); 顶点(x0,y0,z0); 顶点(x1,y1,z1); 顶点(x2,y2,z2); 顶点(x0,y0,z0); endShape();
有没有更好的方法来计算顶点,而不是遍历所有可能的平面兴趣?

我认为没有其他选择:关于顶点的唯一信息包含在平面中,从平面获取顶点的唯一方法是确定它们的交点,因此,您必须循环考虑各种可能性

开始:

如果您确定这些平面确实绑定了一个体积,并且没有一个平面是平行的,那么3个相邻平面的每个组合都应该产生一个顶点(只需同时为所有3个平面求解顶点)。可以很容易地消除体积外的顶点(要成为形状的一部分,它们必须在所有平面上或“后面”),因此,如果没有此“邻接”信息,可以测试3的每个组合并丢弃外部点


我觉得使用这种方法只会有体积,所以你可能只需要在所有这些顶点上做一个3d,就可以得到这些面的可绘制三角形。

一些术语:“实体区域”=“体积”,“四个或更多平面的交集”=“由四个或更多平面包围的体积”(两个平面的交集是一条直线或什么都没有)。。。“矩形区域”=“矩形棱镜”…并不意味着迂腐,但问题已经够难了;)迂腐被优雅地接受了,它们将是凸面的。任何非凸面的体积都被分成凸面的体积。呃…我想我会把它砍掉的。