- LinAl::Vector<double, 4> columns[4];
- columns[0] = LinAl::Vector<double, 4>(right_dir, 0.0f);
- columns[1] = LinAl::Vector<double, 4>(cross(right_dir, look_dir), 0.0f);
- columns[2] = LinAl::Vector<double, 4>(-look_dir, 0.0f);
- columns[3] = LinAl::Vector<double, 4>(position, 1.0f);
- object_matrix = Matrix::from_columns(columns);
- view_matrix = invert(object_matrix);
+ Vector4 columns[4];
+ columns[0] = compose(right_dir, 0.0f);
+ columns[1] = compose(cross(right_dir, look_dir), 0.0f);
+ columns[2] = compose(-look_dir, 0.0f);
+ columns[3] = compose(position, 1.0f);
+ matrix = Matrix::from_columns(columns);
+ view_matrix = invert(matrix);
+}
+
+
+Camera::Loader::Loader(Camera &c):
+ DataFile::ObjectLoader<Camera>(c)
+{
+ add("aspect_ratio", &Loader::aspect_ratio);
+ add("depth_clip", &Loader::depth_clip);
+ add("field_of_view", &Loader::field_of_view);
+ add("look_at", &Loader::look_at);
+ add("look_direction", &Loader::look_direction);
+ add("orthographic", &Loader::orthographic);
+ add("position", &Loader::position);
+ add("up_direction", &Loader::up_direction);
+}
+
+void Camera::Loader::aspect_ratio(float a)
+{
+ obj.set_aspect_ratio(a);
+}
+
+void Camera::Loader::depth_clip(float n, float f)
+{
+ obj.set_depth_clip(n, f);
+}
+
+void Camera::Loader::field_of_view(float a)
+{
+ obj.set_field_of_view(Geometry::Angle<float>::from_degrees(a));
+}
+
+void Camera::Loader::look_at(float x, float y, float z)
+{
+ obj.look_at(Vector3(x, y, z));
+}
+
+void Camera::Loader::look_direction(float x, float y, float z)
+{
+ obj.set_look_direction(Vector3(x, y, z));
+}
+
+void Camera::Loader::orthographic(float w, float h)
+{
+ obj.set_orthographic(w, h);
+}
+
+void Camera::Loader::position(float x, float y, float z)
+{
+ obj.set_position(Vector3(x, y, z));
+}
+
+void Camera::Loader::up_direction(float x, float y, float z)
+{
+ obj.set_up_direction(Vector3(x, y, z));