git clone https://github.com/ssloy/tinyrenderer.git &&
cd tinyrenderer &&
mkdir build &&
cd build &&
cmake .. &&
cmake --build . -j &&
./tinyrenderer ../obj/diablo3_pose/diablo3_pose.obj ../obj/floor.obj
レンダリングされたイメージは、 framebuffer.tga
に保存されます。
GitHub の無料のオンライン開発環境である Gitpod でプロジェクトを開くことができます。
開くと、エディターはプログラムをコンパイルして実行し、結果のイメージをエディターのプレビューで開きます。エディターでコードを変更し、スクリプトを再実行するだけで (ターミナルの履歴を使用)、更新されたイメージを確認できます。
私のソースコードは無関係です。 Wiki を読んで独自のレンダラーを実装してください。すべての小さな細部に苦しんだときにのみ、何が起こっているのかがわかります。
この一連の記事では、OpenGL のクローン (非常に単純化されたもの) を作成することで、OpenGL がどのように動作するかを示したいと思います。驚くべきことに、OpenGL / DirectX を学ぶという最初のハードルを乗り越えられない人によく出会います。したがって、私は短い一連の講義を準備し、その後、生徒たちが非常に優れたレンダリングを披露しました。
したがって、タスクは次のように定式化されます。サードパーティのライブラリ (特にグラフィックライブラリ) を使用せずに、次の図のようなものを取得します。
警告: これは、OpenGL ライブラリの構造を大まかに繰り返すトレーニング資料です。ソフトウェアレンダラーになります。 OpenGL 用のアプリケーションの作成方法を示したいわけではありません。 OpenGL がどのように動作するかを示したいと思います。これを理解せずに 3D ライブラリを使用して効率的なアプリケーションを作成することは不可能であると深く確信しています。
最終的なコードは500行程度になるようにしてみます。私の生徒たちがこのようなレンダラーの作成を始めるには、10 ~ 20 時間のプログラミング時間が必要です。入力では、ポリゴン ワイヤーとテクスチャ付きの画像を含むテスト ファイルを取得します。出力では、レンダリングされたモデルが得られますが、グラフィカル インターフェイスはなく、プログラムは単に画像を生成します。
目標は外部依存性を最小限に抑えることなので、TGA ファイルの操作を許可するクラスを 1 つだけ生徒に与えます。これは、RGB/RGBA/白黒形式の画像をサポートする最も単純な形式の 1 つです。したがって、開始点として、画像を操作する簡単な方法を取得します。 (画像のロードと保存に加えて) 最初に使用できる唯一の機能は、1 つのピクセルの色を設定する機能であることに注意してください。
線分や三角形を描く機能はありません。これらすべてを手作業で行う必要があります。私は学生と並行して作成したソースコードを提供します。しかし、これでは意味がありませんので、使用はお勧めしません。コード全体は GitHub で入手できます。ここには私が生徒に提供するソース コードがあります。
# include " tgaimage.h "
const TGAColor white = TGAColor( 255 , 255 , 255 , 255 );
const TGAColor red = TGAColor( 255 , 0 , 0 , 255 );
int main ( int argc, char ** argv) {
TGAImage image ( 100 , 100 , TGAImage::RGB);
image. set ( 52 , 41 , red);
image. write_tga_file ( " output.tga " );`
return 0 ;
}
Output.tga は次のようになります。