如何在C++中绘制用于光线追踪的像素



我目前正在尝试学习C++光线追踪。我从两本书中得到了帮助:一本是Kevin Suffern的《从头开始的光线追踪》,另一本是Matt Pharr的《基于物理的渲染》。这两本书非常适合学习基础知识,以及以后的高级内容。

我可以使用萨芬书的用户界面创建一些基本形状。然而,当我尝试自己编写所有代码时,事情变得疯狂了。我意识到我什至不知道如何打开窗口并在其上填充像素。你有什么好的资源可以推荐,可以教我C++画的基础知识。

您可以生成图像文件,而不是绘制到窗口。PPM 格式是生成最简单的格式。浏览器通常可以显示 PPM。Safari确实如此。

如果要生成PNG文件,请使用libpng。

SDL 可能适合您:http://www.libsdl.org/

您可以分配自己的图像缓冲区,将像素写入其中,然后根据需要保存到文件/绘制到窗口。 我希望法尔的书有自己的版本,藏在某个地方,由Literate Programming提供。

更具体地说: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;
  }
}

(请注意,我没有测试过上述内容 - 最好将其视为伪代码...

最新更新