rmath3d 1.1.0 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cb1e762ea46c80e060d6efdcaf6db861e6ad2ffc
4
- data.tar.gz: c4cbac65664fd3c54d08ca66dd9e207a9f3384b0
2
+ SHA256:
3
+ metadata.gz: 5dc23938dfb4e458f92a723ca9340b88c8cd9745b2b332c81abf8aef4981e46c
4
+ data.tar.gz: b23cdf387d8def83bd5310a6666ca83c57b898ee740dee861c804799935d1407
5
5
  SHA512:
6
- metadata.gz: bf14364015645a9631a9e57c6c54279a93090f2bb8ed7470bfd75795e04cfdb2ca519aceaaeaf9f10d19caf5909b1e7a71645cd4237bd563236dc788c93b8081
7
- data.tar.gz: 158e3a7d837715897afadf073c644aa10fa7dbd3b9fc735bdf6c1d5bbd029f6637fb82e0731d9806109bc9c7122f39d7ac8113fe84a01a681956e5854f52f8bd
6
+ metadata.gz: 78dbf7e6ac5f2b5be92247a2ac26100b47df994cd646f25c638e8fc7486f2dbc195a452b88cc28035cc611d87de4778f93ab64a9f94205ff2405005ada383168
7
+ data.tar.gz: 401b5ab4bb610ea41689276cc96d05bb0c1f4a5b90d579d51781fffb08bde75d8da7140b88a2b8bac8ea223ed64a3cef2f7e1a5d6c667761a096dd6552721eab
data/ChangeLog CHANGED
@@ -1,3 +1,29 @@
1
+ 2020-07-23 vaiorabbit <http://twitter.com/vaiorabbit>
2
+
3
+ * rmath3d.c, rmath3d_plain.rb (RMtx4): Added lookAtLH, perspectiveLH, etc.
4
+
5
+ 2020-06-21 vaiorabbit <http://twitter.com/vaiorabbit>
6
+
7
+ * rmath3d.c, rmath3d_plain.rb (RMtx4): Added argument 'ndc_homogeneous' for projection matrix APIs.
8
+ Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal)
9
+ https://www.slideshare.net/Mark_Kilgard/opengl-32-and-more/26-Direct3D_vs_OpenGL_Coordinate_System
10
+ https://metashapes.com/blog/opengl-metal-projection-matrix-problem/
11
+ * rmath3d_plain.rb: Removed Fixnum and Bignum symbols (deprecated and unified into Integer class since Ruby 2.4)
12
+
13
+ 2017-07-22 vaiorabbit <http://twitter.com/vaiorabbit>
14
+
15
+ * Added 'Integer' type for argument type branching (constant ::Fixnum is deprecated since ruby 2.4).
16
+
17
+ 2015-08-23 vaiorabbit <http://twitter.com/vaiorabbit>
18
+
19
+ * rmath3d.c (def ==): Removed control path returning Qnil.
20
+ * rmath3d_plain.rb (def ==): Removed control path returning Qnil.
21
+
22
+ 2015-05-02 vaiorabbit <http://twitter.com/vaiorabbit>
23
+
24
+ * Ruby 1.9.3 and prior versions are no longer supported. Ref.: https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/
25
+ * rmath3d.c: Data_Get_Struct -> TypedData_Get_Struct, etc.
26
+
1
27
  2015-04-12 vaiorabbit <http://twitter.com/vaiorabbit>
2
28
 
3
29
  * RVec2.c|h, RMtx2.c|h: Added.
@@ -1,5 +1,5 @@
1
1
  rmath3d : Ruby math module for 3D Applications
2
- Copyright (c) 2008-2015 vaiorabbit <http://twitter.com/vaiorabbit>
2
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
3
3
 
4
4
  This software is provided 'as-is', without any express or implied
5
5
  warranty. In no event will the authors be held liable for any damages
data/README.md CHANGED
@@ -4,9 +4,12 @@
4
4
 
5
5
  rmath3d is a math module for 3D game programming and computer graphics.
6
6
 
7
- * Last Update: Apr 12, 2015
7
+ * Last Update: Jul 23, 2020
8
8
  * Since: Jul 20, 2008
9
9
 
