Ejemplo n.º 1
0
vec3 traceray(const vec3 &origin, const vec3 &dir, int depth)
{
	if (depth == 0)
		return vec3();

	vec3 fcolor = bgcolor;
	int obj;
	float t;

	if ((obj = intersect(origin, dir, t)) != -1) {
		fcolor = ambient.mult(myobj_mat[obj].color);
		int light_size = sizeof(light_pos) / sizeof(vec3);
		int obj_size = sizeof(mysph_pos) / sizeof(vec3);
		vec3 pos = origin + (dir * t);

		for (int i = 0; i < light_size; i++) {
			vec3 lightray = normalize(light_pos[i] - pos);
			float temp;

			if (intersect(pos, lightray, temp) == -1) {
				if (myobj_mat[obj].kd > 0) {
					vec3 nor = normalize(pos - mysph_pos[obj]);
					fcolor = fcolor + ((light_color[i] * (nor.dot(lightray)) * myobj_mat[obj].kd).mult(myobj_mat[obj].color));
				}

				if (myobj_mat[obj].ks > 0) {
					vec3 refDir = mirrorDir(pos, lightray, obj) * (-1);
					fcolor = fcolor + ((light_color[i] * (dir.dot(refDir)) * myobj_mat[obj].ks).mult(myobj_mat[obj].color));
				}
			}

			if(myobj_mat[obj].kr > 0)
				fcolor = fcolor + ((traceray(pos, mirrorDir(pos, dir, obj), depth - 1) * myobj_mat[obj].kr).mult(myobj_mat[obj].color));
		}
	}

	// note that, before returning the color, the computed color may be rounded to [0.0, 1.0].
	fcolor = clamp(fcolor);
	return fcolor;
}
Ejemplo n.º 2
0
}
vec3 dappy::math::operator*(vec3 ref, const vec3 & def)
{
	return ref.mult(def);