rmath3d 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/ChangeLog +8 -0
- data/LICENSE.txt +1 -1
- data/README.md +4 -1
- data/ext/rmath3d/RMath3D.h +1 -1
- data/ext/rmath3d/RMtx2.c +1 -1
- data/ext/rmath3d/RMtx2.h +1 -1
- data/ext/rmath3d/RMtx3.c +1 -1
- data/ext/rmath3d/RMtx3.h +1 -1
- data/ext/rmath3d/RMtx4.c +25 -19
- data/ext/rmath3d/RMtx4.h +7 -6
- data/ext/rmath3d/RQuat.c +1 -1
- data/ext/rmath3d/RQuat.h +1 -1
- data/ext/rmath3d/RType.h +1 -1
- data/ext/rmath3d/RVec2.c +1 -1
- data/ext/rmath3d/RVec2.h +1 -1
- data/ext/rmath3d/RVec3.c +1 -1
- data/ext/rmath3d/RVec3.h +1 -1
- data/ext/rmath3d/RVec4.c +1 -1
- data/ext/rmath3d/RVec4.h +1 -1
- data/ext/rmath3d/rmath3d.c +88 -31
- data/lib/rmath3d/rmath3d_plain.rb +100 -59
- data/sample/opengl-bindings/load_matrix.rb +2 -2
- data/sample/opengl2/load_matrix.rb +2 -2
- data/test/test.rb +1 -1
- data/test/test_RMtx4.rb +11 -11
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9e8d8b8a38ad55ec12170a103c39607b841855790e279ae4c003e394900f3391
|
4
|
+
data.tar.gz: 8d74d4f0917015c74accd26293cb4036d9befa0bbe0d562893a324881a1b005f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6ea5c48fba49380581ae07cef869767a73ab1e3f2d8bda7481b352241bf3bd82197a188d529bf230ec786dedb35bb9a49145d430b54f298729598f7b3ba6702
|
7
|
+
data.tar.gz: b02fb89b9fbb8fe9bc1dd3456ef99507d4d1d1e659b3a2884243ea5342100bca7bee219550e6764e15e43c352cf4561bea5615db56827c2d9365596e9e098802
|
data/ChangeLog
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
2020-06-21 vaiorabbit <http://twitter.com/vaiorabbit>
|
2
|
+
|
3
|
+
* rmath3d.c, rmath3d_plain.rb (RMtx4): Added argument 'ndc_homogeneous' for projection matrix APIs.
|
4
|
+
Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal)
|
5
|
+
https://www.slideshare.net/Mark_Kilgard/opengl-32-and-more/26-Direct3D_vs_OpenGL_Coordinate_System
|
6
|
+
https://metashapes.com/blog/opengl-metal-projection-matrix-problem/
|
7
|
+
* rmath3d_plain.rb: Removed Fixnum and Bignum symbols (deprecated and unified into Integer class since Ruby 2.4)
|
8
|
+
|
1
9
|
2017-07-22 vaiorabbit <http://twitter.com/vaiorabbit>
|
2
10
|
|
3
11
|
* Added 'Integer' type for argument type branching (constant ::Fixnum is deprecated since ruby 2.4).
|
data/LICENSE.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
rmath3d : Ruby math module for 3D Applications
|
2
|
-
Copyright (c) 2008-
|
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:
|
7
|
+
* Last Update: Jun 21, 2020
|
8
8
|
* Since: Jul 20, 2008
|
9
9
|
|
10
|
+
* rmath3d (C Extension Library Implementation) [](https://badge.fury.io/rb/rmath3d) [](https://rubygems.org/gems/rmath3d)
|
11
|
+
* rmath3d_plain (Pure Ruby Implementation) [](https://badge.fury.io/rb/rmath3d_plain) [](https://rubygems.org/gems/rmath3d_plain)
|
12
|
+
|
10
13
|
## Features ##
|
11
14
|
|
12
15
|
### Supports frequently-used vector and matrix classes ###
|
data/ext/rmath3d/RMath3D.h
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
/*
|
16
16
|
RMath : Ruby math module for 3D Applications
|
17
|
-
Copyright (c) 2008-
|
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
|
data/ext/rmath3d/RMtx2.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RMtx2.h
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RMtx3.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RMtx3.h
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RMtx4.c
CHANGED
@@ -479,37 +479,42 @@ RMtx4LookAtRH( RMtx4* out, const RVec3* eye, const RVec3* at, const RVec3* up )
|
|
479
479
|
}
|
480
480
|
|
481
481
|
void
|
482
|
-
RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar )
|
482
|
+
RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
|
483
483
|
{
|
484
|
-
RMtx4PerspectiveOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar );
|
484
|
+
RMtx4PerspectiveOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
|
485
485
|
}
|
486
486
|
|
487
|
-
/*
|
487
|
+
/* https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml
|
488
|
+
Game Programming in C++ (2018) https://www.oreilly.com/library/view/game-programming-in/9780134598185/
|
488
489
|
*/
|
489
490
|
void
|
490
|
-
RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar )
|
491
|
+
RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous )
|
491
492
|
{
|
492
493
|
rmReal f = rmTan( fovy_radian / 2.0f );
|
493
494
|
f = 1.0f / f;
|
494
495
|
|
496
|
+
rmReal C = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : zfar / -(zfar-znear);
|
497
|
+
rmReal D = ndc_homogeneous ? -(2*znear*zfar) / (zfar-znear) : -(znear*zfar) / (zfar-znear);
|
498
|
+
|
495
499
|
RMtx4Identity( out );
|
496
500
|
SET_ELEMENT( out, 0, 0, f / aspect );
|
497
501
|
SET_ELEMENT( out, 1, 1, f );
|
498
|
-
SET_ELEMENT( out, 2, 2,
|
499
|
-
SET_ELEMENT( out, 2, 3,
|
502
|
+
SET_ELEMENT( out, 2, 2, C );
|
503
|
+
SET_ELEMENT( out, 2, 3, D );
|
500
504
|
SET_ELEMENT( out, 3, 2, -1.0f );
|
501
505
|
SET_ELEMENT( out, 3, 3, 0.0f );
|
502
506
|
}
|
503
507
|
|
504
|
-
/*
|
508
|
+
/* https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml
|
509
|
+
Game Programming in C++ (2018) https://www.oreilly.com/library/view/game-programming-in/9780134598185/
|
505
510
|
*/
|
506
511
|
void
|
507
|
-
RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar )
|
512
|
+
RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
|
508
513
|
{
|
509
514
|
rmReal A = (right+left) / (right-left);
|
510
515
|
rmReal B = (top+bottom) / (top-bottom);
|
511
|
-
rmReal C = -(zfar+znear) / (zfar-znear);
|
512
|
-
rmReal D = -(2*znear*zfar) / (zfar-znear);
|
516
|
+
rmReal C = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -zfar / (zfar-znear);
|
517
|
+
rmReal D = ndc_homogeneous ? -(2*znear*zfar) / (zfar-znear) : -(znear*zfar) / (zfar-znear);
|
513
518
|
|
514
519
|
RMtx4Identity( out );
|
515
520
|
SET_ELEMENT( out, 0, 0, 2*znear/(right-left) );
|
@@ -523,33 +528,34 @@ RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal botto
|
|
523
528
|
}
|
524
529
|
|
525
530
|
void
|
526
|
-
RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar )
|
531
|
+
RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous )
|
527
532
|
{
|
528
|
-
RMtx4OrthoOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar );
|
533
|
+
RMtx4OrthoOffCenterRH( out, -width/2.0f, width/2.0f, -height/2.0f, height/2.0f, znear, zfar, ndc_homogeneous );
|
529
534
|
}
|
530
535
|
|
531
|
-
/*
|
536
|
+
/* https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml
|
537
|
+
Game Programming in C++ (2018) https://www.oreilly.com/library/view/game-programming-in/9780134598185/
|
532
538
|
*/
|
533
539
|
void
|
534
|
-
RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar )
|
540
|
+
RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous )
|
535
541
|
{
|
536
|
-
rmReal tx = (right+left) / (right-left);
|
537
|
-
rmReal ty = (top+bottom) / (top-bottom);
|
538
|
-
rmReal tz = (zfar+znear) / (zfar-znear);
|
542
|
+
rmReal tx = -(right+left) / (right-left);
|
543
|
+
rmReal ty = -(top+bottom) / (top-bottom);
|
544
|
+
rmReal tz = ndc_homogeneous ? -(zfar+znear) / (zfar-znear) : -znear / (zfar-znear);
|
539
545
|
|
540
546
|
RMtx4Identity( out );
|
541
547
|
SET_ELEMENT( out, 0, 0, 2.0f/(right-left) );
|
542
548
|
SET_ELEMENT( out, 0, 3, tx );
|
543
549
|
SET_ELEMENT( out, 1, 1, 2.0f/(top-bottom) );
|
544
550
|
SET_ELEMENT( out, 1, 3, ty );
|
545
|
-
SET_ELEMENT( out, 2, 2, -2.0f/(zfar-znear) );
|
551
|
+
SET_ELEMENT( out, 2, 2, -(ndc_homogeneous ? 2.0f : 1.0f)/(zfar-znear) );
|
546
552
|
SET_ELEMENT( out, 2, 3, tz );
|
547
553
|
}
|
548
554
|
|
549
555
|
|
550
556
|
/*
|
551
557
|
RMath : Ruby math module for 3D Applications
|
552
|
-
Copyright (c) 2008-
|
558
|
+
Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
|
553
559
|
|
554
560
|
This software is provided 'as-is', without any express or implied
|
555
561
|
warranty. In no event will the authors be held liable for any damages
|
data/ext/rmath3d/RMtx4.h
CHANGED
@@ -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;
|
@@ -71,11 +72,11 @@ void RMtx4Mul( RMtx4* out, const RMtx4* m1, const RMtx4* m2 );
|
|
71
72
|
void RMtx4Scale( RMtx4* out, const RMtx4* m, rmReal f );
|
72
73
|
|
73
74
|
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 );
|
75
|
+
void RMtx4PerspectiveRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
|
76
|
+
void RMtx4PerspectiveFovRH( RMtx4* out, rmReal fovy_radian, rmReal aspect, rmReal znear, rmReal zfar, bool ndc_homogeneous );
|
77
|
+
void RMtx4PerspectiveOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
|
78
|
+
void RMtx4OrthoRH( RMtx4* out, rmReal width, rmReal height, rmReal znear, rmReal zfar, bool ndc_homogeneous );
|
79
|
+
void RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bottom, rmReal top, rmReal znear, rmReal zfar, bool ndc_homogeneous );
|
79
80
|
|
80
81
|
#ifdef __cplusplus
|
81
82
|
}
|
@@ -87,7 +88,7 @@ void RMtx4OrthoOffCenterRH( RMtx4* out, rmReal left, rmReal right, rmReal bot
|
|
87
88
|
|
88
89
|
/*
|
89
90
|
RMath : Ruby math module for 3D Applications
|
90
|
-
Copyright (c) 2008-
|
91
|
+
Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
|
91
92
|
|
92
93
|
This software is provided 'as-is', without any express or implied
|
93
94
|
warranty. In no event will the authors be held liable for any damages
|
data/ext/rmath3d/RQuat.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RQuat.h
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RType.h
CHANGED
@@ -53,7 +53,7 @@ typedef double rmReal;
|
|
53
53
|
|
54
54
|
/*
|
55
55
|
RMath : Ruby math module for 3D Applications
|
56
|
-
Copyright (c) 2008-
|
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
|
data/ext/rmath3d/RVec2.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RVec2.h
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RVec3.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RVec3.h
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RVec4.c
CHANGED
@@ -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-
|
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
|
data/ext/rmath3d/RVec4.h
CHANGED
@@ -63,7 +63,7 @@ void RVec4TransformTransposed( RVec4* out, const struct RMtx4* m, const RVec4
|
|
63
63
|
|
64
64
|
/*
|
65
65
|
RMath : Ruby math module for 3D Applications
|
66
|
-
Copyright (c) 2008-
|
66
|
+
Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
|
67
67
|
|
68
68
|
This software is provided 'as-is', without any express or implied
|
69
69
|
warranty. In no event will the authors be held liable for any damages
|
data/ext/rmath3d/rmath3d.c
CHANGED
@@ -258,7 +258,7 @@ RMtx2_initialize( int argc, VALUE* argv, VALUE self )
|
|
258
258
|
|
259
259
|
default:
|
260
260
|
{
|
261
|
-
rb_raise(
|
261
|
+
rb_raise( rb_eArgError, "RMtx2_initialize : wrong # of arguments (%d)", argc );
|
262
262
|
return Qnil;
|
263
263
|
}
|
264
264
|
break;
|
@@ -377,7 +377,7 @@ RMtx2_setElements( int argc, VALUE* argv, VALUE self )
|
|
377
377
|
#ifdef RMATH_ENABLE_ARGUMENT_CHECK
|
378
378
|
if ( argc != 4 )
|
379
379
|
{
|
380
|
-
rb_raise(
|
380
|
+
rb_raise( rb_eArgError, "RMtx2_setElements : wrong # of arguments (%d)", argc );
|
381
381
|
return Qnil;
|
382
382
|
}
|
383
383
|
#endif
|
@@ -1139,7 +1139,7 @@ RMtx3_initialize( int argc, VALUE* argv, VALUE self )
|
|
1139
1139
|
|
1140
1140
|
default:
|
1141
1141
|
{
|
1142
|
-
rb_raise(
|
1142
|
+
rb_raise( rb_eArgError, "RMtx3_initialize : wrong # of arguments (%d)", argc );
|
1143
1143
|
return Qnil;
|
1144
1144
|
}
|
1145
1145
|
break;
|
@@ -1258,7 +1258,7 @@ RMtx3_setElements( int argc, VALUE* argv, VALUE self )
|
|
1258
1258
|
#ifdef RMATH_ENABLE_ARGUMENT_CHECK
|
1259
1259
|
if ( argc != 9 )
|
1260
1260
|
{
|
1261
|
-
rb_raise(
|
1261
|
+
rb_raise( rb_eArgError, "RMtx3_setElements : wrong # of arguments (%d)", argc );
|
1262
1262
|
return Qnil;
|
1263
1263
|
}
|
1264
1264
|
#endif
|
@@ -2227,7 +2227,7 @@ RMtx4_initialize( int argc, VALUE* argv, VALUE self )
|
|
2227
2227
|
|
2228
2228
|
default:
|
2229
2229
|
{
|
2230
|
-
rb_raise(
|
2230
|
+
rb_raise( rb_eArgError, "RMtx4_initialize : wrong # of arguments (%d)", argc );
|
2231
2231
|
return Qnil;
|
2232
2232
|
}
|
2233
2233
|
break;
|
@@ -2348,7 +2348,7 @@ RMtx4_setElements( int argc, VALUE* argv, VALUE self )
|
|
2348
2348
|
#ifdef RMATH_ENABLE_ARGUMENT_CHECK
|
2349
2349
|
if ( argc != 16 )
|
2350
2350
|
{
|
2351
|
-
rb_raise(
|
2351
|
+
rb_raise( rb_eArgError, "RMtx4_setElements : wrong # of arguments (%d)", argc );
|
2352
2352
|
return Qnil;
|
2353
2353
|
}
|
2354
2354
|
#endif
|
@@ -3247,59 +3247,81 @@ RMtx4_lookAtRH( VALUE self, VALUE e, VALUE a, VALUE u )
|
|
3247
3247
|
}
|
3248
3248
|
|
3249
3249
|
/*
|
3250
|
-
* call-seq: perspectiveRH(width,height,znear,zfar) -> self
|
3250
|
+
* call-seq: perspectiveRH(width,height,znear,zfar,ndc_homogeneous) -> self
|
3251
3251
|
*
|
3252
3252
|
* Builds a perspective projection matrix for a right-handed coordinate system from:
|
3253
3253
|
* * View volume width (+width+)
|
3254
3254
|
* * View volume height (+height+)
|
3255
3255
|
* * Near clip plane distance (+znear+)
|
3256
3256
|
* * Far clip plane distance (+zfar+)
|
3257
|
+
* * Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal) (+ndc_homogeneous+)
|
3257
3258
|
*/
|
3258
3259
|
static VALUE
|
3259
|
-
RMtx4_perspectiveRH(
|
3260
|
+
RMtx4_perspectiveRH( int argc, VALUE* argv, VALUE self )
|
3260
3261
|
{
|
3262
|
+
VALUE w, h, zn, zf, ndch;
|
3261
3263
|
RMtx4* m = NULL;
|
3262
3264
|
rmReal width, height, znear, zfar;
|
3265
|
+
bool ndc_homogeneous;
|
3266
|
+
|
3267
|
+
if (argc < 4 || argc > 5)
|
3268
|
+
{
|
3269
|
+
rb_raise(rb_eArgError, "RMtx4_perspectiveRH : wrong # of arguments (%d)", argc );
|
3270
|
+
}
|
3271
|
+
|
3272
|
+
rb_scan_args(argc, argv, "41", &w, &h, &zn, &zf, &ndch);
|
3263
3273
|
|
3264
3274
|
TypedData_Get_Struct( self, RMtx4, &RMtx4_type, m );
|
3265
3275
|
width = NUM2DBL(w);
|
3266
3276
|
height = NUM2DBL(h);
|
3267
3277
|
znear = NUM2DBL(zn);
|
3268
3278
|
zfar = NUM2DBL(zf);
|
3279
|
+
ndc_homogeneous = NIL_P(ndch) ? true : ((ndch == Qtrue) ? true : false);
|
3269
3280
|
|
3270
|
-
RMtx4PerspectiveRH( m, width, height, znear, zfar );
|
3281
|
+
RMtx4PerspectiveRH( m, width, height, znear, zfar, ndc_homogeneous );
|
3271
3282
|
|
3272
3283
|
return self;
|
3273
3284
|
}
|
3274
3285
|
|
3275
3286
|
/*
|
3276
|
-
* call-seq: perspectiveFovRH(fovy,aspect,znear,zfar) -> self
|
3287
|
+
* call-seq: perspectiveFovRH(fovy,aspect,znear,zfar,ndc_homogeneous) -> self
|
3277
3288
|
*
|
3278
3289
|
* Builds a perspective projection matrix for a right-handed coordinate system from:
|
3279
3290
|
* * Field of view in y direction (+fovy+ radian)
|
3280
3291
|
* * Aspect ratio (+aspect+)
|
3281
3292
|
* * Near clip plane distance (+znear+)
|
3282
3293
|
* * Far clip plane distance (+zfar+)
|
3294
|
+
* * Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal) (+ndc_homogeneous+)
|
3283
3295
|
*/
|
3284
3296
|
static VALUE
|
3285
|
-
RMtx4_perspectiveFovRH(
|
3297
|
+
RMtx4_perspectiveFovRH( int argc, VALUE* argv, VALUE self )
|
3286
3298
|
{
|
3299
|
+
VALUE fovy, asp, zn, zf, ndch;
|
3287
3300
|
RMtx4* m = NULL;
|
3288
3301
|
rmReal fovy_radian, aspect, znear, zfar;
|
3302
|
+
bool ndc_homogeneous;
|
3303
|
+
|
3304
|
+
if (argc < 4 || argc > 5)
|
3305
|
+
{
|
3306
|
+
rb_raise(rb_eArgError, "RMtx4_perspectiveFovRH : wrong # of arguments (%d)", argc );
|
3307
|
+
}
|
3308
|
+
|
3309
|
+
rb_scan_args(argc, argv, "41", &fovy, &asp, &zn, &zf, &ndch);
|
3289
3310
|
|
3290
3311
|
TypedData_Get_Struct( self, RMtx4, &RMtx4_type, m );
|
3291
3312
|
fovy_radian = NUM2DBL(fovy);
|
3292
3313
|
aspect = NUM2DBL(asp);
|
3293
3314
|
znear = NUM2DBL(zn);
|
3294
3315
|
zfar = NUM2DBL(zf);
|
3316
|
+
ndc_homogeneous = NIL_P(ndch) ? true : ((ndch == Qtrue) ? true : false);
|
3295
3317
|
|
3296
|
-
RMtx4PerspectiveFovRH( m, fovy_radian, aspect, znear, zfar );
|
3318
|
+
RMtx4PerspectiveFovRH( m, fovy_radian, aspect, znear, zfar, ndc_homogeneous );
|
3297
3319
|
|
3298
3320
|
return self;
|
3299
3321
|
}
|
3300
3322
|
|
3301
3323
|
/*
|
3302
|
-
* call-seq: perspectiveOffCenterRH(left,right,bottom,top,znear,zfar) -> self
|
3324
|
+
* call-seq: perspectiveOffCenterRH(left,right,bottom,top,znear,zfar,ndc_homogeneous) -> self
|
3303
3325
|
*
|
3304
3326
|
* Builds a perspective projection matrix for a right-handed coordinate system from:
|
3305
3327
|
* * Minimum value of the view volume width (+left+)
|
@@ -3308,12 +3330,22 @@ RMtx4_perspectiveFovRH( VALUE self, VALUE fovy, VALUE asp, VALUE zn, VALUE zf )
|
|
3308
3330
|
* * Maximum value of the view volume height (+top+)
|
3309
3331
|
* * Near clip plane distance (+znear+)
|
3310
3332
|
* * Far clip plane distance (+zfar+)
|
3333
|
+
* * Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal) (+ndc_homogeneous+)
|
3311
3334
|
*/
|
3312
3335
|
static VALUE
|
3313
|
-
RMtx4_perspectiveOffCenterRH(
|
3336
|
+
RMtx4_perspectiveOffCenterRH( int argc, VALUE* argv, VALUE self )
|
3314
3337
|
{
|
3338
|
+
VALUE l, r, b, t, zn, zf, ndch;
|
3315
3339
|
RMtx4* m = NULL;
|
3316
3340
|
rmReal left, right, bottom, top, znear, zfar;
|
3341
|
+
bool ndc_homogeneous;
|
3342
|
+
|
3343
|
+
if (argc < 6 || argc > 7)
|
3344
|
+
{
|
3345
|
+
rb_raise(rb_eArgError, "RMtx4_perspectiveOffCenterRH : wrong # of arguments (%d)", argc );
|
3346
|
+
}
|
3347
|
+
|
3348
|
+
rb_scan_args(argc, argv, "61", &l, &r, &b, &t, &zn, &zf, &ndch);
|
3317
3349
|
|
3318
3350
|
TypedData_Get_Struct( self, RMtx4, &RMtx4_type, m );
|
3319
3351
|
left = NUM2DBL(l);
|
@@ -3322,39 +3354,52 @@ RMtx4_perspectiveOffCenterRH( VALUE self, VALUE l, VALUE r, VALUE b, VALUE t, VA
|
|
3322
3354
|
top = NUM2DBL(t);
|
3323
3355
|
znear = NUM2DBL(zn);
|
3324
3356
|
zfar = NUM2DBL(zf);
|
3325
|
-
|
3357
|
+
ndc_homogeneous = NIL_P(ndch) ? true : ((ndch == Qtrue) ? true : false);
|
3358
|
+
|
3359
|
+
RMtx4PerspectiveOffCenterRH( m, left, right, bottom, top, znear, zfar, ndc_homogeneous );
|
3326
3360
|
|
3327
3361
|
return self;
|
3328
3362
|
}
|
3329
3363
|
|
3330
3364
|
/*
|
3331
|
-
* call-seq: orthoRH(width,height,znear,zfar) -> self
|
3365
|
+
* call-seq: orthoRH(width,height,znear,zfar,ndc_homogeneous) -> self
|
3332
3366
|
*
|
3333
3367
|
* Builds a orthogonal projection matrix for a right-handed coordinate system from:
|
3334
3368
|
* * View volume width (+width+)
|
3335
3369
|
* * View volume height (+height+)
|
3336
3370
|
* * Near clip plane distance (+znear+)
|
3337
3371
|
* * Far clip plane distance (+zfar+)
|
3372
|
+
* * Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal) (+ndc_homogeneous+)
|
3338
3373
|
*/
|
3339
3374
|
static VALUE
|
3340
|
-
RMtx4_orthoRH(
|
3375
|
+
RMtx4_orthoRH( int argc, VALUE* argv, VALUE self )
|
3341
3376
|
{
|
3377
|
+
VALUE w, h, zn, zf, ndch;
|
3342
3378
|
RMtx4* m = NULL;
|
3343
3379
|
rmReal width, height, znear, zfar;
|
3380
|
+
bool ndc_homogeneous;
|
3381
|
+
|
3382
|
+
if (argc < 4 || argc > 5)
|
3383
|
+
{
|
3384
|
+
rb_raise(rb_eArgError, "RMtx4_orthoRH : wrong # of arguments (%d)", argc );
|
3385
|
+
}
|
3386
|
+
|
3387
|
+
rb_scan_args(argc, argv, "41", &w, &h, &zn, &zf, &ndch);
|
3344
3388
|
|
3345
3389
|
TypedData_Get_Struct( self, RMtx4, &RMtx4_type, m );
|
3346
3390
|
width = NUM2DBL(w);
|
3347
3391
|
height = NUM2DBL(h);
|
3348
3392
|
znear = NUM2DBL(zn);
|
3349
3393
|
zfar = NUM2DBL(zf);
|
3394
|
+
ndc_homogeneous = NIL_P(ndch) ? true : ((ndch == Qtrue) ? true : false);
|
3350
3395
|
|
3351
|
-
RMtx4OrthoRH( m, width, height, znear, zfar );
|
3396
|
+
RMtx4OrthoRH( m, width, height, znear, zfar, ndc_homogeneous );
|
3352
3397
|
|
3353
3398
|
return self;
|
3354
3399
|
}
|
3355
3400
|
|
3356
3401
|
/*
|
3357
|
-
* call-seq: orthoOffCenterRH(left,right,bottom,top,znear,zfar) -> self
|
3402
|
+
* call-seq: orthoOffCenterRH(left,right,bottom,top,znear,zfar,ndc_homogeneous) -> self
|
3358
3403
|
*
|
3359
3404
|
* Builds a orthogonal projection matrix for a right-handed coordinate system from:
|
3360
3405
|
* * Minimum value of the view volume width (+left+)
|
@@ -3363,12 +3408,22 @@ RMtx4_orthoRH( VALUE self, VALUE w, VALUE h, VALUE zn, VALUE zf )
|
|
3363
3408
|
* * Maximum value of the view volume height (+top+)
|
3364
3409
|
* * Near clip plane distance (+znear+)
|
3365
3410
|
* * Far clip plane distance (+zfar+)
|
3411
|
+
* * Set true for the environment with Z coordinate ranges from -1 to +1 (OpenGL), and false otherwise (Direct3D, Metal) (+ndc_homogeneous+)
|
3366
3412
|
*/
|
3367
3413
|
static VALUE
|
3368
|
-
RMtx4_orthoOffCenterRH(
|
3414
|
+
RMtx4_orthoOffCenterRH( int argc, VALUE* argv, VALUE self )
|
3369
3415
|
{
|
3416
|
+
VALUE l, r, b, t, zn, zf, ndch;
|
3370
3417
|
RMtx4* m = NULL;
|
3371
3418
|
rmReal left, right, bottom, top, znear, zfar;
|
3419
|
+
bool ndc_homogeneous;
|
3420
|
+
|
3421
|
+
if (argc < 6 || argc > 7)
|
3422
|
+
{
|
3423
|
+
rb_raise(rb_eArgError, "RMtx4_orthoOffCenterRH : wrong # of arguments (%d)", argc );
|
3424
|
+
}
|
3425
|
+
|
3426
|
+
rb_scan_args(argc, argv, "61", &l, &r, &b, &t, &zn, &zf, &ndch);
|
3372
3427
|
|
3373
3428
|
TypedData_Get_Struct( self, RMtx4, &RMtx4_type, m );
|
3374
3429
|
left = NUM2DBL(l);
|
@@ -3377,7 +3432,9 @@ RMtx4_orthoOffCenterRH( VALUE self, VALUE l, VALUE r, VALUE b, VALUE t, VALUE zn
|
|
3377
3432
|
top = NUM2DBL(t);
|
3378
3433
|
znear = NUM2DBL(zn);
|
3379
3434
|
zfar = NUM2DBL(zf);
|
3380
|
-
|
3435
|
+
ndc_homogeneous = NIL_P(ndch) ? true : ((ndch == Qtrue) ? true : false);
|
3436
|
+
|
3437
|
+
RMtx4OrthoOffCenterRH( m, left, right, bottom, top, znear, zfar, ndc_homogeneous );
|
3381
3438
|
|
3382
3439
|
return self;
|
3383
3440
|
}
|
@@ -3734,7 +3791,7 @@ RQuat_initialize( int argc, VALUE* argv, VALUE self )
|
|
3734
3791
|
|
3735
3792
|
default:
|
3736
3793
|
{
|
3737
|
-
rb_raise(
|
3794
|
+
rb_raise( rb_eArgError, "RQuat_initialize : wrong # of arguments (%d)", argc );
|
3738
3795
|
return Qnil;
|
3739
3796
|
}
|
3740
3797
|
break;
|
@@ -4692,7 +4749,7 @@ RVec2_initialize( int argc, VALUE* argv, VALUE self )
|
|
4692
4749
|
|
4693
4750
|
default:
|
4694
4751
|
{
|
4695
|
-
rb_raise(
|
4752
|
+
rb_raise( rb_eArgError, "RVec2_initialize : wrong # of arguments (%d)", argc );
|
4696
4753
|
return Qnil;
|
4697
4754
|
}
|
4698
4755
|
break;
|
@@ -5392,7 +5449,7 @@ RVec3_initialize( int argc, VALUE* argv, VALUE self )
|
|
5392
5449
|
|
5393
5450
|
default:
|
5394
5451
|
{
|
5395
|
-
rb_raise(
|
5452
|
+
rb_raise( rb_eArgError, "RVec3_initialize : wrong # of arguments (%d)", argc );
|
5396
5453
|
return Qnil;
|
5397
5454
|
}
|
5398
5455
|
break;
|
@@ -6353,7 +6410,7 @@ RVec4_initialize( int argc, VALUE* argv, VALUE self )
|
|
6353
6410
|
|
6354
6411
|
default:
|
6355
6412
|
{
|
6356
|
-
rb_raise(
|
6413
|
+
rb_raise( rb_eArgError, "RVec4_initialize : wrong # of arguments (%d)", argc );
|
6357
6414
|
return Qnil;
|
6358
6415
|
}
|
6359
6416
|
break;
|
@@ -7324,11 +7381,11 @@ Init_rmath3d()
|
|
7324
7381
|
rb_define_method( rb_cRMtx4, "scaling", RMtx4_scaling, 3 );
|
7325
7382
|
|
7326
7383
|
rb_define_method( rb_cRMtx4, "lookAtRH", RMtx4_lookAtRH, 3 );
|
7327
|
-
rb_define_method( rb_cRMtx4, "perspectiveRH", RMtx4_perspectiveRH,
|
7328
|
-
rb_define_method( rb_cRMtx4, "perspectiveFovRH", RMtx4_perspectiveFovRH,
|
7329
|
-
rb_define_method( rb_cRMtx4, "perspectiveOffCenterRH", RMtx4_perspectiveOffCenterRH,
|
7330
|
-
rb_define_method( rb_cRMtx4, "orthoRH", RMtx4_orthoRH,
|
7331
|
-
rb_define_method( rb_cRMtx4, "orthoOffCenterRH", RMtx4_orthoOffCenterRH,
|
7384
|
+
rb_define_method( rb_cRMtx4, "perspectiveRH", RMtx4_perspectiveRH, -1 );
|
7385
|
+
rb_define_method( rb_cRMtx4, "perspectiveFovRH", RMtx4_perspectiveFovRH, -1 );
|
7386
|
+
rb_define_method( rb_cRMtx4, "perspectiveOffCenterRH", RMtx4_perspectiveOffCenterRH, -1 );
|
7387
|
+
rb_define_method( rb_cRMtx4, "orthoRH", RMtx4_orthoRH, -1 );
|
7388
|
+
rb_define_method( rb_cRMtx4, "orthoOffCenterRH", RMtx4_orthoOffCenterRH, -1 );
|
7332
7389
|
|
7333
7390
|
rb_define_method( rb_cRMtx4, "+@", RMtx4_op_unary_plus, 0 );
|
7334
7391
|
rb_define_method( rb_cRMtx4, "-@", RMtx4_op_unary_minus, 0 );
|
@@ -7544,7 +7601,7 @@ Init_rmath3d()
|
|
7544
7601
|
|
7545
7602
|
/*
|
7546
7603
|
RMath : Ruby math module for 3D Applications
|
7547
|
-
Copyright (c) 2008-
|
7604
|
+
Copyright (c) 2008-2020 vaiorabbit <http://twitter.com/vaiorabbit>
|
7548
7605
|
|
7549
7606
|
This software is provided 'as-is', without any express or implied
|
7550
7607
|
warranty. In no event will the authors be held liable for any damages
|