Chapter 5. Surface normals and multiple objects.

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


#include "ray.h"

float 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;

if (discriminant 0) {
vec3 N = unit_vector(r.point_at_parameter(t) - vec3(0, 0, -1));
return 0.5*vec3(N.x() + 1, N.y() + 1, N.z() + 1);
}

vec3 unit_direction = unit_vector(r.direction());
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\\Chap5_1.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;
}

This code outputs the following image.

chap5_1

답글 남기기

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

WordPress.com 로고

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

Google photo

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중