Chapter 4: Adding a sphere

This is the modified version of main.cpp

You should first include iostream and fstream on top of this code.

This code outputs following image:
chap4


#include "ray.h"

bool hit_sphere(const vec3& center, float radius, const ray&r) {

vec3 oc = r.origin() - center;
float a = dot(r.direction(), r.direction());
float b = 2.0*dot(oc, r.direction());
float c = dot(oc, oc) - radius*radius;
float discriminant = b*b - 4 * a*c;
return (discriminant > 0);

}

vec3 color(const ray& r) {

if (hit_sphere(vec3(0, 0, -1), 0.5, r))
{
return vec3(1, 0, 0);
}

vec3 unit_direction = unit_vector(r.direction());
float t = 0.5*(unit_direction.y() + 1.0);
return (1.0 - t)*vec3(1.0, 1.0, 1.0) + t*vec3(0.5, 0.7, 1.0);

}

int main() {

std::ofstream fout;
fout.open("D:\\RayTracer\\code0\\img\\Chap4.ppm");

int nx = 200;
int ny = 100;

fout << "P3\n" << nx << " " << ny <= 0; j--) {
for (int i = 0; i < nx; i++) {

float u = float(i) / float(nx);
float v = float(j) / float(ny);

ray r(origin, lower_left_corner + u*horizontal + v*vertical);

vec3 col = color(r);

int ir = int(255.99*col[0]);
int ig = int(255.99*col[1]);
int ib = int(255.99*col[2]);

fout << ir << " " << ig << " " << ib << "\n";
}
}

fout.close();

return 0;
}

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중