2

我正在使用 expression2 对 Garry 的 mod 中的行为进行编程。Expression2存档链接

好吧,开个先例。在 Gmod 中,我有一个块,我完全不知道如何让它围绕 3 个上、下和右矢量旋转(这是局部的。即;如果我将它倾斜 45 度,则前向矢量为 0.707、0.707、 0)。从本质上讲,我希望能够从 3 个向量中获得本地 Pitch/Roll/Yaw。Local Pitch Roll Yaw 我的意思是它们完全相互独立,允许真正的 3d 旋转。例如,例如;如果我放置我的飞行器,使其鼻子平行于地板,则 X、Y、Z 将为 0,0,0。如果我将它平行于地板(世界和本地偏航)90 度,它现在是 0、0、90。如果我然后将它俯仰(世界滚动,本地俯仰)它 180 度,它现在是 180、0、90。我已经已经探索过四元数,但是我认为我不应该在这里发布我的代码,因为我认为我正在重新发明轮子。

我知道我没有很好地解释,但我相信这个问题很笼统。非常感谢任何人可以提供的任何帮助。

哦,我也想避免使用 gimblelock。

本质上是使用上/前/右矢量计算围绕每个工艺上/前/右矢量的旋转。

简单来说,一个通用的实现而不是一个特定于 Gmod 的实现是绝对好的。

4

1 回答 1

1

我不确定您希望实现什么应用程序,但是,在这种情况下,我通常建议应用角力。这足以满足您在这方面的需求吗?

好吧,如果这就是您所需要的,那么我已经设法完善角力方程以使实体指向给定位置。

EntityVector = Entity:massCenter()    
Leverage = sqrt( ( Entity:inertia():length()^2 ) / 3 )   
LookPos = EntityVector - Target:pos()   
A = ang(  
 toDeg( atanr( LookPos:z() , sqrt( LookPos:x()^2 + LookPos:y()^2) ) ) ,  
 toDeg( atanr( -LookPos:y(), -LookPos:x() ) ) ,  
 0 )    
EntityAngle = ( ( Entity:angles() - angnorm(A) ) * 5 + Entity:angVel() ) * 5   
Entity:applyAngForce( -EntityAngle * Leverage ) 

这组方程式帮助我完成了无数项目

于 2009-09-11T15:12:50.480 回答