Math 用于三维细分的Tetrehedra旋转

Math 用于三维细分的Tetrehedra旋转,math,opengl,geometry,3d,Math,Opengl,Geometry,3d,我正在尝试用一堆图片渲染一些3d图形。我想弄清楚如何旋转一个四面体,使它与另一个四面体完全面对面。如果这是令人困惑的,多个四面体面对面接触看起来会是这样的 我使用OpenGL以编程方式旋转对象,因此一次只能在三个轴中的一个轴上旋转。例如,我可以在X轴上顺时针旋转20度,然后在Z轴上逆时针旋转45度,等等 我了解该程序的编程方面(使用OpenGL的glRotatef()函数一次在一个轴上旋转),但更感兴趣的是实现3d细分所需的每个轴的特定角度 感谢您的帮助,如果您需要更多说明,请告诉我。如果他们需

我正在尝试用一堆图片渲染一些3d图形。我想弄清楚如何旋转一个四面体,使它与另一个四面体完全面对面。如果这是令人困惑的,多个四面体面对面接触看起来会是这样的

我使用OpenGL以编程方式旋转对象,因此一次只能在三个轴中的一个轴上旋转。例如,我可以在X轴上顺时针旋转20度,然后在Z轴上逆时针旋转45度,等等

我了解该程序的编程方面(使用OpenGL的glRotatef()函数一次在一个轴上旋转),但更感兴趣的是实现3d细分所需的每个轴的特定角度


感谢您的帮助,如果您需要更多说明,请告诉我。

如果他们需要完全面对面,我根本不会尝试寻找轮换

相反,我将从一个四面体开始。决定哪张脸与下一张脸共用

取该面上两条边的叉积(50%的概率指向第四个点的方向,在这种情况下,反转向量)。规范化乘以sqrt(6)/3*边长度(这是一个常数,预计算!)

现在有一个向量指向新四面体的第四个顶点(你已经知道的其他3个顶点,它们与面上的顶点相同!),长度等于新四面体的高度

现在只需要向量的原点:取3个共享顶点坐标的算术平均值,这将给出该面的中心点

将向量添加到该点,得到最终点


现在,两个四面体共享一个面(无论方向如何),无需旋转数学。

谢谢Damon。问题是,我试图在运行时添加和删除额外的四面体(可能应该指定这个),每个四面体必须与四面体对象的一个实例关联(这样我就可以调用tetra.draw()。这有意义吗?对您感兴趣的解决方案有任何可能的修改吗?基本上,只要总是有东西可以连接,就可以这样做。要获得单独的实例,只需复制3个现有顶点(要连接到的面上的顶点),然后如上所述计算第4个顶点。边的长度在运行期间无法更改,或者您无法正确连接它们,因此高度仍然是一个可预计算的常量。因此,我可能必须始终通过将相邻四面体的实例以及新四面体相邻的特定边传递给构造函数来创建一个四面体的实例。听起来可以接受。谢谢