3D表示の解説実験のためのメモ書き

プログラミングで2D表示ができるようになったばかりの頃に疑問だった「3Dの表示ってどうやるの?」というやつの解説の練習。下地の作成。

おおまかな流れ

ピクセルとはなんぞや」あたりまで戻るべきか、とか思うが、まぁとりあえず、やりたいようにまずは。

  • ベースの表示
    • モデルは「点」の集合である
    • 「点」をつなげてできる面をそれぞれ求める
    • それぞれの面を、モデルの向きやカメラの位置を考慮して移動させて、最終的な位置を画面に表示する
  • テクスチャの表示
    • モデルは「"点"と"テクスチャ座標"の組」の集合である
    • 「テクスチャ座標」とは「この"点"は、テクスチャのこの位置の画像を取ってくる」という位置のこと
    • 面を求める時に、その「テクスチャ座標」をもとにテクスチャを切り抜いたり変形したりして絵を求める
    • あとは同じように位置を求めて画面に表示

気になるのは、「いきなり"モデル"と呼んで通じるか」「"点"と呼ぶべきか、最初から"頂点"と呼ぶべきか」「テクスチャの説明はすべきか」「テクスチャと対応するのはわかったけど、実際にはどういうモデルにどういうテクスチャが対応するのか(画像の必要性)」あたり。カメラ位置からの計算とかは、内容を省いても、なんとかなるかなという気はする。
やっぱり、画像があった方がこの手のはわかりやすい。
「頂点」は、「点の位置」「テクスチャ座標」「法線」「頂点カラー」...が1セットになっていることも、何らかの形で組み込みたいが。


モーションの方の説明。たぶん、基本表示の説明とは分離すべき。

  • モーション計算のベースの考え方
    • 「気を付け」から「前に倣え」をするモーションを考える
    • 両方の状態の「点」の位置を全部覚えておくのはデータが大きくなりすぎる
    • 「気を付け」+「右腕が90度回転」+「左腕が90度回転」=「前に倣え」という風に表現したい
    • 「点」だけでなく「関節」も考えることにする
  • モーションの計算
    • 前述のモーションでの指先の位置の計算を考える
    • 計算は、「"気を付け"の時の指先の位置」×「肩の関節を中心に90度回転」
    • 基本的に、「回転」は原点中心なので、「肩の関節→原点」+「回転」+「原点→肩の関節」とする必要がある
    • なので、詳細な流れは以下の通り
      • 「気を付け」の時の指先の位置を求める
      • 「肩の関節→原点」と同じ移動を行う
      • 90度回転させる
      • 「原点→肩の関節」と同じ移動を行う

軸のことは考えずに、「90度回転」を使用。データが大きくなりすぎることは、なんか示して比較した方が良いか。「関節」の説明が足りてない気がする。「ボーン」と最初から呼ぶべきか。モーションの計算は図があった方が良い気がするが、アレルギーを誘発しそうな気もする。説明を「位置×回転」と「原点への移動、復帰」の2段階に分けてるのは良い気がする。ただ、「回転は原点中心」とかのベースが共有できるレベルじゃないと(この説明を使うのは)難しい。
「重み」の計算は、ひとまず01で、どのボーンに対応しているかを示すレベルで提示したい。例えば、上の例では「右腕の指先」は「右腕のボーン」に、「左腕の指先」は「左腕のボーン」に対応している。だから、「右腕の指先」の計算では「右腕のボーン」のみを考慮して、他の「左腕のボーン」などは考慮しないで計算する。


誰に対して説明すべきだろう。なんとなくは「高校生あたりの自分」にしたいが、実用的な問題で言えば「企画の人」あたりが妥当。プログラマじゃないので、数学の理解度があまり期待できない。ただ、どちらにしろ、ピクセルとかテクスチャの説明は省けるか。語彙として持ってなくても、「ピクセル=画面の1ドット」「テクスチャ=画像」「モデル=物体」とかしておけば、だいたい大丈夫だろう。「モデルは点から成る」というのは説明が必要?昔のゲームならカクカクしてたから想像しやすかったけど、イマドキのゲームだと想像しにくいかもしれない。
あと、やっぱり実際にモデリングしてから書きたい。