10
+ * rmath3d (C Extension Library Implementation) [![Gem Version](https://badge.fury.io/rb/rmath3d.svg)](https://badge.fury.io/rb/rmath3d) [![Gem](https://img.shields.io/gem/dt/rmath3d.svg)](https://rubygems.org/gems/rmath3d)
11
+ * rmath3d_plain (Pure Ruby Implementation) [![Gem Version](https://badge.fury.io/rb/rmath3d_plain.svg)](https://badge.fury.io/rb/rmath3d_plain) [![Gem](https://img.shields.io/gem/dt/rmath3d_plain.svg)](https://rubygems.org/gems/rmath3d_plain)
12
+
10
13
  ## Features ##
11
14
 
12
15
  ### Supports frequently-used vector and matrix classes ###
@@ -30,11 +33,8 @@ rmath3d is a math module for 3D game programming and computer graphics.
30
33
  Notice: This library provides native extension. You must setup develop environment (or DevKit) before installation.
31
34
 
32
35
  * Ruby
33
- * ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
34
- * ruby 2.0.0p247 (2013-06-27) [i386-mingw32] With Development Kit installed.
35
- * I used: DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
36
- * Unpack the archive -> "> ruby dk.rb init" -> edit config.yml (just add your ruby foldier) -> "> ruby dk.rb install"
37
- * Ref.: http://blog.mattwynne.net/2010/10/12/installing-ruby-gems-with-native-extensions-on-windows/
36
+ * ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x64-mingw32]
37
+ * Ruby 2.3 and prior versions are no longer supported.
38
38
 
39
39
  ## Building rmath3d.{so|bundle} ##
40
40
 
@@ -1,5 +1,5 @@
1
- #ifndef RMATH_H_INCLUDED
2
- #define RMATH_H_INCLUDED
1
+ #ifndef RMATH3D_H_INCLUDED
2
+ #define RMATH3D_H_INCLUDED
3
3
 
4
4
  #include "RType.h"
5
5
  #include "RVec2.h"
@@ -14,7 +14,7 @@
14
14
 
15
15
  /*
16
16
  RMath : Ruby math module for 3D Applications
17
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
17
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
18
18
 
19
19
  This software is provided 'as-is', without any express or implied
20
20
  warranty. In no event will the authors be held liable for any damages
@@ -232,7 +232,7 @@ RMtx2Scale( RMtx2* out, const RMtx2* m, rmReal f )
232
232
 
233
233
  /*
234
234
  RMath : Ruby math module for 3D Applications
235
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
235
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
236
236
 
237
237
  This software is provided 'as-is', without any express or implied
238
238
  warranty. In no event will the authors be held liable for any damages
@@ -65,7 +65,7 @@ void RMtx2Scale( RMtx2* out, const RMtx2* m, rmReal f );
65
65
 
66
66
  /*
67
67
  RMath : Ruby math module for 3D Applications
68
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
68
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
69
69
 
70
70
  This software is provided 'as-is', without any express or implied
71
71
  warranty. In no event will the authors be held liable for any damages
@@ -347,7 +347,7 @@ RMtx3Scale( RMtx3* out, const RMtx3* m, rmReal f )
347
347
 
348
348
  /*
349
349
  RMath : Ruby math module for 3D Applications
350
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
350
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
351
351
 
352
352
  This software is provided 'as-is', without any express or implied
353
353
  warranty. In no event will the authors be held liable for any damages
@@ -72,7 +72,7 @@ void RMtx3Scale( RMtx3* out, const RMtx3* m, rmReal f );
72
72
 
73
73
  /*
74
74
  RMath : Ruby math module for 3D Applications
75
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
75
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
76
76
 
77
77
  This software is provided 'as-is', without any express or implied
78
78
  warranty. In no event will the authors be held liable for any damages
@@ -436,6 +436,104 @@ RMtx4Scale( RMtx4* out, const RMtx4* m, rmReal f )
436
436
  GET_ELEMENT( m, row, col ) * f );
437
437
  }
438
438
 
439
+ /* http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/lookat.html
440
+ http://msdn.microsoft.com/en-us/library/bb205343.aspx
441
+ */
442
+ void
443
+ RMtx4LookAtLH( RMtx4* out, const RVec3* eye, const RVec3* at, const RVec3* up )
444
+ {
445
+ #define AX(i) RVec3GetElement( &axis_x, i )
446
+ #define AY(i) RVec3GetElement( &axis_y, i )
447
+ #define AZ(i) RVec3GetElement( &axis_z, i )
448
+
449
+ RVec3 axis_x, axis_y, axis_z;
450
+
451
+ RMtx4Identity( out );
452
+
453
+ RVec3Sub( &axis_z, at, eye );
454
+ RVec3Normalize( &axis_z, &axis_z );
455
+
456
+ RVec3Cross( &axis_x, up, &axis_z );
457
+ RVec3Normalize( &axis_x, &axis_x );
458
+
459
+ RVec3Cross( &axis_y, &axis_z, &axis_x );
460
+
461
+ SET_ELEMENT( out, 0, 0, AX(0) );
462
+ SET_ELEMENT( out, 0, 1, AX(1) );
463
+ SET_ELEMENT( out, 0, 2, AX(2) );
464
+ SET_ELEMENT( out, 0, 3, -RVec3Dot(&axis_x, eye) );
465
+
466
+ SET_ELEMENT( out, 1, 0, AY(0) );
467
+ SET_ELEMENT( out, 1, 1, AY(1) );
468
+ SET_ELEMENT( out, 1, 2, AY(2) );
469
+ SET_ELEMENT( out, 1, 3, -RVec3Dot(&axis_y, eye) );
470
+
471
+ SET_ELEMENT( out, 2, 0, AZ(0) );
472
+ SET_ELEMENT( out, 2, 1, AZ(1) );
473
+ SET_ELEMENT( out, 2, 2, AZ(2) );
474
+ SET_ELEMENT( out, 2, 3, -RVec3Dot(&axis_z, eye) );
475
+
476
+ #undef AX
477
+ #undef AY
478
+ #undef AZ
479
+ }
480
+
481
+ void
482
+ RMtx4PerspectiveLH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
483
+ {
484
+ RMtx4PerspectiveOffCenterLH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
485
+ }
486
+
487
+ void
488
+ RMtx4PerspectiveFovLH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous )
489
+ {
490
+ rmReal top = rmTan(fovy_radian / 2.0f) * znear;
491
+ rmReal bottom = -top;
492
+ rmReal right = top * aspect;
493
+ rmReal left = -right;
494
+ RMtx4PerspectiveOffCenterLH(out, left, right, bottom, top, znear, zfar, ndc_homogeneous);
495
+ }
496
+
497
+ void
498
+ RMtx4PerspectiveOffCenterLH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
499
+ {
500
+ rmReal A = (right+left) / (right-left);
501
+ rmReal B = (top+bottom) / (top-bottom);
502
+ rmReal C = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -zfar / (zfar-znear);
503
+ rmReal D = ndc_homogeneous ? -(2*znear*zfar) / (zfar-znear) : -(znear*zfar) / (zfar-znear);
504
+
505
+ RMtx4Zero( out );
506
+ SET_ELEMENT( out, 0, 0, 2*znear/(right-left) );
507
+ SET_ELEMENT( out, 0, 2, -A );
508
+ SET_ELEMENT( out, 1, 1, 2*znear/(top-bottom) );
509
+ SET_ELEMENT( out, 1, 2, -B );
510
+ SET_ELEMENT( out, 2, 2, -C );
511
+ SET_ELEMENT( out, 2, 3, D );
512
+ SET_ELEMENT( out, 3, 2, 1.0f );
513
+ }
514
+
515
+ void
516
+ RMtx4OrthoLH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
517
+ {
518
+ RMtx4OrthoOffCenterLH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
519
+ }
520
+
521
+ void
522
+ RMtx4OrthoOffCenterLH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
523
+ {
524
+ rmReal tx = -(right+left) / (right-left);
525
+ rmReal ty = -(top+bottom) / (top-bottom);
526
+ rmReal tz = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -znear / (zfar-znear);
527
+
528
+ RMtx4Identity( out );
529
+ SET_ELEMENT( out, 0, 0, 2.0f/(right-left) );
530
+ SET_ELEMENT( out, 0, 3, tx );
531
+ SET_ELEMENT( out, 1, 1, 2.0f/(top-bottom) );
532
+ SET_ELEMENT( out, 1, 3, ty );
533
+ SET_ELEMENT( out, 2, 2, (ndc_homogeneous ? 2.0f : 1.0f)/(zfar-znear) );
534
+ SET_ELEMENT( out, 2, 3, tz );
535
+ }
536
+
439
537
  /* http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/glu/lookat.html
440
538
  http://msdn.microsoft.com/en-us/library/bb205343.aspx
441
539
  */
@@ -479,37 +577,33 @@ RMtx4LookAtRH( RMtx4* out, const RVec3* eye, const RVec3* at, const RVec3* up )
479
577
  }
480
578
 
481
579
  void
482
- RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar )
580
+ RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
483
581
  {
484
- RMtx4PerspectiveOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar );
582
+ RMtx4PerspectiveOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
485
583
  }
