Careless oversight
私は不注意なバグで2日間苦しみました。恐らく、あなたは私の不注意な問題を笑いとばすでしょう。もしくは、それは私とあなたにとって、良い教訓になるかもしれません。

私はある法線ベクトルから、別の法線ベクトルへの回転を計算する数学関数を開発しました。 これにより、オブジェクトは指定されたポイントに向かって向きを変えることができます。猛獣がプレイヤーをロック・オンして、彼を攻撃するようなことに、この一般的な関数は役に立ちます。 この私の作業において、私はこれら2つの法線ベクトル間の角度を必要としない新しい方法を試しました。この方法では、クォータニオンはアークコサイン等なしで内積と外積のみによって計算されます。 この方法は有名ですが、それは実装は初めてでした。

実装が終わり、私と仕事仲間は改造されたメソッド'Look At'に満足していました。 しかし、しばらくして、私たちは、このメソッドで回転されたオブジェクトが目標ポイントに背中を向けていることに気付きました。 別のプログラマーは前方方向を示す基本的なベクトルを逆にしました。 彼は、この最初の問題を解決して、諸点を調整しました。 私は、彼の修正をしらずに、すぐに別の問題に遭遇しました。私が'前進'をオブジェクトに与えたとき、オブジェクトは後退を始めたのでした。

私たちは、ミーティングを持って、このバグの原因が異なる座標系の混在だと推測しました。私たちは右手座標系を使用していました。ですから、私たちは左手座標系の計算コードを含むバギーなコードを見つけさえすればよかったのです。しかし、私たちはバグポイントを得ることができませんでした。

翌日、デザイナーは、アプリケーションのメッシュ・データ・エクウポータのオプション項目が切り替わっていたことに気づきました。エクスポータは左手座標系のデータとして、メッシュ・データを変換していたのでした。私たちはデータが私たちのテストに正しいかどうかを検証していませんでした。私が、私たちが完全に理解していなかった異質のコードを書いたので、私たちは、原因がプログラミングバグであると思いこんでいたのでした。。。
|