2

私は現在、C++でレイトレーシングを学ぼうとしています。私は2冊の本から助けを得ています。1冊はKevinSuffernによるRayTracingfrom the Ground Upで、もう1冊はMattPharrによるPhysicalBasedRenderingです。これらの2冊の本は、基本を学び、後で高度なものを学ぶのに最適です。

Suffernの本のユーザーインターフェイスを使用して、いくつかの基本的な形状を作成できました。しかし、私がすべてのコードを自分で書き込もうとしたとき、物事は荒れ狂っていました。ウィンドウを開いてそのピクセルを塗りつぶす方法すら知らないことに気づきました。C++での描画の基本を教えてくれる推奨リソースはありますか。

4

3 に答える 3

3

Windowsに描画する代わりに、画像ファイルを生成できます。PPM形式は、生成するのが最も簡単な形式です。ブラウザは通常、PPMを表示できます。Safariはそうです。

PNGファイルを生成する場合は、libpngを使用します。

于 2012-07-02T10:24:40.480 に答える
1

SDLが機能する可能性があります:http ://www.libsdl.org/

于 2012-07-02T10:34:26.453 に答える
0

独自の画像バッファを割り当て、それにピクセルを書き込んでから、必要に応じてファイルに保存/ウィンドウに描画することができます。ファーの本には、文芸的プログラミングのおかげで、これの独自のバージョンがどこかに隠れていると思います。

より具体的には、GUI APIと画像ファイル形式ライブラリは通常、行優先の配列順に格納された単純な画像バッファデータを読み取ることができます。次のようなRGBAピクセル形式をお勧めします。

template<class T> class image_rgba {
  unsigned m_rows, m_cols;
  T *m_data;

public:
  image_rgba(unsigned rows, unsigned columns)
    : m_rows(rows)
    , m_cols(columns)
    , m_data(new T[rows*columns*4])
  {}
  ~image_rgba()  { delete[] m_data; }

  typedef T pixel[4];
  pixel index_pixel_ref(unsigned row, unsigned col)  {
    assert(row<m_rows && col<m_cols);
    return m_data + (m_cols*row+col)*4;
  }
}

(私は上記をテストしていないことに注意してください-それを擬似コードとして扱うのが最善です...)

于 2012-07-02T17:23:14.933 に答える