点を描くところから始めるRust製ソフトウェアラスタライザ
執筆中
環境
Apple M2 Pro
Result draw_pixel(pixel p)
必要となる知識
つまり、理論はなんか知ってるけど実際ラスタライザってどう作るん?という状況appbird.icon Rustでもやってみようじゃないかということでやってみるappbird.icon 到達点
最適は目指さず、必要があれば愚直な手段を取る
Rustの学習ついでにやっていることなので、書かれているコードはアルゴリズム的にもRustの作法的にも最適でない
三角形ポリゴンで構成されたオブジェクト(モデル)を三次元空間上に配置し、特定の位置から表示できるようにする やらないこと
コードは綺麗に書かない(人に教えることを目的として記事を書かない)
(---> 時間がかかりすぎる、やるなら後で)
方針
結果の可否はエラーではなくResult型で表す
先行事例
参考資料
クレート
記法
はじめに
AC.icon プロジェクトのセットアップ
AC.icon GitHubにリポジトリを上げる
平面
空間とポリゴン
オブジェクト
WJ.icon 一個のモデルを放物線状に落下させる。
WJ.icon 複数個のモデルを生成しては放物線状に落下させる。
シェーダー
VertexShader基底クラスを作る。
何が必要?
Vec4World ---> Vec4Screen
それの一実装として現行のパイプラインを組み込んでおく。
FlagmentShader基底クラスを作る。
(Point2, double uni, double vari) ---> Vec4(Color)
それの一実装として現行のパイプラインを組み込んでおく。
発展
WJ.icon 頂点のデータ整理
さらに発展的な目標
WJ.icon スケルタルアニメーション
WJ.icon テクスチャとマテリアル
例えばプラチナちゃんを読み込むことを課題にしてはどうかappbird.icon
様々な用途に利用できる3Dデータです。素体、表情アニメーション、改変用ファイルなどが付属。
VRChat以外の用途では許可されている