Skip to content

Latest commit

 

History

History
52 lines (42 loc) · 1.97 KB

File metadata and controls

52 lines (42 loc) · 1.97 KB

NativeMeshEngine

NativeMeshEngineは、ワールド描画で使用するメッシュエンジンのためのクラスである。 これは次のようなデータを保有する

ChunkPos{ pub x:i32, pub z:i32 } BlockPos{ pub x:i32, pub y:i32, pub z:i32, } Color{ r:u8, g:u8, b:u8, a:u8 }

BlockColor{ pub pos:BlockPos, pub color:Color, }

Colorは、#aarrggbbのintに変換を行えるcriticalかつno_heap_accessな関数を保有すること。強制変換で問題ない。 また、2つの色を混合したりなどのメソッドも必要に応じて作ること。

  • 現在の中心チャンクをChunkPosで
  • 現在の最低の高さをi32で
  • 現在のワールドの高さをi32で
  • 色(Color)の配列を一次元で大量に。

NativeMeshEngineは

  • チャンク座標をアップデートする関数(x,z)
  • 座標と高さを初期化する関数(x_chunk,height,z_chunk)
  • 範囲を更新する関数(チャンク数) // 例えば3x3にするなら3
  • 色を設定する関数(x,y,z,color)すべてi32
  • 線のメッシュを作成する関数(開始座標、終了座標、色)の配列
  • 面のメッシュを作成する関数(pos0,pos1,pos2,pos3,色)の配列

まず、範囲を初期化する関数で、高さと範囲分のColorの配列を一気に取得します。 色を設定する際は、現在のチャンク座標を駆使して、VecDequeと同じ原理を使用して代入を行いましょう。 移動したタイミングで、VecDequeのようなメソッドを利用して、中心となる部分を移動して、 範囲外に入った箇所を無色で初期化しましょう。 こうすれば、メモリ空間をフル活用して、データを処理できます。

線について、ブロックが隣り合って、線が重なる場合は、線を結合し、それぞれのブロックに設定された色の平均値を出力してください。接続できる線はすべて接続してください。

面についても同様にお願いします。