mini3d
3Dソフトウェアレンダリングチュートリアルには、パフォーマンスの最適化はありません。主に、固定パイプラインソフトウェアレンダラーの作成方法を人々に説明しています。メインコードはわずか700行ですが、スズメは小さく、すべての内臓があります。
【英語のreadme】
特性
- 単一ファイル:ソースコードには1つのmini3d.cのみがあり、単一のファイルがすべてを実装し、読みやすいです。
- 独立した編集:サードパーティライブラリの依存関係も、複雑なエンジニアリングディレクトリもありません。
- モデル標準:標準D3D座標モデル、左利きシステムとワールド /ビュー /投影3マトリックス
- トリミングの実装:単純なCVVトリッピング
- テクスチャサポート:1024 x 1024テクスチャの最大サポート
- 深度キャッシュ:深度キャッシュを使用して、前後に画像を決定します
- パースペクティブマップ:パースペクティブテクスチャマッピングとパースペクティブカラーフィリング
- エッジコンピューティング:正確なポリゴンエッジカバレッジ計算
- 実装が合理化されています:レンダリングエンジンには700列しかなく、モジュールは明確で、バックボーンが顕著です。
- 詳細なコメント:メインコードに関する詳細なコメント
編集
- MINGW:GCC -O3 MINI3D.C -O MINI3D.EXE -LGDI32
- MSVC:CL -O2 -Nologo Mini3d.c
- コンパイルされたバージョン:https://github.com/skywind3000/mini3d/releases
デモ
テクスチャフィル:render_state_texture
カラーフィリング:render_state_color
ワイヤーフレーム図面:render_state_wireframe
照明と二次線形補間を増やす(友人がMini3Dに追加した照明効果のスクリーンショット)
基本的な宿題
- 削除を追加します
- シンプルなライトを追加します
- より多くのレンダリングモードを提供します
- 二次線形差のテクスチャ読み取りを実装します
高度な宿題
- プログラムで使用されているすべての幾何学的知識を推測し、証明する
- 頂点コンピューティングのパフォーマンスを最適化します
- draw_scanlineのパフォーマンスを最適化します
- BMP/TGAファイルからテクスチャの読み込み
- BSPシナリオをロードし、ローミングを実装します
原則の説明
- Wei Yixiao:頂点のみがわかっている場合、OpenGLとDirectXはどのようにしてピクセルの場所を取得しますか?
- Wei Yixiao:コンピューターはどのようにグラフィックカードにアクセスしますか?
関連プロジェクト
- RenderHelp:プログラム可能なレンダリングパイプラインをサポートする別の合理化されたソフトレンダラー実装については、詳細については紹介を参照してください。
寄付は大歓迎です
あなたの寄付は、このチュートリアルの最大の肯定です。寄付は、チュートリアルのドキュメントと伝説を改善するために使用され、より興味深いチュートリアルを書くのに役立ちます。
フォローしてください
ブログ:https://skywind.me/blog
Zhihu:https://www.zhihu.com/people/skywind3000