486
584
 
487
- /* http://pyopengl.sourceforge.net/documentation/manual/gluPerspective.3G.html
585
+ /* https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/opengl-perspective-projection-matrix
488
586
  */
489
587
  void
490
- RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar )
588
+ RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous )
491
589
  {
492
- rmReal f = rmTan( fovy_radian / 2.0f );
493
- f = 1.0f / f;
494
-
495
- RMtx4Identity( out );
496
- SET_ELEMENT( out, 0, 0, f / aspect );
497
- SET_ELEMENT( out, 1, 1, f );
498
- SET_ELEMENT( out, 2, 2, (zfar+znear)/(znear-zfar) );
499
- SET_ELEMENT( out, 2, 3, 2*zfar*znear/(znear-zfar) );
500
- SET_ELEMENT( out, 3, 2, -1.0f );
501
- SET_ELEMENT( out, 3, 3, 0.0f );
590
+ rmReal top = rmTan(fovy_radian / 2.0f) * znear;
591
+ rmReal bottom = -top;
592
+ rmReal right = top * aspect;
593
+ rmReal left = -right;
594
+ RMtx4PerspectiveOffCenterRH(out, left, right, bottom, top, znear, zfar, ndc_homogeneous);
502
595
  }
503
596
 
504
- /* http://pyopengl.sourceforge.net/documentation/manual/glFrustum.3G.html
597
+ /* https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml
598
+ Game Programming in C++ (2018) https://www.oreilly.com/library/view/game-programming-in/9780134598185/
505
599
  */
