ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

C++ ミサイルの回転プログラム

2015/07/12
(この記事の文字数: 163)

以前作ったミサイルの軌跡を描画するC++プログラムで、ミサイル部分をつけました。とりあえずダミーの三角錐を描画したものです。

ミサイルの前のフレームの座標と今のフレームの座標の方向に向かせるようにしただけです。Maya でいうエイムコンストレイン的なやつです。

ある対象の方向を向かせるための回転行列を取得する関数を載せておきます。


void LookAt(
    float *o_matrix4x4,
    float eye_x, float eye_y, float eye_z,
    float target_x, float target_y, float target_z,
    float up_x, float up_y, float up_z)
{
    target_x = eye_x - target_x;
    target_y = eye_y - target_y;
    target_z = eye_z - target_z;
    float length = sqrtf(target_x * target_x + target_y * target_y + target_z * target_z);
    o_matrix4x4[2] = target_x / length;
    o_matrix4x4[6] = target_y / length;
    o_matrix4x4[10] = target_z / length;

    target_x = up_y * o_matrix4x4[10] - up_z * o_matrix4x4[6];
    target_y = up_z * o_matrix4x4[2] - up_x * o_matrix4x4[10];
    target_z = up_x * o_matrix4x4[6] - up_y * o_matrix4x4[2];
    length = sqrtf(target_x * target_x + target_y * target_y + target_z * target_z);
    o_matrix4x4[0] = target_x / length;
    o_matrix4x4[4] = target_y / length;
    o_matrix4x4[8] = target_z / length;

    o_matrix4x4[1] = o_matrix4x4[6] * o_matrix4x4[8] - o_matrix4x4[10] * o_matrix4x4[4];
    o_matrix4x4[5] = o_matrix4x4[10] * o_matrix4x4[0] - o_matrix4x4[2] * o_matrix4x4[8];
    o_matrix4x4[9] = o_matrix4x4[2] * o_matrix4x4[4] - o_matrix4x4[6] * o_matrix4x4[0];

    o_matrix4x4[12] = -(eye_x * o_matrix4x4[0] + eye_y * o_matrix4x4[4] + eye_z * o_matrix4x4[8]);
    o_matrix4x4[13] = -(eye_x * o_matrix4x4[1] + eye_y * o_matrix4x4[5] + eye_z * o_matrix4x4[9]);
    o_matrix4x4[14] = -(eye_x * o_matrix4x4[2] + eye_y * o_matrix4x4[6] + eye_z * o_matrix4x4[10]);

    o_matrix4x4[3] = o_matrix4x4[7] = o_matrix4x4[11] = 0.0f;
    o_matrix4x4[15] = 1.0f;
}

  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

<<「ソフトウェア開発」の次の記事
「ソフトウェア開発」の前の記事 >>

コメント(0 件)



コンテンツロード: 0.0082 sec
Copyright(C)2006-2024 puarts All Rights Reserved