1. 程式人生 > >Ray tracing in a weekend(一)

Ray tracing in a weekend(一)

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int nx = 200;//200列
	int ny = 100;//100行
	ofstream out("d:\\theFirstPpm.txt");
	out << "P3\n" << nx << " " << ny << "\n255" << endl;
	for (int j = ny - 1;j >= 0;j--)//行從上到下
	{
		for (int i = 0;i < nx;i++)//列從左到右
		{
			//此時i、j、nx、ny在參與除法運算時一定要強制轉換為float型別,因為整型除法所得結果依然是整型,直接掐去小數部分,造成數值上的偏差
			float r = float(i) / float(nx);//從左到右,黑變紅
			float g = float(j) / float(ny);//從上到下,綠變黑
			float b = 0.2;//藍色分量固定
			//右上角為黃色,且i、g、b均為0-1之間的分數
			//最後用於輸出ppm影象的實際是介於0和255的int值
			int ir = int(255.99*r);
			int ig = int(255.99*g);
			int ib = int(255.99*b);
			out << ir << " " << ig << " " << ib << endl;
		}
	}
    return 0;
}

執行後會在theFirstPpm.txt中寫入ppm影象的資訊,再用Xnview軟體開啟將其開啟即可看到渲染出的影象。