506
600
  void
507
- RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar )
601
+ RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
508
602
  {
509
603
  rmReal A = (right+left) / (right-left);
510
604
  rmReal B = (top+bottom) / (top-bottom);
511
- rmReal C = -(zfar+znear) / (zfar-znear);
512
- rmReal D = -(2*znear*zfar) / (zfar-znear);
605
+ rmReal C = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -zfar / (zfar-znear);
606
+ rmReal D = ndc_homogeneous ? -(2*znear*zfar) / (zfar-znear) : -(znear*zfar) / (zfar-znear);
513
607
 
514
608
  RMtx4Identity( out );
515
609
  SET_ELEMENT( out, 0, 0, 2*znear/(right-left) );
@@ -523,33 +617,34 @@ RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal botto
523
617
  }
524
618
 
525
619
  void
526
- RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar )
620
+ RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
527
621
  {
528
- RMtx4OrthoOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar );
622
+ RMtx4OrthoOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
529
623
  }
530
624
 
531
- /* http://pyopengl.sourceforge.net/documentation/manual/glOrtho.3G.html
625
+ /* https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml
626
+ Game Programming in C++ (2018) https://www.oreilly.com/library/view/game-programming-in/9780134598185/
532
627
  */
533
628
  void
534
- RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar )
629
+ RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
535
630
  {
536
- rmReal tx = (right+left) / (right-left);
537
- rmReal ty = (top+bottom) / (top-bottom);
538
- rmReal tz = (zfar+znear) / (zfar-znear);
631
+ rmReal tx = -(right+left) / (right-left);
632
+ rmReal ty = -(top+bottom) / (top-bottom);
633
+ rmReal tz = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -znear / (zfar-znear);
539
634
 
540
635
  RMtx4Identity( out );
541
636
  SET_ELEMENT( out, 0, 0, 2.0f/(right-left) );
542
637
  SET_ELEMENT( out, 0, 3, tx );
543
638
  SET_ELEMENT( out, 1, 1, 2.0f/(top-bottom) );
544
639
  SET_ELEMENT( out, 1, 3, ty );
545
- SET_ELEMENT( out, 2, 2, -2.0f/(zfar-znear) );
640
+ SET_ELEMENT( out, 2, 2, -(ndc_homogeneous ? 2.0f : 1.0f)/(zfar-znear) );
546
641
  SET_ELEMENT( out, 2, 3, tz );
547
642
  }
548
643
 
549
644
 
