HSP3で3Dゲーム作る(その2)
明日から会社だよぉ。早くも頓挫かなぁ。
■前回から3Dゲームを作り始めるにあたって、自分向けのTips | |
![]() |
対象が3次元なので(X,Y,Z)の座標軸があり、扱う絶対座標は左図の関係であった。 Y軸が高さ方向になっているのはしっくりこないなぁ。 (んだから雲の上から下を見ると、[x-z]平面となる) しかも±逆のような気もするが、こうなんだからそれに合わすしかないねぇ 最初の段階での表示されている画面は、カメラが(0,0,0)の位置にあるものとなっている。 ちょうど水面から目玉半分まで顔を出して見た感じ。 なので、実際には水面下の映像も見えていることになる。 |
![]() |
だいたいプラスとかマイナスとかあると、バグの元にもなるので目線を水面から上げて水面上に立ったように考えた。(空中にカメラが浮いている感じ) 「Yの座標が0ならそれは地面」とした。 これでゲーム上、Yがプラスの値(地面にめり込む)ことは考えない。 また、ジャンプしないので、Y軸の移動も考えない。 (地上の動きは「X軸とZ軸の移動のみ」。) |
![]() |
また空間的にはX,Y,Z軸それぞれに回転が可能なのであるが、人の動きを考えると「Y軸のみの回転」でいいことになる。 |
![]() |
「前に進むということは、Z軸のマイナス方向に動いている」と最初はプログラムを作っていたら、人間が「Y軸を90度回転して前に進もうとすると、X軸のプラスの方向に移動をする」ことになることに気づいた。(汗)なんつーバカものなんでしょう。 これには参った。ましてや、90度必ず回るわけではないじゃん。 斜めに動くことも考えると頭が痛くなった。 「移動はベクトルを考慮しないといけない」わけね。あーめんどちい。 ゲーム参考書を見て、その計算のやり方を理解した。 ベクトルを扱うので、実数による計算があるから整数と組み合わせるときに値が丸め込まれて誤差が出てしまいうまく動かなかった。(直に実数値を入れるとうまく動いたのは確認。) なので、必ず整数にも"double(int n)"で実数化させた。 この辺はいつも整数しか相手にしていないので、実際にプログラムを組まないと体感できんかったとです。 |
![]() |
地面([x-z]平面)を餅を焼く金網に見立て、その1マスにブロックを置くようにした。 実際のプログラムでは縦横32ブロックの計1024マスの空間としてみた。(あんまり広いと自分がどこにいるかわからなくなるんで適当な値。) で、1つのブロックが'3'の幅を持つ正四面体(要はサイコロ)としたので、動ける空間の広さ(範囲)は縦横共に32x3=96の値で考える。 でも絶対座標を考えると、座標(0,0)が平面の中心になっているので、オフセットした値を考慮してプログラムを組まないとバグること請け合いだわこりゃ。 |
| 固定リンク
コメント