2

Garry の mod で動作をプログラムするために expression2 を使用しています。Expression2 (アーカイブ リンク)

さて、前例を設定します。Gmod にはブロックがあり、3 つの上下と右のベクトルの周りを回転させる方法が完全に失われています (これはローカルです。つまり、45 度ピッチすると、前方ベクトルは 0.707、0.707、 0)。基本的に、3 つのベクトルから、ローカルのピッチ/ロール/ヨーを取得できるようにしたいと考えています。ローカル ピッチ ロール ヨーとは、互いに完全に独立しており、真の 3D 回転が可能であることを意味します。たとえば、ノーズが床と平行になるようにクラフトを配置すると、X、Y、Z は 0、0、0 になります。床に平行に回転させると (World および Local Yaw) 90 度になり、0、0、90 になります。次にピッチ (World Roll、Local Pitch) すると、180 度になり、180、0、90 になります。すでにクォータニオンを調査しましたが、車輪を再発明していると思うので、ここにコードを投稿する必要はないと思います。

うまく説明できていないことは承知していますが、問題はかなり一般的なものだと思います。誰でも提供できるヘルプは大歓迎です。

あ、ジンブルロックも避けたい。

基本的に、上/前/右ベクトルを使用して、クラフトの上/前/右ベクトルの周りの回転を計算します。

簡単に言うと、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 に答える