wasd ←↑→↓ qe space パラメーター調整 https://turbowarp.org/1002523637
お互いに接触していない静的な直方体なら正しく描画できます。 Static rectangular parallelepipeds that do not touch each other can be drawn correctly. //仕組み↓ まず、ワールド座標とビュー座標を定義し、回転行列を用いてビュー座標変換を行い、その座標を三次元座標から二次元座標に変換しするため、深度が深いほど座標を中心に縮小します。 次に点描画の場合、深度座標が1以下の場合は削除することで解決しますが、辺や面の場合、深度が1未満の部分をクリッピングをします。TriFillerを使用し、出力した座標に三角形を張り付けます。 これにより簡易的な3Dグラフィックを作成することができます。また、この作品では処理の軽量化のため回転行列をかける計算は三角関数などを最初に計算してから使っています。 ここから、描画順序を計算する必要があります。 このプログラムではバイナリ空間分割(BSP)の特殊形のk-d木を用いた描画順序計算で、BSPよりも簡単で高速に空間分割することができます。具体的な処理方法はまず、オブジェクトの一つの平面で空間を分割し、その際に起こる他オブジェクトの分割のコストがもっとも低い平面を探索し、その中から平面で分割された二つの空間のオブジェクト数の差の絶対値が最も低い平面を取得し、その平面で空間分割します。分割後は二分木の木構造でデータを表し、再帰的に処理をし、全ての空間においてオブジェクトが一つになるまで行います。 これで初期処理は終了です。再描画処理ではカメラ座標から二分木のどちらの枝の空間を先に描画をするかを判定し、再帰的に描画していきます。この時、描画範囲外の描画平面で空間分割をしている時はカメラ側の空間のみを描画するように処理します。 これにより、静的な直方体オブジェクトを高速に描画することが可能になります。