RaytracerEngine/camera.cs

76 lines
2.3 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RaytracerEngine
{
class camera
{
vec3 origin;
vec3 lower_left_corner;
vec3 horizontal;
vec3 vertical;
private const float scale = 0.1f;
public camera()
{
origin = new vec3(0, 0, 0);
lower_left_corner = new vec3(-2.0f, -1.0f, -1.0f);
horizontal = new vec3(4.0f, 0.0f, 0.0f);
vertical = new vec3(0.0f, 2.0f, 0.0f);
}
public ray get_ray(float u, float v) { return new ray(origin, lower_left_corner + u*horizontal + v*vertical - origin); }
public void turn_left()
{
//rotational matrix on camera left 25*
lower_left_corner = vec3.turn_y(lower_left_corner, 25);
horizontal = vec3.turn_y(horizontal, 25);
vertical = vec3.turn_y(vertical, 25);
}
public void turn_right()
{
//rotational matrix on camera right 25*
lower_left_corner = vec3.turn_y(lower_left_corner, -25);
horizontal = vec3.turn_y(horizontal, -25);
vertical = vec3.turn_y(vertical, -25);
}
public void strafe_left()
{
vec3 forwards_back = vec3.cross(horizontal, vertical);
forwards_back.normalize();
vec3 left_right = vec3.cross(vertical, forwards_back);
left_right.normalize();
origin = origin - left_right * scale;
}
public void strafe_right()
{
vec3 forwards_back = vec3.cross(horizontal, vertical);
forwards_back.normalize();
vec3 left_right = vec3.cross(vertical, forwards_back);
left_right.normalize();
origin = origin + left_right * scale;
}
public void fore()
{
vec3 forwards_back = vec3.cross(horizontal, vertical);
forwards_back.normalize();
origin = origin - forwards_back * scale;
}
public void back()
{
vec3 forwards_back = vec3.cross(horizontal, vertical);
forwards_back.normalize();
origin = origin + forwards_back * scale;
}
}
}