550
645
  /*
551
646
  RMath : Ruby math module for 3D Applications
552
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
647
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
553
648
 
554
649
  This software is provided 'as-is', without any express or implied
555
650
  warranty. In no event will the authors be held liable for any damages
@@ -2,6 +2,7 @@
2
2
  #ifndef RMATHMTX4_H_INCLUDED
3
3
  #define RMATHMTX4_H_INCLUDED
4
4
 
5
+ #include <stdbool.h>
5
6
  #include "RType.h"
6
7
 
7
8
  struct RVec3;
@@ -70,12 +71,19 @@ void RMtx4Sub( RMtx4* out, const RMtx4* m1, const RMtx4* m2 );
70
71
  void RMtx4Mul( RMtx4* out, const RMtx4* m1, const RMtx4* m2 );
71
72
  void RMtx4Scale( RMtx4* out, const RMtx4* m, rmReal f );
72
73
 
74
+ void RMtx4LookAtLH( RMtx4* out, const struct RVec3* eye, const struct RVec3* at, const struct RVec3* up );
75
+ void RMtx4PerspectiveLH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
76
+ void RMtx4PerspectiveFovLH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous );
77
+ void RMtx4PerspectiveOffCenterLH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
78
+ void RMtx4OrthoLH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
79
+ void RMtx4OrthoOffCenterLH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
80
+
73
81
  void RMtx4LookAtRH( RMtx4* out, const struct RVec3* eye, const struct RVec3* at, const struct RVec3* up );
74
- void RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar );
75
- void RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar );
76
- void RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar );
77
- void RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar );
78
- void RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar );
82
+ void RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
83
+ void RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous );
84
+ void RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
85
+ void RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
86
+ void RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
79
87
 
80
88
  #ifdef __cplusplus
81
89
  }
@@ -87,7 +95,7 @@ void RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bot
87
95
 
88
96
  /*
89
97
  RMath : Ruby math module for 3D Applications
90
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
98
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
91
99
 
92
100
  This software is provided 'as-is', without any express or implied
93
101
  warranty. In no event will the authors be held liable for any damages
@@ -344,7 +344,7 @@ RQuatToAxisAngle( const RQuat* in, struct RVec3* axis, rmReal* radian )
344
344
 
345
345
  /*
346
346
  RMath : Ruby math module for 3D Applications
347
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
347
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
348
348
 
349
349
  This software is provided 'as-is', without any express or implied
350
350
  warranty. In no event will the authors be held liable for any damages
@@ -69,7 +69,7 @@ void RQuatToAxisAngle( const RQuat* in, struct RVec3* axis, rmReal* radian );
69
69
 
70
70
  /*
71
71
  RMath : Ruby math module for 3D Applications
72
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
72
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
73
73
 
74
74
  This software is provided 'as-is', without any express or implied
75
75
  warranty. In no event will the authors be held liable for any damages
@@ -53,7 +53,7 @@ typedef double rmReal;
53
53
 
54
54
  /*
55
55
  RMath : Ruby math module for 3D Applications
56
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
56
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
57
57
 
58
58
  This software is provided 'as-is', without any express or implied
59
59
  warranty. In no event will the authors be held liable for any damages
@@ -144,7 +144,7 @@ RVec2Transform( RVec2* out, const RMtx2* m, const RVec2* in )
144
144
 
145
145
  /*
146
146
  RMath : Ruby math module for 3D Applications
147
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>.
147
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>.
148
148
 
149
149
  This software is provided 'as-is', without any express or implied
150
150
  warranty. In no event will the authors be held liable for any damages
@@ -57,7 +57,7 @@ void RVec2Transform( struct RVec2* out, const struct RMtx2* m, const RVec2* i
57
57
 
58
58
  /*
59
59
  RMath : Ruby math module for 3D Applications
60
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
60
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
61
61
 
62
62
  This software is provided 'as-is', without any express or implied
63
63
  warranty. In no event will the authors be held liable for any damages
@@ -262,7 +262,7 @@ RVec3TransformByQuaternion( RVec3* out, const struct RQuat* q, const RVec3* in )
262
262
 
263
263
  /*
264
264
  RMath : Ruby math module for 3D Applications
265
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>.
265
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>.
266
266
 
267
267
  This software is provided 'as-is', without any express or implied
268
268
  warranty. In no event will the authors be held liable for any damages
@@ -66,7 +66,7 @@ void RVec3TransformByQuaternion( RVec3* out, const struct RQuat* q, const RVe
66
66
 
67
67
  /*
68
68
  RMath : Ruby math module for 3D Applications
69
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
69
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
70
70
 
71
71
  This software is provided 'as-is', without any express or implied
72
72
  warranty. In no event will the authors be held liable for any damages
@@ -192,7 +192,7 @@ RVec4TransformTransposed( RVec4* out, const struct RMtx4* m, const RVec4* in )
192
192
 
193
193
  /*
194
194
  RMath : Ruby math module for 3D Applications
195
- Copyright (c) 2008- vaiorabbit <http://twitter.com/vaiorabbit>
195
+ Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
196
196
 
197
197
  This software is provided 'as-is', without any express or implied
198
198
  warranty. In no event will the authors be held liable for any damages