我目前正在尝试学习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;
}
}
(请注意,我没有测试过上述内容 - 最好将其视为伪代码...