多くの操作を行うことなく、水平軸の角度を反転する方法を知りたいです。角度が 0 (コードの座標系で「右向き」) であるとします。反転した角度は 180 (左向き) である必要があります。90 (上向き) の場合、反転しても 90 のままです。89 は 91 などです。角度によって暗示される X/Y 速度で操作できますが、それでは速度が低下し、適切な方法ではないと感じています。私はあまり数学を知らないので、間違った名前で呼んでいるかもしれません...誰か助けてくれますか?
編集:申し訳ありませんが、時間がかかりました。長い間コンピューターから離れなければなりませんでした... http://img215.imageshack.us/img215/8095/screenshot031v.jpg
このスクリーンショットで十分かもしれません。上の構造は、2 つの衛星と、中央の白い点にリンクされたビームです。2 つのサテライトは白い点の角度を継承する必要があります (デバッグ目的で表示されます)。左の衛星が映っているので、こちらも初挑戦でしたが、おっしゃる通り180度で計算してみました。ご覧のとおり、ミラーではなく反転しています。そして、白い点が回転すると逆回転します。もう一方は大丈夫です。
これは、何か他のものにリンクされたものの角度の再計算です。pid が親になり、id が現在になります。pin.ang は、オブジェクトが別のオブジェクトにリンクされるときにコピーされる角度オフセットであるため、回転しても位置が保持されます。
if(object[id].mirror)
object[id].angle = 180 - (object[id].pin.ang + object[pid].angle);
else
object[id].angle = object[id].pin.ang + object[pid].angle;
そして、これが特定の回転部分です。OpenGL。offx/y は、ビームがそこに出ようとしているように、中心から外れたものを回転させるためのもので、他のすべてを正しくレンダリングします。
glTranslatef(list[index[i]].x, list[index[i]].y, 0);
glRotatef(list[index[i]].angle, 0.0, 0.0, 1.0);
glTranslatef(list[index[i]].offx, -list[index[i]].offy, 0);
回転速度 (次の例のように、現在の角度に再描画ごとに追加される整数。時計回りに回転する場合は正 )
したがって、180 度ではないことは間違いありません。ミラーリングは、テクスチャ座標を逆にするだけで行われるため、角度には影響しません。GL ローテーションの癖かもしれません。