.doc/ext/rays/matrix.cpp in rays-0.1.48 vs .doc/ext/rays/matrix.cpp in rays-0.1.49
- old
+ new
@@ -66,10 +66,18 @@
return self;
}
static
+VALUE transpose(VALUE self)
+{
+ CHECK;
+ THIS->transpose();
+ return self;
+}
+
+static
VALUE translate(VALUE self)
{
CHECK;
check_arg_count(__FILE__, __LINE__, "Matrix#translate", argc, 1, 2, 3);
@@ -106,14 +114,14 @@
static
VALUE to_a(VALUE self)
{
CHECK;
return array(
- THIS->x0, THIS->y0, THIS->z0, THIS->w0,
- THIS->x1, THIS->y1, THIS->z1, THIS->w1,
- THIS->x2, THIS->y2, THIS->z2, THIS->w2,
- THIS->x3, THIS->y3, THIS->z3, THIS->w3);
+ THIS->x0, THIS->x1, THIS->x2, THIS->x3,
+ THIS->y0, THIS->y1, THIS->y2, THIS->y3,
+ THIS->z0, THIS->z1, THIS->z2, THIS->z3,
+ THIS->w0, THIS->w1, THIS->w2, THIS->w3);
}
static
VALUE mult(VALUE self, VALUE val)
{
@@ -188,11 +196,56 @@
VALUE s_rotate(VALUE self)
{
return rotate(argc, argv, value(Rays::Matrix()));
}
+static
+VALUE s_ortho(VALUE self)
+{
+ check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 4, 6);
+ coord l = to<coord>(argv[0]);
+ coord r = to<coord>(argv[1]);
+ coord t = to<coord>(argv[2]);
+ coord b = to<coord>(argv[3]);
+ if (argc == 4)
+ return value(Rays::ortho(l, r, t, b));
+ else
+ return value(Rays::ortho(l, r, t, b, to<coord>(argv[4]), to<coord>(argv[5])));
+}
+
+static
+VALUE s_perspective(VALUE self, VALUE fov_y, VALUE aspect_ratio, VALUE near, VALUE far)
+{
+ return value(Rays::perspective(
+ to<float>(fov_y), to<float>(aspect_ratio), to<coord>(near), to<coord>(far)));
+}
+
+static
+VALUE s_look_at(VALUE self)
+{
+ check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 3, 6, 9);
+
+ if (argc == 3)
+ {
+ return value(Rays::look_at(
+ to<Rays::Point&>(argv[0]),
+ to<Rays::Point&>(argv[1]),
+ to<Rays::Point&>(argv[2])));
+ }
+ else
+ {
+ return value(Rays::look_at(
+ to<coord>(argv[0]), to<coord>(argv[1]), to<coord>(argv[2]),
+ to<coord>(argv[3]), to<coord>(argv[4]), to<coord>(argv[5]),
+ argc >= 7 ? to<coord>(argv[6]) : 0,
+ argc >= 8 ? to<coord>(argv[7]) : 1,
+ argc >= 9 ? to<coord>(argv[8]) : 0));
+ }
+}
+
+
static Class cMatrix;
void
Init_rays_matrix ()
{
@@ -201,22 +254,27 @@
cMatrix = rb_define_class_under(mRays, "Matrix", rb_cObject);
rb_define_alloc_func(cMatrix, alloc);
rb_define_private_method(cMatrix, "initialize", RUBY_METHOD_FUNC(initialize), -1);
rb_define_private_method(cMatrix, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
rb_define_method(cMatrix, "reset", RUBY_METHOD_FUNC(reset), -1);
- rb_define_method(cMatrix, "translate", RUBY_METHOD_FUNC(translate), -1);
- rb_define_method(cMatrix, "scale", RUBY_METHOD_FUNC(scale), -1);
- rb_define_method(cMatrix, "rotate", RUBY_METHOD_FUNC(rotate), -1);
+ cMatrix.define_method("transpose!", transpose);
+ cMatrix.define_method("translate!", translate);
+ cMatrix.define_method("scale!", scale);
+ cMatrix.define_method("rotate!", rotate);
rb_define_method(cMatrix, "to_a", RUBY_METHOD_FUNC(to_a), 0);
cMatrix.define_method("*", mult);
cMatrix.define_method("[]=", set_at);
cMatrix.define_method("[]", get_at);
cMatrix.define_method("<=>", compare);
rb_define_method(cMatrix, "inspect", RUBY_METHOD_FUNC(inspect), 0);
rb_define_singleton_method(cMatrix, "translate", RUBY_METHOD_FUNC(s_translate), -1);
rb_define_singleton_method(cMatrix, "scale", RUBY_METHOD_FUNC(s_scale), -1);
rb_define_singleton_method(cMatrix, "rotate", RUBY_METHOD_FUNC(s_rotate), -1);
+ rb_define_singleton_method(cMatrix, "ortho", RUBY_METHOD_FUNC(s_ortho), -1);
+ rb_define_singleton_method(cMatrix, "perspective", RUBY_METHOD_FUNC(s_perspective), 4);
+ rb_define_singleton_method(cMatrix, "look_at", RUBY_METHOD_FUNC(s_look_at), -1);
+
}
namespace Rucy
{