rmath3d 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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) [![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 ###
|
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
|