mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5d88f22a0 | ||
|
|
8e10ab2b49 | ||
|
|
4ede0815d4 | ||
|
|
7d16e3583f | ||
|
|
6011baff06 | ||
|
|
af92df4e84 | ||
|
|
94381d3067 | ||
|
|
0e794f8f8f | ||
|
|
b895e424b0 | ||
|
|
a2b8858e36 | ||
|
|
9d08407897 | ||
|
|
8898c3b471 | ||
|
|
f0c2860179 | ||
|
|
f142e8e16e | ||
|
|
5ac916236c | ||
|
|
4327935b9f | ||
|
|
086b40bf6a | ||
|
|
af3b356762 | ||
|
|
9ac291c673 | ||
|
|
7f7e9f69da | ||
|
|
8ddb5d5740 | ||
|
|
56ec058c7d | ||
|
|
a5af9e5eac | ||
|
|
4d20f97275 | ||
|
|
89e8c352ec | ||
|
|
403097d56c | ||
|
|
eddaf464ff | ||
|
|
7065011bf3 | ||
|
|
db46ea110a | ||
|
|
c013bd462c | ||
|
|
b3a18b8a15 | ||
|
|
1bce62c371 | ||
|
|
a242d83805 | ||
|
|
7760c709da | ||
|
|
919e3bcf4a |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -76,3 +76,5 @@ build/
|
|||||||
conftest.dir/*
|
conftest.dir/*
|
||||||
confdefs.h
|
confdefs.h
|
||||||
*.xcuserdatad
|
*.xcuserdatad
|
||||||
|
.idea
|
||||||
|
cmake-build-debug
|
||||||
|
|||||||
@@ -73,6 +73,18 @@ add_library(${PROJECT_NAME}
|
|||||||
src/bezier.c
|
src/bezier.c
|
||||||
src/ray.c
|
src/ray.c
|
||||||
src/affine2d.c
|
src/affine2d.c
|
||||||
|
src/clipspace/persp_lh_zo.c
|
||||||
|
src/clipspace/persp_rh_zo.c
|
||||||
|
src/clipspace/persp_lh_no.c
|
||||||
|
src/clipspace/persp_rh_no.c
|
||||||
|
src/clipspace/ortho_lh_zo.c
|
||||||
|
src/clipspace/ortho_rh_zo.c
|
||||||
|
src/clipspace/ortho_lh_no.c
|
||||||
|
src/clipspace/ortho_rh_no.c
|
||||||
|
src/clipspace/view_lh_zo.c
|
||||||
|
src/clipspace/view_rh_zo.c
|
||||||
|
src/clipspace/view_lh_no.c
|
||||||
|
src/clipspace/view_rh_no.c
|
||||||
)
|
)
|
||||||
|
|
||||||
if(CGLM_SHARED)
|
if(CGLM_SHARED)
|
||||||
|
|||||||
49
Makefile.am
49
Makefile.am
@@ -69,6 +69,23 @@ cglm_HEADERS = include/cglm/version.h \
|
|||||||
include/cglm/ray.h \
|
include/cglm/ray.h \
|
||||||
include/cglm/affine2d.h
|
include/cglm/affine2d.h
|
||||||
|
|
||||||
|
cglm_clipspacedir=$(includedir)/cglm/clipspace
|
||||||
|
cglm_clipspace_HEADERS = include/cglm/clipspace/persp.h \
|
||||||
|
include/cglm/clipspace/persp_lh_zo.h \
|
||||||
|
include/cglm/clipspace/persp_rh_zo.h \
|
||||||
|
include/cglm/clipspace/persp_lh_no.h \
|
||||||
|
include/cglm/clipspace/persp_rh_no.h \
|
||||||
|
include/cglm/clipspace/ortho_lh_zo.h \
|
||||||
|
include/cglm/clipspace/ortho_rh_zo.h \
|
||||||
|
include/cglm/clipspace/ortho_lh_no.h \
|
||||||
|
include/cglm/clipspace/ortho_rh_no.h \
|
||||||
|
include/cglm/clipspace/view_lh.h \
|
||||||
|
include/cglm/clipspace/view_rh.h \
|
||||||
|
include/cglm/clipspace/view_lh_zo.h \
|
||||||
|
include/cglm/clipspace/view_rh_zo.h \
|
||||||
|
include/cglm/clipspace/view_lh_no.h \
|
||||||
|
include/cglm/clipspace/view_rh_no.h
|
||||||
|
|
||||||
cglm_calldir=$(includedir)/cglm/call
|
cglm_calldir=$(includedir)/cglm/call
|
||||||
cglm_call_HEADERS = include/cglm/call/mat4.h \
|
cglm_call_HEADERS = include/cglm/call/mat4.h \
|
||||||
include/cglm/call/mat3.h \
|
include/cglm/call/mat3.h \
|
||||||
@@ -138,6 +155,20 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
|||||||
include/cglm/struct/curve.h \
|
include/cglm/struct/curve.h \
|
||||||
include/cglm/struct/affine2d.h
|
include/cglm/struct/affine2d.h
|
||||||
|
|
||||||
|
cglm_struct_clipspacedir=$(includedir)/cglm/struct/clipspace
|
||||||
|
cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/persp_rh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/persp_lh_no.h \
|
||||||
|
include/cglm/struct/clipspace/persp_rh_no.h \
|
||||||
|
include/cglm/struct/clipspace/ortho_lh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/ortho_rh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/ortho_lh_no.h \
|
||||||
|
include/cglm/struct/clipspace/ortho_rh_no.h \
|
||||||
|
include/cglm/struct/clipspace/view_lh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/view_rh_zo.h \
|
||||||
|
include/cglm/struct/clipspace/view_lh_no.h \
|
||||||
|
include/cglm/struct/clipspace/view_rh_no.h
|
||||||
|
|
||||||
libcglm_la_SOURCES=\
|
libcglm_la_SOURCES=\
|
||||||
src/euler.c \
|
src/euler.c \
|
||||||
src/affine.c \
|
src/affine.c \
|
||||||
@@ -159,13 +190,29 @@ libcglm_la_SOURCES=\
|
|||||||
src/curve.c \
|
src/curve.c \
|
||||||
src/bezier.c \
|
src/bezier.c \
|
||||||
src/ray.c \
|
src/ray.c \
|
||||||
src/affine2d.c
|
src/affine2d.c \
|
||||||
|
src/clipspace/ortho_lh_no.c \
|
||||||
|
src/clipspace/ortho_lh_zo.c \
|
||||||
|
src/clipspace/ortho_rh_no.c \
|
||||||
|
src/clipspace/ortho_rh_zo.c \
|
||||||
|
src/clipspace/persp_lh_no.c \
|
||||||
|
src/clipspace/persp_lh_zo.c \
|
||||||
|
src/clipspace/persp_rh_no.c \
|
||||||
|
src/clipspace/persp_rh_zo.c \
|
||||||
|
src/clipspace/view_lh_no.c \
|
||||||
|
src/clipspace/view_lh_zo.c \
|
||||||
|
src/clipspace/view_rh_no.c \
|
||||||
|
src/clipspace/view_rh_zo.c
|
||||||
|
|
||||||
test_tests_SOURCES=\
|
test_tests_SOURCES=\
|
||||||
test/runner.c \
|
test/runner.c \
|
||||||
test/src/test_common.c \
|
test/src/test_common.c \
|
||||||
test/src/tests.c \
|
test/src/tests.c \
|
||||||
test/src/test_cam.c \
|
test/src/test_cam.c \
|
||||||
|
test/src/test_cam_lh_zo.c \
|
||||||
|
test/src/test_cam_rh_zo.c \
|
||||||
|
test/src/test_cam_lh_no.c \
|
||||||
|
test/src/test_cam_rh_no.c \
|
||||||
test/src/test_clamp.c \
|
test/src/test_clamp.c \
|
||||||
test/src/test_euler.c \
|
test/src/test_euler.c \
|
||||||
test/src/test_bezier.c \
|
test/src/test_bezier.c \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 🎥 OpenGL Mathematics (glm) for `C`
|
# 🎥 OpenGL Mathematics (glm) for `C`
|
||||||
[](https://travis-ci.org/recp/cglm)
|
[](https://travis-ci.com/recp/cglm)
|
||||||
[](https://ci.appveyor.com/project/recp/cglm/branch/master)
|
[](https://ci.appveyor.com/project/recp/cglm/branch/master)
|
||||||
[](http://cglm.readthedocs.io/en/latest/?badge=latest)
|
[](http://cglm.readthedocs.io/en/latest/?badge=latest)
|
||||||
[](https://coveralls.io/github/recp/cglm?branch=master)
|
[](https://coveralls.io/github/recp/cglm?branch=master)
|
||||||
@@ -26,6 +26,7 @@ you have the latest version
|
|||||||
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
||||||
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
||||||
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
||||||
|
- **[major change]** by starting v0.8.3, **cglm** supports alternative clipspace configuations e.g. Left Handed, Zero-to-One (_zo)... `CGLM_FORCE_DEPTH_ZERO_TO_ONE` and `CGLM_FORCE_LEFT_HANDED` is provided to control clipspace. You should be able to use **cglm** with Vulkan, DirectX and Metal now... see https://cglm.readthedocs.io/en/latest/opt.html#clipspace-option-s
|
||||||
|
|
||||||
#### Note for C++ developers:
|
#### Note for C++ developers:
|
||||||
If you are not aware of the original GLM library yet, you may also want to look at:
|
If you are not aware of the original GLM library yet, you may also want to look at:
|
||||||
@@ -69,6 +70,8 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
- **scalar** and **simd** (sse, avx, neon...) optimizations
|
||||||
|
- option to use different clipspaces e.g. Left Handed, Zero-to-One... (currrently right handed negative-one is default)
|
||||||
- array api and struct api, you can use arrays or structs.
|
- array api and struct api, you can use arrays or structs.
|
||||||
- general purpose matrix operations (mat4, mat3)
|
- general purpose matrix operations (mat4, mat3)
|
||||||
- chain matrix multiplication (square only)
|
- chain matrix multiplication (square only)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
Features
|
Features
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
* **scalar** and **simd** (sse, avx, neon...) optimizations
|
||||||
|
* option to use different clipspaces e.g. Left Handed, Zero-to-One... (currrently right handed negative-one is default)
|
||||||
* array api and struct api, you can use arrays or structs.
|
* array api and struct api, you can use arrays or structs.
|
||||||
* general purpose matrix operations (mat4, mat3)
|
* general purpose matrix operations (mat4, mat3)
|
||||||
* chain matrix multiplication (square only)
|
* chain matrix multiplication (square only)
|
||||||
|
|||||||
@@ -35,6 +35,45 @@ have to compile cglm with **CGLM_ALL_UNALIGNED** macro.
|
|||||||
|
|
||||||
For instance if you set CGLM_ALL_UNALIGNED in a project then set it in other projects too
|
For instance if you set CGLM_ALL_UNALIGNED in a project then set it in other projects too
|
||||||
|
|
||||||
|
Clipspace Option[s]
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
By starting **v0.8.3** cglm provides options to switch between clipspace configurations.
|
||||||
|
|
||||||
|
Clipspace related files are located at `include/cglm/[struct]/clipspace.h` but
|
||||||
|
these are included in related files like `cam.h`. If you don't want to change your existing
|
||||||
|
clipspace configuration and want to use different clipspace function like `glm_lookat_zo` or `glm_lookat_lh_zo`...
|
||||||
|
then you can include individual headers or just define `CGLM_CLIPSPACE_INCLUDE_ALL` which will iclude all headers for you.
|
||||||
|
|
||||||
|
1. **CGLM_CLIPSPACE_INCLUDE_ALL**
|
||||||
|
2. **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
||||||
|
3. **CGLM_FORCE_LEFT_HANDED**
|
||||||
|
|
||||||
|
|
||||||
|
1. **CGLM_CLIPSPACE_INCLUDE_ALL**:
|
||||||
|
|
||||||
|
By defining this macro, **cglm** will include all clipspace functions for you by just using
|
||||||
|
`#include cglm/cglm.h` or `#include cglm/struct.h` or `#include cglm/call.h`
|
||||||
|
|
||||||
|
Otherwise you need to include header you want manually e.g. `#include cglm/clipspace/view_rh_zo.h`
|
||||||
|
|
||||||
|
2. **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
||||||
|
|
||||||
|
This is similar to **GLM**'s **GLM_FORCE_DEPTH_ZERO_TO_ONE** option.
|
||||||
|
This will set clip space between 0 to 1 which makes **cglm** Vulkan, Metal friendly.
|
||||||
|
|
||||||
|
You can use functions like `glm_lookat_lh_zo()` individually. By setting **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
||||||
|
functions in cam.h for instance will use `_zo` versions.
|
||||||
|
|
||||||
|
3. **CGLM_FORCE_LEFT_HANDED**
|
||||||
|
|
||||||
|
Force **cglm** to use the left handed coordinate system by default, currently **cglm** uses right handed coordinate system as default,
|
||||||
|
you can change this behavior with this option.
|
||||||
|
|
||||||
|
**VERY VERY IMPORTANT:**
|
||||||
|
|
||||||
|
Be careful if you include **cglm** in multiple projects.
|
||||||
|
|
||||||
SSE and SSE2 Shuffle Option
|
SSE and SSE2 Shuffle Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
**_mm_shuffle_ps** generates **shufps** instruction even if registers are same.
|
**_mm_shuffle_ps** generates **shufps** instruction even if registers are same.
|
||||||
|
|||||||
@@ -15,22 +15,16 @@ extern "C" {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum(float left,
|
glmc_frustum(float left, float right,
|
||||||
float right,
|
float bottom, float top,
|
||||||
float bottom,
|
float nearZ, float farZ,
|
||||||
float top,
|
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho(float left,
|
glmc_ortho(float left, float right,
|
||||||
float right,
|
float bottom, float top,
|
||||||
float bottom,
|
float nearZ, float farZ,
|
||||||
float top,
|
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
@@ -55,11 +49,7 @@ glmc_ortho_default_s(float aspect, float size, mat4 dest);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_perspective(float fovy,
|
glmc_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest);
|
||||||
float aspect,
|
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest);
|
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
@@ -88,8 +78,8 @@ glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest);
|
|||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp(mat4 proj,
|
glmc_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearZ,
|
||||||
float * __restrict farVal,
|
float * __restrict farZ,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom,
|
float * __restrict bottom,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
@@ -114,16 +104,16 @@ glmc_persp_decomp_y(mat4 proj,
|
|||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_z(mat4 proj,
|
glmc_persp_decomp_z(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearZ,
|
||||||
float * __restrict farVal);
|
float * __restrict farZ);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal);
|
glmc_persp_decomp_far(mat4 proj, float * __restrict farZ);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal);
|
glmc_persp_decomp_near(mat4 proj, float * __restrict nearZ);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
|
|||||||
46
include/cglm/call/clipspace/ortho_lh_no.h
Normal file
46
include/cglm/call/clipspace/ortho_lh_no.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ortho_lh_no_h
|
||||||
|
#define cglmc_ortho_lh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_lh_no(vec3 box[2], mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_lh_no(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_lh_no(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_lh_no(float aspect, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_lh_no(float aspect, float size, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ortho_lh_no_h */
|
||||||
46
include/cglm/call/clipspace/ortho_lh_zo.h
Normal file
46
include/cglm/call/clipspace/ortho_lh_zo.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ortho_lh_zo_h
|
||||||
|
#define cglmc_ortho_lh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_lh_zo(vec3 box[2], mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_lh_zo(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_lh_zo(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_lh_zo(float aspect, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_lh_zo(float aspect, float size, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ortho_lh_zo_h */
|
||||||
46
include/cglm/call/clipspace/ortho_rh_no.h
Normal file
46
include/cglm/call/clipspace/ortho_rh_no.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ortho_rh_no_h
|
||||||
|
#define cglmc_ortho_rh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_rh_no(vec3 box[2], mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_rh_no(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_rh_no(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_rh_no(float aspect, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_rh_no(float aspect, float size, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ortho_rh_no_h */
|
||||||
46
include/cglm/call/clipspace/ortho_rh_zo.h
Normal file
46
include/cglm/call/clipspace/ortho_rh_zo.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_ortho_rh_zo_h
|
||||||
|
#define cglmc_ortho_rh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_rh_zo(vec3 box[2], mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_rh_zo(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_rh_zo(vec3 box[2], float padding, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_rh_zo(float aspect, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_rh_zo(float aspect, float size, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_ortho_rh_zo_h */
|
||||||
87
include/cglm/call/clipspace/persp_lh_no.h
Normal file
87
include/cglm/call/clipspace/persp_lh_no.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_persp_lh_no_h
|
||||||
|
#define cglmc_persp_lh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_lh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_lh_no(mat4 proj, float deltaFar);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_lh_no(mat4 proj, float dest[6]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_lh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_lh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_lh_no(mat4 proj, float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_lh_no(mat4 proj, float * __restrict nearZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_lh_no(mat4 proj, float fovy, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_lh_no(mat4 proj);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_lh_no(mat4 proj);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_persp_lh_no_h */
|
||||||
87
include/cglm/call/clipspace/persp_lh_zo.h
Normal file
87
include/cglm/call/clipspace/persp_lh_zo.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_persp_lh_zo_h
|
||||||
|
#define cglmc_persp_lh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_lh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_lh_zo(mat4 proj, float deltaFar);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_lh_zo(mat4 proj, float dest[6]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_lh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_lh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_lh_zo(mat4 proj, float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_lh_zo(mat4 proj, float * __restrict nearZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_lh_zo(mat4 proj, float fovy, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_lh_zo(mat4 proj);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_lh_zo(mat4 proj);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_persp_lh_zo_h */
|
||||||
87
include/cglm/call/clipspace/persp_rh_no.h
Normal file
87
include/cglm/call/clipspace/persp_rh_no.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_persp_rh_no_h
|
||||||
|
#define cglmc_persp_rh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_rh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_rh_no(mat4 proj, float deltaFar);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_rh_no(mat4 proj, float dest[6]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_rh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_rh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_rh_no(mat4 proj, float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_rh_no(mat4 proj, float * __restrict nearZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_rh_no(mat4 proj, float fovy, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_rh_no(mat4 proj);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_rh_no(mat4 proj);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_persp_rh_no_h */
|
||||||
87
include/cglm/call/clipspace/persp_rh_zo.h
Normal file
87
include/cglm/call/clipspace/persp_rh_zo.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_persp_rh_zo_h
|
||||||
|
#define cglmc_persp_rh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_rh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_rh_zo(mat4 proj, float deltaFar);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_rh_zo(mat4 proj, float dest[6]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_rh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_rh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_rh_zo(mat4 proj, float * __restrict farZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_rh_zo(mat4 proj, float * __restrict nearZ);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_rh_zo(mat4 proj, float fovy, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_rh_zo(mat4 proj);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_rh_zo(mat4 proj);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_persp_rh_zo_h */
|
||||||
31
include/cglm/call/clipspace/view_lh_no.h
Normal file
31
include/cglm/call/clipspace/view_lh_no.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_view_lh_no_h
|
||||||
|
#define cglmc_view_lh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_lh_no(vec3 eye, vec3 center, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_lh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_lh_no(vec3 eye, vec3 dir, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_view_lh_no_h */
|
||||||
31
include/cglm/call/clipspace/view_lh_zo.h
Normal file
31
include/cglm/call/clipspace/view_lh_zo.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_view_lh_zo_h
|
||||||
|
#define cglmc_view_lh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_lh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_lh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_lh_zo(vec3 eye, vec3 dir, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_view_lh_zo_h */
|
||||||
31
include/cglm/call/clipspace/view_rh_no.h
Normal file
31
include/cglm/call/clipspace/view_rh_no.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_view_rh_no_h
|
||||||
|
#define cglmc_view_rh_no_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_rh_no(vec3 eye, vec3 center, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_rh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_rh_no(vec3 eye, vec3 dir, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_view_rh_no_h */
|
||||||
31
include/cglm/call/clipspace/view_rh_zo.h
Normal file
31
include/cglm/call/clipspace/view_rh_zo.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_view_rh_zo_h
|
||||||
|
#define cglmc_view_rh_zo_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_rh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_rh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_rh_zo(vec3 eye, vec3 dir, mat4 dest);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_view_rh_zo_h */
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_frustum(float left, float right,
|
CGLM_INLINE void glm_frustum(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal,
|
float nearZ, float farZ,
|
||||||
mat4 dest)
|
mat4 dest)
|
||||||
CGLM_INLINE void glm_ortho(float left, float right,
|
CGLM_INLINE void glm_ortho(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal,
|
float nearZ, float farZ,
|
||||||
mat4 dest)
|
mat4 dest)
|
||||||
CGLM_INLINE void glm_ortho_aabb(vec3 box[2], mat4 dest)
|
CGLM_INLINE void glm_ortho_aabb(vec3 box[2], mat4 dest)
|
||||||
CGLM_INLINE void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest)
|
CGLM_INLINE void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest)
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest)
|
CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest)
|
||||||
CGLM_INLINE void glm_perspective(float fovy,
|
CGLM_INLINE void glm_perspective(float fovy,
|
||||||
float aspect,
|
float aspect,
|
||||||
float nearVal,
|
float nearZ,
|
||||||
float farVal,
|
float farZ,
|
||||||
mat4 dest)
|
mat4 dest)
|
||||||
CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest)
|
CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest)
|
||||||
CGLM_INLINE void glm_perspective_resize(float aspect, mat4 proj)
|
CGLM_INLINE void glm_perspective_resize(float aspect, mat4 proj)
|
||||||
@@ -31,26 +31,61 @@
|
|||||||
CGLM_INLINE void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
CGLM_INLINE void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
CGLM_INLINE void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest)
|
CGLM_INLINE void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest)
|
||||||
CGLM_INLINE void glm_persp_decomp(mat4 proj,
|
CGLM_INLINE void glm_persp_decomp(mat4 proj,
|
||||||
float *nearVal, float *farVal,
|
float *nearZ, float *farZ,
|
||||||
float *top, float *bottom,
|
float *top, float *bottom,
|
||||||
float *left, float *right)
|
float *left, float *right)
|
||||||
CGLM_INLINE void glm_persp_decompv(mat4 proj, float dest[6])
|
CGLM_INLINE void glm_persp_decompv(mat4 proj, float dest[6])
|
||||||
CGLM_INLINE void glm_persp_decomp_x(mat4 proj, float *left, float *right)
|
CGLM_INLINE void glm_persp_decomp_x(mat4 proj, float *left, float *right)
|
||||||
CGLM_INLINE void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
|
CGLM_INLINE void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
|
||||||
CGLM_INLINE void glm_persp_decomp_z(mat4 proj, float *nearv, float *farv)
|
CGLM_INLINE void glm_persp_decomp_z(mat4 proj, float *nearv, float *farv)
|
||||||
CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farVal)
|
CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farZ)
|
||||||
CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearVal)
|
CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearZ)
|
||||||
CGLM_INLINE float glm_persp_fovy(mat4 proj)
|
CGLM_INLINE float glm_persp_fovy(mat4 proj)
|
||||||
CGLM_INLINE float glm_persp_aspect(mat4 proj)
|
CGLM_INLINE float glm_persp_aspect(mat4 proj)
|
||||||
CGLM_INLINE void glm_persp_sizes(mat4 proj, float fovy, vec4 dest)
|
CGLM_INLINE void glm_persp_sizes(mat4 proj, float fovy, vec4 dest)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_vcam_h
|
#ifndef cglm_cam_h
|
||||||
#define cglm_vcam_h
|
#define cglm_cam_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "plane.h"
|
#include "plane.h"
|
||||||
|
|
||||||
|
#include "clipspace/persp.h"
|
||||||
|
|
||||||
|
#ifndef CGLM_CLIPSPACE_INCLUDE_ALL
|
||||||
|
# if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief set up perspective peprojection matrix
|
* @brief set up perspective peprojection matrix
|
||||||
*
|
*
|
||||||
@@ -58,32 +93,25 @@
|
|||||||
* @param[in] right viewport.right
|
* @param[in] right viewport.right
|
||||||
* @param[in] bottom viewport.bottom
|
* @param[in] bottom viewport.bottom
|
||||||
* @param[in] top viewport.top
|
* @param[in] top viewport.top
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping plane
|
* @param[in] farZ far clipping plane
|
||||||
* @param[out] dest result matrix
|
* @param[out] dest result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_frustum(float left, float right,
|
glm_frustum(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal,
|
float nearZ, float farZ,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float rl, tb, fn, nv;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_frustum_lh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
glm_mat4_zero(dest);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_frustum_lh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
rl = 1.0f / (right - left);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
tb = 1.0f / (top - bottom);
|
glm_frustum_rh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
fn =-1.0f / (farVal - nearVal);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
nv = 2.0f * nearVal;
|
glm_frustum_rh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
|
#endif
|
||||||
dest[0][0] = nv * rl;
|
|
||||||
dest[1][1] = nv * tb;
|
|
||||||
dest[2][0] = (right + left) * rl;
|
|
||||||
dest[2][1] = (top + bottom) * tb;
|
|
||||||
dest[2][2] = (farVal + nearVal) * fn;
|
|
||||||
dest[2][3] =-1.0f;
|
|
||||||
dest[3][2] = farVal * nv * fn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -93,31 +121,25 @@ glm_frustum(float left, float right,
|
|||||||
* @param[in] right viewport.right
|
* @param[in] right viewport.right
|
||||||
* @param[in] bottom viewport.bottom
|
* @param[in] bottom viewport.bottom
|
||||||
* @param[in] top viewport.top
|
* @param[in] top viewport.top
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping plane
|
* @param[in] farZ far clipping plane
|
||||||
* @param[out] dest result matrix
|
* @param[out] dest result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho(float left, float right,
|
glm_ortho(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal,
|
float nearZ, float farZ,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float rl, tb, fn;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_ortho_lh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
glm_mat4_zero(dest);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_ortho_lh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
rl = 1.0f / (right - left);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
tb = 1.0f / (top - bottom);
|
glm_ortho_rh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
fn =-1.0f / (farVal - nearVal);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_ortho_rh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
dest[0][0] = 2.0f * rl;
|
#endif
|
||||||
dest[1][1] = 2.0f * tb;
|
|
||||||
dest[2][2] = 2.0f * fn;
|
|
||||||
dest[3][0] =-(right + left) * rl;
|
|
||||||
dest[3][1] =-(top + bottom) * tb;
|
|
||||||
dest[3][2] = (farVal + nearVal) * fn;
|
|
||||||
dest[3][3] = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -131,10 +153,15 @@ glm_ortho(float left, float right,
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb(vec3 box[2], mat4 dest) {
|
glm_ortho_aabb(vec3 box[2], mat4 dest) {
|
||||||
glm_ortho(box[0][0], box[1][0],
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
box[0][1], box[1][1],
|
glm_ortho_aabb_lh_zo(box, dest);
|
||||||
-box[1][2], -box[0][2],
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
dest);
|
glm_ortho_aabb_lh_no(box, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_ortho_aabb_rh_zo(box, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_ortho_aabb_rh_no(box, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -149,10 +176,15 @@ glm_ortho_aabb(vec3 box[2], mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho(box[0][0] - padding, box[1][0] + padding,
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
box[0][1] - padding, box[1][1] + padding,
|
glm_ortho_aabb_p_lh_zo(box, padding, dest);
|
||||||
-(box[1][2] + padding), -(box[0][2] - padding),
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
dest);
|
glm_ortho_aabb_p_lh_no(box, padding, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_ortho_aabb_p_rh_zo(box, padding, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_ortho_aabb_p_rh_no(box, padding, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -167,10 +199,15 @@ glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
||||||
glm_ortho(box[0][0], box[1][0],
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
box[0][1], box[1][1],
|
glm_ortho_aabb_pz_lh_zo(box, padding, dest);
|
||||||
-(box[1][2] + padding), -(box[0][2] - padding),
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
dest);
|
glm_ortho_aabb_pz_lh_no(box, padding, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_ortho_aabb_pz_rh_zo(box, padding, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_ortho_aabb_pz_rh_no(box, padding, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -182,14 +219,15 @@ glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_default(float aspect, mat4 dest) {
|
glm_ortho_default(float aspect, mat4 dest) {
|
||||||
if (aspect >= 1.0f) {
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_ortho(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
glm_ortho_default_lh_zo(aspect, dest);
|
||||||
return;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
}
|
glm_ortho_default_lh_no(aspect, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
aspect = 1.0f / aspect;
|
glm_ortho_default_rh_zo(aspect, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
glm_ortho(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
glm_ortho_default_rh_no(aspect, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -202,24 +240,15 @@ glm_ortho_default(float aspect, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
||||||
if (aspect >= 1.0f) {
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_ortho(-size * aspect,
|
glm_ortho_default_s_lh_zo(aspect, size, dest);
|
||||||
size * aspect,
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
-size,
|
glm_ortho_default_s_lh_no(aspect, size, dest);
|
||||||
size,
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
-size - 100.0f,
|
glm_ortho_default_s_rh_zo(aspect, size, dest);
|
||||||
size + 100.0f,
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
dest);
|
glm_ortho_default_s_rh_no(aspect, size, dest);
|
||||||
return;
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
glm_ortho(-size,
|
|
||||||
size,
|
|
||||||
-size / aspect,
|
|
||||||
size / aspect,
|
|
||||||
-size - 100.0f,
|
|
||||||
size + 100.0f,
|
|
||||||
dest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -227,29 +256,22 @@ glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
|||||||
*
|
*
|
||||||
* @param[in] fovy field of view angle
|
* @param[in] fovy field of view angle
|
||||||
* @param[in] aspect aspect ratio ( width / height )
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping planes
|
* @param[in] farZ far clipping planes
|
||||||
* @param[out] dest result matrix
|
* @param[out] dest result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_perspective(float fovy,
|
glm_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest) {
|
||||||
float aspect,
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
float nearVal,
|
glm_perspective_lh_zo(fovy, aspect, nearZ, farZ, dest);
|
||||||
float farVal,
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
mat4 dest) {
|
glm_perspective_lh_no(fovy, aspect, nearZ, farZ, dest);
|
||||||
float f, fn;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_perspective_rh_zo(fovy, aspect, nearZ, farZ, dest);
|
||||||
glm_mat4_zero(dest);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_perspective_rh_no(fovy, aspect, nearZ, farZ, dest);
|
||||||
f = 1.0f / tanf(fovy * 0.5f);
|
#endif
|
||||||
fn = 1.0f / (nearVal - farVal);
|
|
||||||
|
|
||||||
dest[0][0] = f / aspect;
|
|
||||||
dest[1][1] = f;
|
|
||||||
dest[2][2] = (nearVal + farVal) * fn;
|
|
||||||
dest[2][3] =-1.0f;
|
|
||||||
dest[3][2] = 2.0f * nearVal * farVal * fn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -263,17 +285,15 @@ glm_perspective(float fovy,
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_move_far(mat4 proj, float deltaFar) {
|
glm_persp_move_far(mat4 proj, float deltaFar) {
|
||||||
float fn, farVal, nearVal, p22, p32;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_persp_move_far_lh_zo(proj, deltaFar);
|
||||||
p22 = proj[2][2];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
p32 = proj[3][2];
|
glm_persp_move_far_lh_no(proj, deltaFar);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
nearVal = p32 / (p22 - 1.0f);
|
glm_persp_move_far_rh_zo(proj, deltaFar);
|
||||||
farVal = p32 / (p22 + 1.0f) + deltaFar;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
fn = 1.0f / (nearVal - farVal);
|
glm_persp_move_far_rh_no(proj, deltaFar);
|
||||||
|
#endif
|
||||||
proj[2][2] = (nearVal + farVal) * fn;
|
|
||||||
proj[3][2] = 2.0f * nearVal * farVal * fn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -286,7 +306,15 @@ glm_persp_move_far(mat4 proj, float deltaFar) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_perspective_default(float aspect, mat4 dest) {
|
glm_perspective_default(float aspect, mat4 dest) {
|
||||||
glm_perspective(GLM_PI_4f, aspect, 0.01f, 100.0f, dest);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_perspective_default_lh_zo(aspect, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_perspective_default_lh_no(aspect, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_perspective_default_rh_zo(aspect, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_perspective_default_rh_no(aspect, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -320,28 +348,11 @@ glm_perspective_resize(float aspect, mat4 proj) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 f, u, s;
|
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||||
|
glm_lookat_lh(eye, center, up, dest);
|
||||||
glm_vec3_sub(center, eye, f);
|
#elif CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_RH_BIT
|
||||||
glm_vec3_normalize(f);
|
glm_lookat_rh(eye, center, up, dest);
|
||||||
|
#endif
|
||||||
glm_vec3_crossn(f, up, s);
|
|
||||||
glm_vec3_cross(s, f, u);
|
|
||||||
|
|
||||||
dest[0][0] = s[0];
|
|
||||||
dest[0][1] = u[0];
|
|
||||||
dest[0][2] =-f[0];
|
|
||||||
dest[1][0] = s[1];
|
|
||||||
dest[1][1] = u[1];
|
|
||||||
dest[1][2] =-f[1];
|
|
||||||
dest[2][0] = s[2];
|
|
||||||
dest[2][1] = u[2];
|
|
||||||
dest[2][2] =-f[2];
|
|
||||||
dest[3][0] =-glm_vec3_dot(s, eye);
|
|
||||||
dest[3][1] =-glm_vec3_dot(u, eye);
|
|
||||||
dest[3][2] = glm_vec3_dot(f, eye);
|
|
||||||
dest[0][3] = dest[1][3] = dest[2][3] = 0.0f;
|
|
||||||
dest[3][3] = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -361,9 +372,11 @@ glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 target;
|
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||||
glm_vec3_add(eye, dir, target);
|
glm_look_lh(eye, dir, up, dest);
|
||||||
glm_lookat(eye, target, up, dest);
|
#elif CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_RH_BIT
|
||||||
|
glm_look_rh(eye, dir, up, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -379,17 +392,19 @@ glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
CGLM_ALIGN(8) vec3 up;
|
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||||
glm_vec3_ortho(dir, up);
|
glm_look_anyup_lh(eye, dir, dest);
|
||||||
glm_look(eye, dir, up, dest);
|
#elif CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_RH_BIT
|
||||||
|
glm_look_anyup_rh(eye, dir, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes frustum values of perspective projection.
|
* @brief decomposes frustum values of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
* @param[out] top top
|
* @param[out] top top
|
||||||
* @param[out] bottom bottom
|
* @param[out] bottom bottom
|
||||||
* @param[out] left left
|
* @param[out] left left
|
||||||
@@ -398,31 +413,18 @@ glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp(mat4 proj,
|
glm_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal, float * __restrict farVal,
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
float * __restrict top, float * __restrict bottom,
|
float * __restrict top, float * __restrict bottom,
|
||||||
float * __restrict left, float * __restrict right) {
|
float * __restrict left, float * __restrict right) {
|
||||||
float m00, m11, m20, m21, m22, m32, n, f;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
float n_m11, n_m00;
|
glm_persp_decomp_lh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
m00 = proj[0][0];
|
glm_persp_decomp_lh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
m11 = proj[1][1];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
m20 = proj[2][0];
|
glm_persp_decomp_rh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
m21 = proj[2][1];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
m22 = proj[2][2];
|
glm_persp_decomp_rh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
m32 = proj[3][2];
|
#endif
|
||||||
|
|
||||||
n = m32 / (m22 - 1.0f);
|
|
||||||
f = m32 / (m22 + 1.0f);
|
|
||||||
|
|
||||||
n_m11 = n / m11;
|
|
||||||
n_m00 = n / m00;
|
|
||||||
|
|
||||||
*nearVal = n;
|
|
||||||
*farVal = f;
|
|
||||||
*bottom = n_m11 * (m21 - 1.0f);
|
|
||||||
*top = n_m11 * (m21 + 1.0f);
|
|
||||||
*left = n_m00 * (m20 - 1.0f);
|
|
||||||
*right = n_m00 * (m20 + 1.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -435,8 +437,15 @@ glm_persp_decomp(mat4 proj,
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decompv(mat4 proj, float dest[6]) {
|
glm_persp_decompv(mat4 proj, float dest[6]) {
|
||||||
glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2],
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
&dest[3], &dest[4], &dest[5]);
|
glm_persp_decompv_lh_zo(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_persp_decompv_lh_no(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_persp_decompv_rh_zo(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_persp_decompv_rh_no(proj, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -452,14 +461,15 @@ void
|
|||||||
glm_persp_decomp_x(mat4 proj,
|
glm_persp_decomp_x(mat4 proj,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right) {
|
float * __restrict right) {
|
||||||
float nearVal, m20, m00;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_persp_decomp_x_lh_zo(proj, left, right);
|
||||||
m00 = proj[0][0];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
m20 = proj[2][0];
|
glm_persp_decomp_x_lh_no(proj, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
nearVal = proj[3][2] / (proj[3][3] - 1.0f);
|
glm_persp_decomp_x_rh_zo(proj, left, right);
|
||||||
*left = nearVal * (m20 - 1.0f) / m00;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
*right = nearVal * (m20 + 1.0f) / m00;
|
glm_persp_decomp_x_rh_no(proj, left, right);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -475,14 +485,15 @@ void
|
|||||||
glm_persp_decomp_y(mat4 proj,
|
glm_persp_decomp_y(mat4 proj,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom) {
|
float * __restrict bottom) {
|
||||||
float nearVal, m21, m11;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_persp_decomp_y_lh_zo(proj, top, bottom);
|
||||||
m21 = proj[2][1];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
m11 = proj[1][1];
|
glm_persp_decomp_y_lh_no(proj, top, bottom);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
nearVal = proj[3][2] / (proj[3][3] - 1.0f);
|
glm_persp_decomp_y_rh_zo(proj, top, bottom);
|
||||||
*bottom = nearVal * (m21 - 1) / m11;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
*top = nearVal * (m21 + 1) / m11;
|
glm_persp_decomp_y_rh_no(proj, top, bottom);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -490,70 +501,61 @@ glm_persp_decomp_y(mat4 proj,
|
|||||||
* z stands for z axis (near / far axis)
|
* z stands for z axis (near / far axis)
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_z(mat4 proj,
|
glm_persp_decomp_z(mat4 proj, float * __restrict nearZ, float * __restrict farZ) {
|
||||||
float * __restrict nearVal,
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
float * __restrict farVal) {
|
glm_persp_decomp_z_lh_zo(proj, nearZ, farZ);
|
||||||
float m32, m22;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_persp_decomp_z_lh_no(proj, nearZ, farZ);
|
||||||
m32 = proj[3][2];
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
m22 = proj[2][2];
|
glm_persp_decomp_z_rh_zo(proj, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
*nearVal = m32 / (m22 - 1.0f);
|
glm_persp_decomp_z_rh_no(proj, nearZ, farZ);
|
||||||
*farVal = m32 / (m22 + 1.0f);
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes far value of perspective projection.
|
* @brief decomposes far value of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
glm_persp_decomp_far(mat4 proj, float * __restrict farZ) {
|
||||||
*farVal = proj[3][2] / (proj[2][2] + 1.0f);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_persp_decomp_far_lh_zo(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glm_persp_decomp_far_lh_no(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glm_persp_decomp_far_rh_zo(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glm_persp_decomp_far_rh_no(proj, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes near value of perspective projection.
|
* @brief decomposes near value of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
glm_persp_decomp_near(mat4 proj, float * __restrict nearZ) {
|
||||||
*nearVal = proj[3][2] / (proj[2][2] - 1.0f);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
}
|
glm_persp_decomp_near_lh_zo(proj, nearZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
/*!
|
glm_persp_decomp_near_lh_no(proj, nearZ);
|
||||||
* @brief returns field of view angle along the Y-axis (in radians)
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
*
|
glm_persp_decomp_near_rh_zo(proj, nearZ);
|
||||||
* if you need to degrees, use glm_deg to convert it or use this:
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
glm_persp_decomp_near_rh_no(proj, nearZ);
|
||||||
*
|
#endif
|
||||||
* @param[in] proj perspective projection matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_persp_fovy(mat4 proj) {
|
|
||||||
return 2.0f * atanf(1.0f / proj[1][1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief returns aspect ratio of perspective projection
|
|
||||||
*
|
|
||||||
* @param[in] proj perspective projection matrix
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
float
|
|
||||||
glm_persp_aspect(mat4 proj) {
|
|
||||||
return proj[1][1] / proj[0][0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -566,17 +568,15 @@ glm_persp_aspect(mat4 proj) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_persp_sizes(mat4 proj, float fovy, vec4 dest) {
|
glm_persp_sizes(mat4 proj, float fovy, vec4 dest) {
|
||||||
float t, a, nearVal, farVal;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glm_persp_sizes_lh_zo(proj, fovy, dest);
|
||||||
t = 2.0f * tanf(fovy * 0.5f);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
a = glm_persp_aspect(proj);
|
glm_persp_sizes_lh_no(proj, fovy, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
glm_persp_decomp_z(proj, &nearVal, &farVal);
|
glm_persp_sizes_rh_zo(proj, fovy, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
dest[1] = t * nearVal;
|
glm_persp_sizes_rh_no(proj, fovy, dest);
|
||||||
dest[3] = t * farVal;
|
#endif
|
||||||
dest[0] = a * dest[1];
|
|
||||||
dest[2] = a * dest[3];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* cglm_vcam_h */
|
#endif /* cglm_cam_h */
|
||||||
|
|||||||
182
include/cglm/clipspace/ortho_lh_no.h
Normal file
182
include/cglm/clipspace/ortho_lh_no.h
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_lh_no(vec3 box[2], mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_p_lh_no(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_pz_lh_no(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_lh_no(float aspect,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_s_lh_no(float aspect,
|
||||||
|
float size,
|
||||||
|
mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ortho_lh_no_h
|
||||||
|
#define cglm_ortho_lh_no_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
|
||||||
|
dest[0][0] = 2.0f * rl;
|
||||||
|
dest[1][1] = 2.0f * tb;
|
||||||
|
dest[2][2] =-2.0f * fn;
|
||||||
|
dest[3][0] =-(right + left) * rl;
|
||||||
|
dest[3][1] =-(top + bottom) * tb;
|
||||||
|
dest[3][2] = (farZ + nearZ) * fn;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_lh_no(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_lh_no(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-box[1][2], -box[0][2],
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_p_lh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_lh_no(box[0][0] - padding, box[1][0] + padding,
|
||||||
|
box[0][1] - padding, box[1][1] + padding,
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_pz_lh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_lh_no(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_lh_no(float aspect, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_lh_no(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aspect = 1.0f / aspect;
|
||||||
|
|
||||||
|
glm_ortho_lh_no(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_s_lh_no(float aspect, float size, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_lh_no(-size * aspect,
|
||||||
|
size * aspect,
|
||||||
|
-size,
|
||||||
|
size,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_ortho_lh_no(-size,
|
||||||
|
size,
|
||||||
|
-size / aspect,
|
||||||
|
size / aspect,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_ortho_lh_no_h*/
|
||||||
176
include/cglm/clipspace/ortho_lh_zo.h
Normal file
176
include/cglm/clipspace/ortho_lh_zo.h
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_lh_zo(vec3 box[2], mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_p_lh_zo(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_pz_lh_zo(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_lh_zo(float aspect,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_s_lh_zo(float aspect,
|
||||||
|
float size,
|
||||||
|
mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ortho_lh_zo_h
|
||||||
|
#define cglm_ortho_lh_zo_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with a left-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
|
||||||
|
dest[0][0] = 2.0f * rl;
|
||||||
|
dest[1][1] = 2.0f * tb;
|
||||||
|
dest[2][2] =-fn;
|
||||||
|
dest[3][0] =-(right + left) * rl;
|
||||||
|
dest[3][1] =-(top + bottom) * tb;
|
||||||
|
dest[3][2] = nearZ * fn;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_lh_zo(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_lh_zo(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-box[1][2], -box[0][2],
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_p_lh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_lh_zo(box[0][0] - padding, box[1][0] + padding,
|
||||||
|
box[0][1] - padding, box[1][1] + padding,
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_pz_lh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_lh_zo(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_lh_zo(float aspect, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_lh_zo(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aspect = 1.0f / aspect;
|
||||||
|
|
||||||
|
glm_ortho_lh_zo(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_s_lh_zo(float aspect, float size, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_lh_zo(-size * aspect,
|
||||||
|
size * aspect,
|
||||||
|
-size,
|
||||||
|
size,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_ortho_lh_zo(-size,
|
||||||
|
size,
|
||||||
|
-size / aspect,
|
||||||
|
size / aspect,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_ortho_lh_zo_h*/
|
||||||
182
include/cglm/clipspace/ortho_rh_no.h
Normal file
182
include/cglm/clipspace/ortho_rh_no.h
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_rh_no(vec3 box[2], mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_p_rh_no(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_pz_rh_no(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_rh_no(float aspect,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_s_rh_no(float aspect,
|
||||||
|
float size,
|
||||||
|
mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ortho_rh_no_h
|
||||||
|
#define cglm_ortho_rh_no_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
|
||||||
|
dest[0][0] = 2.0f * rl;
|
||||||
|
dest[1][1] = 2.0f * tb;
|
||||||
|
dest[2][2] = 2.0f * fn;
|
||||||
|
dest[3][0] =-(right + left) * rl;
|
||||||
|
dest[3][1] =-(top + bottom) * tb;
|
||||||
|
dest[3][2] = (farZ + nearZ) * fn;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_rh_no(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_rh_no(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-box[1][2], -box[0][2],
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_p_rh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_rh_no(box[0][0] - padding, box[1][0] + padding,
|
||||||
|
box[0][1] - padding, box[1][1] + padding,
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_pz_rh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_rh_no(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_rh_no(float aspect, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_rh_no(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aspect = 1.0f / aspect;
|
||||||
|
|
||||||
|
glm_ortho_rh_no(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_s_rh_no(float aspect, float size, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_rh_no(-size * aspect,
|
||||||
|
size * aspect,
|
||||||
|
-size,
|
||||||
|
size,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_ortho_rh_no(-size,
|
||||||
|
size,
|
||||||
|
-size / aspect,
|
||||||
|
size / aspect,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_ortho_rh_no_h*/
|
||||||
180
include/cglm/clipspace/ortho_rh_zo.h
Normal file
180
include/cglm/clipspace/ortho_rh_zo.h
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_rh_zo(vec3 box[2], mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_p_rh_zo(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_aabb_pz_rh_zo(vec3 box[2],
|
||||||
|
float padding,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_rh_zo(float aspect,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_ortho_default_s_rh_zo(float aspect,
|
||||||
|
float size,
|
||||||
|
mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_ortho_rh_zo_h
|
||||||
|
#define cglm_ortho_rh_zo_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with a right-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
|
||||||
|
dest[0][0] = 2.0f * rl;
|
||||||
|
dest[1][1] = 2.0f * tb;
|
||||||
|
dest[2][2] = fn;
|
||||||
|
dest[3][0] =-(right + left) * rl;
|
||||||
|
dest[3][1] =-(top + bottom) * tb;
|
||||||
|
dest[3][2] = nearZ * fn;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a clip-space with depth
|
||||||
|
* values from zero to one.
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_rh_zo(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_rh_zo(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-box[1][2], -box[0][2],
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a clip-space with depth
|
||||||
|
* values from zero to one.
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_p_rh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_rh_zo(box[0][0] - padding, box[1][0] + padding,
|
||||||
|
box[0][1] - padding, box[1][1] + padding,
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a clip-space with depth
|
||||||
|
* values from zero to one.
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_aabb_pz_rh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_rh_zo(box[0][0], box[1][0],
|
||||||
|
box[0][1], box[1][1],
|
||||||
|
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix with a right-hand
|
||||||
|
* coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_rh_zo(float aspect, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_rh_zo(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aspect = 1.0f / aspect;
|
||||||
|
|
||||||
|
glm_ortho_rh_zo(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a right-hand coordinate system and a clip-space with depth
|
||||||
|
* values from zero to one.
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ortho_default_s_rh_zo(float aspect, float size, mat4 dest) {
|
||||||
|
if (aspect >= 1.0f) {
|
||||||
|
glm_ortho_rh_zo(-size * aspect,
|
||||||
|
size * aspect,
|
||||||
|
-size,
|
||||||
|
size,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_ortho_rh_zo(-size,
|
||||||
|
size,
|
||||||
|
-size / aspect,
|
||||||
|
size / aspect,
|
||||||
|
-size - 100.0f,
|
||||||
|
size + 100.0f,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_ortho_rh_zo_h*/
|
||||||
48
include/cglm/clipspace/persp.h
Normal file
48
include/cglm/clipspace/persp.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farZ)
|
||||||
|
CGLM_INLINE float glm_persp_fovy(mat4 proj)
|
||||||
|
CGLM_INLINE float glm_persp_aspect(mat4 proj)
|
||||||
|
CGLM_INLINE void glm_persp_sizes(mat4 proj, float fovy, vec4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_persp_h
|
||||||
|
#define cglm_persp_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
#include "../mat4.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_fovy(mat4 proj) {
|
||||||
|
return 2.0f * atanf(1.0f / proj[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_aspect(mat4 proj) {
|
||||||
|
return proj[1][1] / proj[0][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_persp_h */
|
||||||
396
include/cglm/clipspace/persp_lh_no.h
Normal file
396
include/cglm/clipspace/persp_lh_no.h
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_lh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_default_lh_no(float aspect, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_resize_lh_no(float aspect, mat4 proj)
|
||||||
|
CGLM_INLINE void glm_persp_move_far_lh_no(mat4 proj,
|
||||||
|
float deltaFar)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decompv_lh_no(mat4 proj,
|
||||||
|
float dest[6])
|
||||||
|
CGLM_INLINE void glm_persp_decomp_x_lh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_y_lh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_z_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_far_lh_no(mat4 proj, float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_near_lh_no(mat4 proj, float * __restrict nearZ)
|
||||||
|
CGLM_INLINE void glm_persp_sizes_lh_no(mat4 proj, float fovy, vec4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_persp_lh_no_h
|
||||||
|
#define cglm_persp_lh_no_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
#include "persp.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
nv = 2.0f * nearZ;
|
||||||
|
|
||||||
|
dest[0][0] = nv * rl;
|
||||||
|
dest[1][1] = nv * tb;
|
||||||
|
dest[2][0] = (right + left) * rl;
|
||||||
|
dest[2][1] = (top + bottom) * tb;
|
||||||
|
dest[2][2] =-(farZ + nearZ) * fn;
|
||||||
|
dest[2][3] = 1.0f;
|
||||||
|
dest[3][2] = farZ * nv * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_lh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float f, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
dest[0][0] = f / aspect;
|
||||||
|
dest[1][1] = f;
|
||||||
|
dest[2][2] =-(nearZ + farZ) * fn;
|
||||||
|
dest[2][3] = 1.0f;
|
||||||
|
dest[3][2] = 2.0f * nearZ * farZ * fn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_default_lh_no(float aspect, mat4 dest) {
|
||||||
|
glm_perspective_lh_no(GLM_PI_4f, aspect, 0.01f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* resized with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_resize_lh_no(float aspect, mat4 proj) {
|
||||||
|
if (proj[0][0] == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
proj[0][0] = proj[1][1] / aspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_move_far_lh_no(mat4 proj, float deltaFar) {
|
||||||
|
float fn, farZ, nearZ, p22, p32;
|
||||||
|
|
||||||
|
p22 = -proj[2][2];
|
||||||
|
p32 = proj[3][2];
|
||||||
|
|
||||||
|
nearZ = p32 / (p22 - 1.0f);
|
||||||
|
farZ = p32 / (p22 + 1.0f) + deltaFar;
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
proj[2][2] = -(farZ + nearZ) * fn;
|
||||||
|
proj[3][2] = 2.0f * nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
float m00, m11, m20, m21, m22, m32, n, f;
|
||||||
|
float n_m11, n_m00;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m22 =-proj[2][2];
|
||||||
|
m32 = proj[3][2];
|
||||||
|
|
||||||
|
n = m32 / (m22 - 1.0f);
|
||||||
|
f = m32 / (m22 + 1.0f);
|
||||||
|
|
||||||
|
n_m11 = n / m11;
|
||||||
|
n_m00 = n / m00;
|
||||||
|
|
||||||
|
*nearZ = n;
|
||||||
|
*farZ = f;
|
||||||
|
*bottom = n_m11 * (m21 - 1.0f);
|
||||||
|
*top = n_m11 * (m21 + 1.0f);
|
||||||
|
*left = n_m00 * (m20 - 1.0f);
|
||||||
|
*right = n_m00 * (m20 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decompv_lh_no(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decomp_lh_no(proj, &dest[0], &dest[1], &dest[2],
|
||||||
|
&dest[3], &dest[4], &dest[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_x_lh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
float nearZ, m20, m00, m22;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m22 =-proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (m22 - 1.0f);
|
||||||
|
*left = nearZ * (m20 - 1.0f) / m00;
|
||||||
|
*right = nearZ * (m20 + 1.0f) / m00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_y_lh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
float nearZ, m21, m11, m22;
|
||||||
|
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m22 =-proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (m22 - 1.0f);
|
||||||
|
*bottom = nearZ * (m21 - 1.0f) / m11;
|
||||||
|
*top = nearZ * (m21 + 1.0f) / m11;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_z_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
float m32, m22;
|
||||||
|
|
||||||
|
m32 = proj[3][2];
|
||||||
|
m22 =-proj[2][2];
|
||||||
|
|
||||||
|
*nearZ = m32 / (m22 - 1.0f);
|
||||||
|
*farZ = m32 / (m22 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_far_lh_no(mat4 proj, float * __restrict farZ) {
|
||||||
|
*farZ = proj[3][2] / (-proj[2][2] + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_near_lh_no(mat4 proj, float * __restrict nearZ) {
|
||||||
|
*nearZ = proj[3][2] / (-proj[2][2] - 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @param[out] dest sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_sizes_lh_no(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
float t, a, nearZ, farZ;
|
||||||
|
|
||||||
|
t = 2.0f * tanf(fovy * 0.5f);
|
||||||
|
a = glm_persp_aspect(proj);
|
||||||
|
|
||||||
|
glm_persp_decomp_z_lh_no(proj, &nearZ, &farZ);
|
||||||
|
|
||||||
|
dest[1] = t * nearZ;
|
||||||
|
dest[3] = t * farZ;
|
||||||
|
dest[0] = a * dest[1];
|
||||||
|
dest[2] = a * dest[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a left-hand coordinate system and a clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_fovy_lh_no(mat4 proj) {
|
||||||
|
return glm_persp_fovy(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a left-hand coordinate system and a clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_aspect_lh_no(mat4 proj) {
|
||||||
|
return glm_persp_aspect(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_cam_lh_no_h*/
|
||||||
388
include/cglm/clipspace/persp_lh_zo.h
Normal file
388
include/cglm/clipspace/persp_lh_zo.h
Normal file
@@ -0,0 +1,388 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_lh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_default_lh_zo(float aspect, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_resize_lh_zo(float aspect, mat4 proj)
|
||||||
|
CGLM_INLINE void glm_persp_move_far_lh_zo(mat4 proj,
|
||||||
|
float deltaFar)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decompv_lh_zo(mat4 proj,
|
||||||
|
float dest[6])
|
||||||
|
CGLM_INLINE void glm_persp_decomp_x_lh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_y_lh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_z_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_far_lh_zo(mat4 proj, float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_near_lh_zo(mat4 proj, float * __restrict nearZ)
|
||||||
|
CGLM_INLINE void glm_persp_sizes_lh_zo(mat4 proj, float fovy, vec4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_persp_lh_zo_h
|
||||||
|
#define cglm_persp_lh_zo_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
#include "persp.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix with a left-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
nv = 2.0f * nearZ;
|
||||||
|
|
||||||
|
dest[0][0] = nv * rl;
|
||||||
|
dest[1][1] = nv * tb;
|
||||||
|
dest[2][0] = (right + left) * rl;
|
||||||
|
dest[2][1] = (top + bottom) * tb;
|
||||||
|
dest[2][2] =-farZ * fn;
|
||||||
|
dest[2][3] = 1.0f;
|
||||||
|
dest[3][2] = farZ * nearZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with a left-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_lh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float f, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
dest[0][0] = f / aspect;
|
||||||
|
dest[1][1] = f;
|
||||||
|
dest[2][2] =-farZ * fn;
|
||||||
|
dest[2][3] = 1.0f;
|
||||||
|
dest[3][2] = nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance with a
|
||||||
|
* left-hand coordinate system and a clip-space with depth values
|
||||||
|
* from zero to one.
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_move_far_lh_zo(mat4 proj, float deltaFar) {
|
||||||
|
float fn, farZ, nearZ, p22, p32;
|
||||||
|
|
||||||
|
p22 = -proj[2][2];
|
||||||
|
p32 = proj[3][2];
|
||||||
|
|
||||||
|
nearZ = p32 / p22;
|
||||||
|
farZ = p32 / (p22 + 1.0f) + deltaFar;
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
proj[2][2] = -farZ * fn;
|
||||||
|
proj[3][2] = nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_default_lh_zo(float aspect, mat4 dest) {
|
||||||
|
glm_perspective_lh_zo(GLM_PI_4f, aspect, 0.01f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* reized
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_resize_lh_zo(float aspect, mat4 proj) {
|
||||||
|
if (proj[0][0] == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
proj[0][0] = proj[1][1] / aspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
float m00, m11, m20, m21, m22, m32, n, f;
|
||||||
|
float n_m11, n_m00;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m22 =-proj[2][2];
|
||||||
|
m32 = proj[3][2];
|
||||||
|
|
||||||
|
n = m32 / m22;
|
||||||
|
f = m32 / (m22 + 1.0f);
|
||||||
|
|
||||||
|
n_m11 = n / m11;
|
||||||
|
n_m00 = n / m00;
|
||||||
|
|
||||||
|
*nearZ = n;
|
||||||
|
*farZ = f;
|
||||||
|
*bottom = n_m11 * (m21 - 1.0f);
|
||||||
|
*top = n_m11 * (m21 + 1.0f);
|
||||||
|
*left = n_m00 * (m20 - 1.0f);
|
||||||
|
*right = n_m00 * (m20 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decompv_lh_zo(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decomp_lh_zo(proj, &dest[0], &dest[1], &dest[2],
|
||||||
|
&dest[3], &dest[4], &dest[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection (ZO).
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_x_lh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
float nearZ, m20, m00;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (proj[3][3]);
|
||||||
|
*left = nearZ * (m20 - 1.0f) / m00;
|
||||||
|
*right = nearZ * (m20 + 1.0f) / m00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* y stands for y axis (top / bottom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_y_lh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
float nearZ, m21, m11;
|
||||||
|
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (proj[3][3]);
|
||||||
|
*bottom = nearZ * (m21 - 1) / m11;
|
||||||
|
*top = nearZ * (m21 + 1) / m11;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_z_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
float m32, m22;
|
||||||
|
|
||||||
|
m32 = proj[3][2];
|
||||||
|
m22 = -proj[2][2];
|
||||||
|
|
||||||
|
*nearZ = m32 / m22;
|
||||||
|
*farZ = m32 / (m22 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_far_lh_zo(mat4 proj, float * __restrict farZ) {
|
||||||
|
*farZ = proj[3][2] / (-proj[2][2] + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_near_lh_zo(mat4 proj, float * __restrict nearZ) {
|
||||||
|
*nearZ = proj[3][2] / -proj[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @param[out] dest sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_sizes_lh_zo(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
float t, a, nearZ, farZ;
|
||||||
|
|
||||||
|
t = 2.0f * tanf(fovy * 0.5f);
|
||||||
|
a = glm_persp_aspect(proj);
|
||||||
|
|
||||||
|
glm_persp_decomp_z_lh_zo(proj, &nearZ, &farZ);
|
||||||
|
|
||||||
|
dest[1] = t * nearZ;
|
||||||
|
dest[3] = t * farZ;
|
||||||
|
dest[0] = a * dest[1];
|
||||||
|
dest[2] = a * dest[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_fovy_lh_zo(mat4 proj) {
|
||||||
|
return glm_persp_fovy(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a left-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_aspect_lh_zo(mat4 proj) {
|
||||||
|
return glm_persp_aspect(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_persp_lh_zo_h*/
|
||||||
396
include/cglm/clipspace/persp_rh_no.h
Normal file
396
include/cglm/clipspace/persp_rh_no.h
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_rh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_default_rh_no(float aspect, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_resize_rh_no(float aspect, mat4 proj)
|
||||||
|
CGLM_INLINE void glm_persp_move_far_rh_no(mat4 proj,
|
||||||
|
float deltaFar)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decompv_rh_no(mat4 proj,
|
||||||
|
float dest[6])
|
||||||
|
CGLM_INLINE void glm_persp_decomp_x_rh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_y_rh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_z_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_far_rh_no(mat4 proj, float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_near_rh_no(mat4 proj, float * __restrict nearZ)
|
||||||
|
CGLM_INLINE void glm_persp_sizes_rh_no(mat4 proj, float fovy, vec4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_persp_rh_no_h
|
||||||
|
#define cglm_persp_rh_no_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
#include "persp.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
nv = 2.0f * nearZ;
|
||||||
|
|
||||||
|
dest[0][0] = nv * rl;
|
||||||
|
dest[1][1] = nv * tb;
|
||||||
|
dest[2][0] = (right + left) * rl;
|
||||||
|
dest[2][1] = (top + bottom) * tb;
|
||||||
|
dest[2][2] = (farZ + nearZ) * fn;
|
||||||
|
dest[2][3] =-1.0f;
|
||||||
|
dest[3][2] = farZ * nv * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_rh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float f, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
dest[0][0] = f / aspect;
|
||||||
|
dest[1][1] = f;
|
||||||
|
dest[2][2] = (nearZ + farZ) * fn;
|
||||||
|
dest[2][3] =-1.0f;
|
||||||
|
dest[3][2] = 2.0f * nearZ * farZ * fn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_default_rh_no(float aspect, mat4 dest) {
|
||||||
|
glm_perspective_rh_no(GLM_PI_4f, aspect, 0.01f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* resized with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_resize_rh_no(float aspect, mat4 proj) {
|
||||||
|
if (proj[0][0] == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
proj[0][0] = proj[1][1] / aspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_move_far_rh_no(mat4 proj, float deltaFar) {
|
||||||
|
float fn, farZ, nearZ, p22, p32;
|
||||||
|
|
||||||
|
p22 = proj[2][2];
|
||||||
|
p32 = proj[3][2];
|
||||||
|
|
||||||
|
nearZ = p32 / (p22 - 1.0f);
|
||||||
|
farZ = p32 / (p22 + 1.0f) + deltaFar;
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
proj[2][2] = (farZ + nearZ) * fn;
|
||||||
|
proj[3][2] = 2.0f * nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
float m00, m11, m20, m21, m22, m32, n, f;
|
||||||
|
float n_m11, n_m00;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
m32 = proj[3][2];
|
||||||
|
|
||||||
|
n = m32 / (m22 - 1.0f);
|
||||||
|
f = m32 / (m22 + 1.0f);
|
||||||
|
|
||||||
|
n_m11 = n / m11;
|
||||||
|
n_m00 = n / m00;
|
||||||
|
|
||||||
|
*nearZ = n;
|
||||||
|
*farZ = f;
|
||||||
|
*bottom = n_m11 * (m21 - 1.0f);
|
||||||
|
*top = n_m11 * (m21 + 1.0f);
|
||||||
|
*left = n_m00 * (m20 - 1.0f);
|
||||||
|
*right = n_m00 * (m20 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decompv_rh_no(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decomp_rh_no(proj, &dest[0], &dest[1], &dest[2],
|
||||||
|
&dest[3], &dest[4], &dest[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_x_rh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
float nearZ, m20, m00, m22;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (m22 - 1.0f);
|
||||||
|
*left = nearZ * (m20 - 1.0f) / m00;
|
||||||
|
*right = nearZ * (m20 + 1.0f) / m00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_y_rh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
float nearZ, m21, m11, m22;
|
||||||
|
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / (m22 - 1.0f);
|
||||||
|
*bottom = nearZ * (m21 - 1.0f) / m11;
|
||||||
|
*top = nearZ * (m21 + 1.0f) / m11;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_z_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
float m32, m22;
|
||||||
|
|
||||||
|
m32 = proj[3][2];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
*nearZ = m32 / (m22 - 1.0f);
|
||||||
|
*farZ = m32 / (m22 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_far_rh_no(mat4 proj, float * __restrict farZ) {
|
||||||
|
*farZ = proj[3][2] / (proj[2][2] + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_near_rh_no(mat4 proj, float * __restrict nearZ) {
|
||||||
|
*nearZ = proj[3][2] / (proj[2][2] - 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @param[out] dest sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_sizes_rh_no(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
float t, a, nearZ, farZ;
|
||||||
|
|
||||||
|
t = 2.0f * tanf(fovy * 0.5f);
|
||||||
|
a = glm_persp_aspect(proj);
|
||||||
|
|
||||||
|
glm_persp_decomp_z_rh_no(proj, &nearZ, &farZ);
|
||||||
|
|
||||||
|
dest[1] = t * nearZ;
|
||||||
|
dest[3] = t * farZ;
|
||||||
|
dest[0] = a * dest[1];
|
||||||
|
dest[2] = a * dest[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a right-hand coordinate system and a clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_fovy_rh_no(mat4 proj) {
|
||||||
|
return glm_persp_fovy(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a right-hand coordinate system and a clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_aspect_rh_no(mat4 proj) {
|
||||||
|
return glm_persp_aspect(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_cam_rh_no_h*/
|
||||||
390
include/cglm/clipspace/persp_rh_zo.h
Normal file
390
include/cglm/clipspace/persp_rh_zo.h
Normal file
@@ -0,0 +1,390 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_rh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_default_rh_zo(float aspect, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_perspective_resize_rh_zo(float aspect, mat4 proj)
|
||||||
|
CGLM_INLINE void glm_persp_move_far_rh_zo(mat4 proj,
|
||||||
|
float deltaFar)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decompv_rh_zo(mat4 proj,
|
||||||
|
float dest[6])
|
||||||
|
CGLM_INLINE void glm_persp_decomp_x_rh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_y_rh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_z_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_far_rh_zo(mat4 proj, float * __restrict farZ)
|
||||||
|
CGLM_INLINE void glm_persp_decomp_near_rh_zo(mat4 proj, float * __restrict nearZ)
|
||||||
|
CGLM_INLINE void glm_persp_sizes_rh_zo(mat4 proj, float fovy, vec4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_persp_rh_zo_h
|
||||||
|
#define cglm_persp_rh_zo_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
#include "persp.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix with a right-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
rl = 1.0f / (right - left);
|
||||||
|
tb = 1.0f / (top - bottom);
|
||||||
|
fn =-1.0f / (farZ - nearZ);
|
||||||
|
nv = 2.0f * nearZ;
|
||||||
|
|
||||||
|
dest[0][0] = nv * rl;
|
||||||
|
dest[1][1] = nv * tb;
|
||||||
|
dest[2][0] = (right + left) * rl;
|
||||||
|
dest[2][1] = (top + bottom) * tb;
|
||||||
|
dest[2][2] = farZ * fn;
|
||||||
|
dest[2][3] =-1.0f;
|
||||||
|
dest[3][2] = farZ * nearZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with a right-hand coordinate
|
||||||
|
* system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_rh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
float f, fn;
|
||||||
|
|
||||||
|
glm_mat4_zero(dest);
|
||||||
|
|
||||||
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
dest[0][0] = f / aspect;
|
||||||
|
dest[1][1] = f;
|
||||||
|
dest[2][2] = farZ * fn;
|
||||||
|
dest[2][3] =-1.0f;
|
||||||
|
dest[3][2] = nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_default_rh_zo(float aspect, mat4 dest) {
|
||||||
|
glm_perspective_rh_zo(GLM_PI_4f, aspect, 0.01f, 100.0f, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* resized with a right-hand coordinate system and a clip-space of
|
||||||
|
* [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_perspective_resize_rh_zo(float aspect, mat4 proj) {
|
||||||
|
if (proj[0][0] == 0.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
proj[0][0] = proj[1][1] / aspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance with a
|
||||||
|
* right-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_move_far_rh_zo(mat4 proj, float deltaFar) {
|
||||||
|
float fn, farZ, nearZ, p22, p32;
|
||||||
|
|
||||||
|
p22 = proj[2][2];
|
||||||
|
p32 = proj[3][2];
|
||||||
|
|
||||||
|
nearZ = p32 / p22;
|
||||||
|
farZ = p32 / (p22 + 1.0f) + deltaFar;
|
||||||
|
fn = 1.0f / (nearZ - farZ);
|
||||||
|
|
||||||
|
proj[2][2] = farZ * fn;
|
||||||
|
proj[3][2] = nearZ * farZ * fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
float m00, m11, m20, m21, m22, m32, n, f;
|
||||||
|
float n_m11, n_m00;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
m32 = proj[3][2];
|
||||||
|
|
||||||
|
n = m32 / m22;
|
||||||
|
f = m32 / (m22 + 1.0f);
|
||||||
|
|
||||||
|
n_m11 = n / m11;
|
||||||
|
n_m00 = n / m00;
|
||||||
|
|
||||||
|
*nearZ = n;
|
||||||
|
*farZ = f;
|
||||||
|
*bottom = n_m11 * (m21 - 1.0f);
|
||||||
|
*top = n_m11 * (m21 + 1.0f);
|
||||||
|
*left = n_m00 * (m20 - 1.0f);
|
||||||
|
*right = n_m00 * (m20 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decompv_rh_zo(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decomp_rh_zo(proj, &dest[0], &dest[1], &dest[2],
|
||||||
|
&dest[3], &dest[4], &dest[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection (ZO).
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_x_rh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
float nearZ, m20, m00, m22;
|
||||||
|
|
||||||
|
m00 = proj[0][0];
|
||||||
|
m20 = proj[2][0];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / m22;
|
||||||
|
*left = nearZ * (m20 - 1.0f) / m00;
|
||||||
|
*right = nearZ * (m20 + 1.0f) / m00;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* y stands for y axis (top / bottom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_y_rh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
float nearZ, m21, m11, m22;
|
||||||
|
|
||||||
|
m21 = proj[2][1];
|
||||||
|
m11 = proj[1][1];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
nearZ = proj[3][2] / m22;
|
||||||
|
*bottom = nearZ * (m21 - 1) / m11;
|
||||||
|
*top = nearZ * (m21 + 1) / m11;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_z_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
float m32, m22;
|
||||||
|
|
||||||
|
m32 = proj[3][2];
|
||||||
|
m22 = proj[2][2];
|
||||||
|
|
||||||
|
*nearZ = m32 / m22;
|
||||||
|
*farZ = m32 / (m22 + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_far_rh_zo(mat4 proj, float * __restrict farZ) {
|
||||||
|
*farZ = proj[3][2] / (proj[2][2] + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_decomp_near_rh_zo(mat4 proj, float * __restrict nearZ) {
|
||||||
|
*nearZ = proj[3][2] / proj[2][2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @param[out] dest sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_persp_sizes_rh_zo(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
float t, a, nearZ, farZ;
|
||||||
|
|
||||||
|
t = 2.0f * tanf(fovy * 0.5f);
|
||||||
|
a = glm_persp_aspect(proj);
|
||||||
|
|
||||||
|
glm_persp_decomp_z_rh_zo(proj, &nearZ, &farZ);
|
||||||
|
|
||||||
|
dest[1] = t * nearZ;
|
||||||
|
dest[3] = t * farZ;
|
||||||
|
dest[0] = a * dest[1];
|
||||||
|
dest[2] = a * dest[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a right-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_fovy_rh_zo(mat4 proj) {
|
||||||
|
return glm_persp_fovy(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a right-hand coordinate system and a clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_persp_aspect_rh_zo(mat4 proj) {
|
||||||
|
return glm_persp_aspect(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_persp_rh_zo_h*/
|
||||||
99
include/cglm/clipspace/view_lh.h
Normal file
99
include/cglm/clipspace/view_lh.h
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_lh(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_lh(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_lh(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_lh_h
|
||||||
|
#define cglm_view_lh_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix (LH)
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_lh(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 f, u, s;
|
||||||
|
|
||||||
|
glm_vec3_sub(center, eye, f);
|
||||||
|
glm_vec3_normalize(f);
|
||||||
|
|
||||||
|
glm_vec3_crossn(f, up, s);
|
||||||
|
glm_vec3_cross(s, f, u);
|
||||||
|
|
||||||
|
dest[0][0] = s[0];
|
||||||
|
dest[0][1] = u[0];
|
||||||
|
dest[0][2] = f[0];
|
||||||
|
dest[1][0] = s[1];
|
||||||
|
dest[1][1] = u[1];
|
||||||
|
dest[1][2] = f[1];
|
||||||
|
dest[2][0] = s[2];
|
||||||
|
dest[2][1] = u[2];
|
||||||
|
dest[2][2] = f[2];
|
||||||
|
dest[3][0] =-glm_vec3_dot(s, eye);
|
||||||
|
dest[3][1] =-glm_vec3_dot(u, eye);
|
||||||
|
dest[3][2] =-glm_vec3_dot(f, eye);
|
||||||
|
dest[0][3] = dest[1][3] = dest[2][3] = 0.0f;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_lh(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 target;
|
||||||
|
glm_vec3_add(eye, dir, target);
|
||||||
|
glm_lookat_lh(eye, target, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_lh(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 up;
|
||||||
|
glm_vec3_ortho(dir, up);
|
||||||
|
glm_look_lh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_lh_h*/
|
||||||
73
include/cglm/clipspace/view_lh_no.h
Normal file
73
include/cglm/clipspace/view_lh_no.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_lh_no(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_lh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_lh_no(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_lh_no_h
|
||||||
|
#define cglm_view_lh_no_h
|
||||||
|
|
||||||
|
#include "view_lh.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_lh_no(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_lh(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_lh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_lh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_lh_no(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_lh(eye, dir, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_lh_no_h*/
|
||||||
73
include/cglm/clipspace/view_lh_zo.h
Normal file
73
include/cglm/clipspace/view_lh_zo.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_lh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_lh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_lh_zo(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_lh_zo_h
|
||||||
|
#define cglm_view_lh_zo_h
|
||||||
|
|
||||||
|
#include "view_lh.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_lh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_lh(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_lh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_lh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with left handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_lh_zo(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_lh(eye, dir, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_lh_zo_h*/
|
||||||
99
include/cglm/clipspace/view_rh.h
Normal file
99
include/cglm/clipspace/view_rh.h
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_rh(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_rh(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_rh(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_rh_h
|
||||||
|
#define cglm_view_rh_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../plane.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_rh(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 f, u, s;
|
||||||
|
|
||||||
|
glm_vec3_sub(center, eye, f);
|
||||||
|
glm_vec3_normalize(f);
|
||||||
|
|
||||||
|
glm_vec3_crossn(f, up, s);
|
||||||
|
glm_vec3_cross(s, f, u);
|
||||||
|
|
||||||
|
dest[0][0] = s[0];
|
||||||
|
dest[0][1] = u[0];
|
||||||
|
dest[0][2] =-f[0];
|
||||||
|
dest[1][0] = s[1];
|
||||||
|
dest[1][1] = u[1];
|
||||||
|
dest[1][2] =-f[1];
|
||||||
|
dest[2][0] = s[2];
|
||||||
|
dest[2][1] = u[2];
|
||||||
|
dest[2][2] =-f[2];
|
||||||
|
dest[3][0] =-glm_vec3_dot(s, eye);
|
||||||
|
dest[3][1] =-glm_vec3_dot(u, eye);
|
||||||
|
dest[3][2] = glm_vec3_dot(f, eye);
|
||||||
|
dest[0][3] = dest[1][3] = dest[2][3] = 0.0f;
|
||||||
|
dest[3][3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_rh(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 target;
|
||||||
|
glm_vec3_add(eye, dir, target);
|
||||||
|
glm_lookat_rh(eye, target, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_rh(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
CGLM_ALIGN(8) vec3 up;
|
||||||
|
glm_vec3_ortho(dir, up);
|
||||||
|
glm_look_rh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_rh_h*/
|
||||||
73
include/cglm/clipspace/view_rh_no.h
Normal file
73
include/cglm/clipspace/view_rh_no.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_rh_no(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_rh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_rh_no(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_rh_no_h
|
||||||
|
#define cglm_view_rh_no_h
|
||||||
|
|
||||||
|
#include "view_rh.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_rh_no(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_rh(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_rh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_rh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_rh_no(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_rh(eye, dir, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_rh_no_h*/
|
||||||
73
include/cglm/clipspace/view_rh_zo.h
Normal file
73
include/cglm/clipspace/view_rh_zo.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_lookat_rh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_rh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest)
|
||||||
|
CGLM_INLINE void glm_look_anyup_rh_zo(vec3 eye, vec3 dir, mat4 dest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_view_rh_zo_h
|
||||||
|
#define cglm_view_rh_zo_h
|
||||||
|
|
||||||
|
#include "view_rh.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_lookat_rh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_rh(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_rh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_rh(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix with right handed coordinate system.
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_look_anyup_rh_zo(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_rh(eye, dir, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_view_rh_zo_h*/
|
||||||
@@ -50,4 +50,35 @@
|
|||||||
# define GLM_FLT_EPSILON FLT_EPSILON
|
# define GLM_FLT_EPSILON FLT_EPSILON
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clip control: define GLM_FORCE_DEPTH_ZERO_TO_ONE before including
|
||||||
|
* CGLM to use a clip space between 0 to 1.
|
||||||
|
* Coordinate system: define GLM_FORCE_LEFT_HANDED before including
|
||||||
|
* CGLM to use the left handed coordinate system by default.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CGLM_CLIP_CONTROL_ZO_BIT (1 << 0) /* ZERO_TO_ONE */
|
||||||
|
#define CGLM_CLIP_CONTROL_NO_BIT (1 << 1) /* NEGATIVE_ONE_TO_ONE */
|
||||||
|
#define CGLM_CLIP_CONTROL_LH_BIT (1 << 2) /* LEFT_HANDED, For DirectX, Metal, Vulkan */
|
||||||
|
#define CGLM_CLIP_CONTROL_RH_BIT (1 << 3) /* RIGHT_HANDED, For OpenGL, default in GLM */
|
||||||
|
|
||||||
|
#define CGLM_CLIP_CONTROL_LH_ZO (CGLM_CLIP_CONTROL_LH_BIT | CGLM_CLIP_CONTROL_ZO_BIT)
|
||||||
|
#define CGLM_CLIP_CONTROL_LH_NO (CGLM_CLIP_CONTROL_LH_BIT | CGLM_CLIP_CONTROL_NO_BIT)
|
||||||
|
#define CGLM_CLIP_CONTROL_RH_ZO (CGLM_CLIP_CONTROL_RH_BIT | CGLM_CLIP_CONTROL_ZO_BIT)
|
||||||
|
#define CGLM_CLIP_CONTROL_RH_NO (CGLM_CLIP_CONTROL_RH_BIT | CGLM_CLIP_CONTROL_NO_BIT)
|
||||||
|
|
||||||
|
#ifdef CGLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
|
# ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
# define CGLM_CONFIG_CLIP_CONTROL CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
# else
|
||||||
|
# define CGLM_CONFIG_CLIP_CONTROL CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
# define CGLM_CONFIG_CLIP_CONTROL CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
# else
|
||||||
|
# define CGLM_CONFIG_CLIP_CONTROL CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* cglm_common_h */
|
#endif /* cglm_common_h */
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#define cglm_plane_h
|
#define cglm_plane_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "vec3.h"
|
||||||
#include "vec4.h"
|
#include "vec4.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -642,9 +642,12 @@ glm_quat_lerpc(versor from, versor to, float t, versor dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_nlerp(versor from, versor to, float t, versor dest) {
|
glm_quat_nlerp(versor from, versor to, float t, versor dest) {
|
||||||
float dot = glm_vec4_dot(from, to);
|
|
||||||
versor target;
|
versor target;
|
||||||
glm_vec4_scale(to, (dot >= 0) ? 1 : -1, target);
|
float dot;
|
||||||
|
|
||||||
|
dot = glm_vec4_dot(from, to);
|
||||||
|
|
||||||
|
glm_vec4_scale(to, (dot >= 0) ? 1.0f : -1.0f, target);
|
||||||
glm_quat_lerp(from, target, t, dest);
|
glm_quat_lerp(from, target, t, dest);
|
||||||
glm_quat_normalize(dest);
|
glm_quat_normalize(dest);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE mat4s glms_frustum(float left, float right,
|
CGLM_INLINE mat4s glms_frustum(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal)
|
float nearZ, float farZ)
|
||||||
CGLM_INLINE mat4s glms_ortho(float left, float right,
|
CGLM_INLINE mat4s glms_ortho(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal)
|
float nearZ, float farZ)
|
||||||
CGLM_INLINE mat4s glms_ortho_aabb(vec3s box[2]);
|
CGLM_INLINE mat4s glms_ortho_aabb(vec3s box[2]);
|
||||||
CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding);
|
CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding);
|
||||||
CGLM_INLINE mat4s glms_ortho_aabb_pz(vec3s box[2], float padding);
|
CGLM_INLINE mat4s glms_ortho_aabb_pz(vec3s box[2], float padding);
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
CGLM_INLINE mat4s glms_ortho_default_s(float aspect, float size)
|
CGLM_INLINE mat4s glms_ortho_default_s(float aspect, float size)
|
||||||
CGLM_INLINE mat4s glms_perspective(float fovy,
|
CGLM_INLINE mat4s glms_perspective(float fovy,
|
||||||
float aspect,
|
float aspect,
|
||||||
float nearVal,
|
float nearZ,
|
||||||
float farVal)
|
float farZ)
|
||||||
CGLM_INLINE void glms_persp_move_far(mat4s proj, float deltaFar)
|
CGLM_INLINE void glms_persp_move_far(mat4s proj, float deltaFar)
|
||||||
CGLM_INLINE mat4s glms_perspective_default(float aspect)
|
CGLM_INLINE mat4s glms_perspective_default(float aspect)
|
||||||
CGLM_INLINE void glms_perspective_resize(mat4s proj, float aspect)
|
CGLM_INLINE void glms_perspective_resize(mat4s proj, float aspect)
|
||||||
@@ -36,8 +36,8 @@
|
|||||||
CGLM_INLINE void glms_persp_decomp_x(mat4s proj, float *left, float *right)
|
CGLM_INLINE void glms_persp_decomp_x(mat4s proj, float *left, float *right)
|
||||||
CGLM_INLINE void glms_persp_decomp_y(mat4s proj, float *top, float *bottom)
|
CGLM_INLINE void glms_persp_decomp_y(mat4s proj, float *top, float *bottom)
|
||||||
CGLM_INLINE void glms_persp_decomp_z(mat4s proj, float *nearv, float *farv)
|
CGLM_INLINE void glms_persp_decomp_z(mat4s proj, float *nearv, float *farv)
|
||||||
CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farVal)
|
CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farZ)
|
||||||
CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearVal)
|
CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearZ)
|
||||||
CGLM_INLINE float glms_persp_fovy(mat4s proj)
|
CGLM_INLINE float glms_persp_fovy(mat4s proj)
|
||||||
CGLM_INLINE float glms_persp_aspect(mat4s proj)
|
CGLM_INLINE float glms_persp_aspect(mat4s proj)
|
||||||
CGLM_INLINE vec4s glms_persp_sizes(mat4s proj, float fovy)
|
CGLM_INLINE vec4s glms_persp_sizes(mat4s proj, float fovy)
|
||||||
@@ -51,6 +51,39 @@
|
|||||||
#include "../plane.h"
|
#include "../plane.h"
|
||||||
#include "../cam.h"
|
#include "../cam.h"
|
||||||
|
|
||||||
|
#ifndef CGLM_CLIPSPACE_INCLUDE_ALL
|
||||||
|
# if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief set up perspective peprojection matrix
|
* @brief set up perspective peprojection matrix
|
||||||
*
|
*
|
||||||
@@ -58,18 +91,24 @@
|
|||||||
* @param[in] right viewport.right
|
* @param[in] right viewport.right
|
||||||
* @param[in] bottom viewport.bottom
|
* @param[in] bottom viewport.bottom
|
||||||
* @param[in] top viewport.top
|
* @param[in] top viewport.top
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping plane
|
* @param[in] farZ far clipping plane
|
||||||
* @returns result matrix
|
* @returns result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_frustum(float left, float right,
|
glms_frustum(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal) {
|
float nearZ, float farZ) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_frustum(left, right, bottom, top, nearVal, farVal, dest.raw);
|
return glms_frustum_lh_zo(left, right, bottom, top, nearZ, farZ);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_frustum_lh_no(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_frustum_rh_zo(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_frustum_rh_no(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -79,18 +118,24 @@ glms_frustum(float left, float right,
|
|||||||
* @param[in] right viewport.right
|
* @param[in] right viewport.right
|
||||||
* @param[in] bottom viewport.bottom
|
* @param[in] bottom viewport.bottom
|
||||||
* @param[in] top viewport.top
|
* @param[in] top viewport.top
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping plane
|
* @param[in] farZ far clipping plane
|
||||||
* @returns result matrix
|
* @returns result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho(float left, float right,
|
glms_ortho(float left, float right,
|
||||||
float bottom, float top,
|
float bottom, float top,
|
||||||
float nearVal, float farVal) {
|
float nearZ, float farZ) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_ortho(left, right, bottom, top, nearVal, farVal, dest.raw);
|
return glms_ortho_lh_zo(left, right, bottom, top, nearZ, farZ);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_ortho_lh_no(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_rh_zo(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_rh_no(left, right, bottom, top, nearZ, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -104,13 +149,15 @@ glms_ortho(float left, float right,
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho_aabb(vec3s box[2]) {
|
glms_ortho_aabb(vec3s box[2]) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
vec3 rawBox[2];
|
return glms_ortho_aabb_lh_zo(box);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
glms_vec3_unpack(rawBox, box, 2);
|
return glms_ortho_aabb_lh_no(box);
|
||||||
glm_ortho_aabb(rawBox, dest.raw);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_aabb_rh_zo(box);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_aabb_rh_no(box);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -125,13 +172,15 @@ glms_ortho_aabb(vec3s box[2]) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho_aabb_p(vec3s box[2], float padding) {
|
glms_ortho_aabb_p(vec3s box[2], float padding) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
vec3 rawBox[2];
|
return glms_ortho_aabb_p_lh_zo(box, padding);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
glms_vec3_unpack(rawBox, box, 2);
|
return glms_ortho_aabb_p_lh_no(box, padding);
|
||||||
glm_ortho_aabb_p(rawBox, padding, dest.raw);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_aabb_p_rh_zo(box, padding);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_aabb_p_rh_no(box, padding);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -146,13 +195,15 @@ glms_ortho_aabb_p(vec3s box[2], float padding) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho_aabb_pz(vec3s box[2], float padding) {
|
glms_ortho_aabb_pz(vec3s box[2], float padding) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
vec3 rawBox[2];
|
return glms_ortho_aabb_pz_lh_zo(box, padding);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
glms_vec3_unpack(rawBox, box, 2);
|
return glms_ortho_aabb_pz_lh_no(box, padding);
|
||||||
glm_ortho_aabb_pz(rawBox, padding, dest.raw);
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_aabb_pz_rh_zo(box, padding);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_aabb_pz_rh_no(box, padding);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -164,9 +215,15 @@ glms_ortho_aabb_pz(vec3s box[2], float padding) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho_default(float aspect) {
|
glms_ortho_default(float aspect) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_ortho_default(aspect, dest.raw);
|
return glms_ortho_default_lh_zo(aspect);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_ortho_default_lh_no(aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_default_rh_zo(aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_default_rh_no(aspect);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -179,9 +236,15 @@ glms_ortho_default(float aspect) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_ortho_default_s(float aspect, float size) {
|
glms_ortho_default_s(float aspect, float size) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_ortho_default_s(aspect, size, dest.raw);
|
return glms_ortho_default_s_lh_zo(aspect, size);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_ortho_default_s_lh_no(aspect, size);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_ortho_default_s_rh_zo(aspect, size);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_ortho_default_s_rh_no(aspect, size);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -189,30 +252,48 @@ glms_ortho_default_s(float aspect, float size) {
|
|||||||
*
|
*
|
||||||
* @param[in] fovy field of view angle
|
* @param[in] fovy field of view angle
|
||||||
* @param[in] aspect aspect ratio ( width / height )
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
* @param[in] nearVal near clipping plane
|
* @param[in] nearZ near clipping plane
|
||||||
* @param[in] farVal far clipping planes
|
* @param[in] farZ far clipping planes
|
||||||
* @returns result matrix
|
* @returns result matrix
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_perspective(float fovy, float aspect, float nearVal, float farVal) {
|
glms_perspective(float fovy, float aspect, float nearZ, float farZ) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_perspective(fovy, aspect, nearVal, farVal, dest.raw);
|
return glms_perspective_lh_zo(fovy, aspect, nearZ, farZ);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_perspective_lh_no(fovy, aspect, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_perspective_rh_zo(fovy, aspect, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_perspective_rh_no(fovy, aspect, nearZ, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief extend perspective projection matrix's far distance
|
* @brief extend perspective projection matrix's far distance
|
||||||
*
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glm_persp_move_far(prooj.raw, deltaFar) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
* this function does not guarantee far >= near, be aware of that!
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
*
|
*
|
||||||
* @param[in, out] proj projection matrix to extend
|
* @param[in, out] proj projection matrix to extend
|
||||||
* @param[in] deltaFar distance from existing far (negative to shink)
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
mat4s
|
||||||
glms_persp_move_far(mat4s proj, float deltaFar) {
|
glms_persp_move_far(mat4s proj, float deltaFar) {
|
||||||
glm_persp_move_far(proj.raw, deltaFar);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
return glms_persp_move_far_lh_zo(proj, deltaFar);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_persp_move_far_lh_no(proj, deltaFar);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_persp_move_far_rh_zo(proj, deltaFar);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_persp_move_far_rh_no(proj, deltaFar);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -225,9 +306,15 @@ glms_persp_move_far(mat4s proj, float deltaFar) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_perspective_default(float aspect) {
|
glms_perspective_default(float aspect) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_perspective_default(aspect, dest.raw);
|
return glms_perspective_default_lh_zo(aspect);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_perspective_default_lh_no(aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_perspective_default_rh_zo(aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_perspective_default_rh_no(aspect);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -235,13 +322,25 @@ glms_perspective_default(float aspect) {
|
|||||||
* this makes very easy to resize proj matrix when window /viewport
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
* reized
|
* reized
|
||||||
*
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_perspective_resize(proj.raw, aspect) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
* @param[in, out] proj perspective projection matrix
|
* @param[in, out] proj perspective projection matrix
|
||||||
* @param[in] aspect aspect ratio ( width / height )
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
mat4s
|
||||||
glms_perspective_resize(mat4s proj, float aspect) {
|
glms_perspective_resize(mat4s proj, float aspect) {
|
||||||
glm_perspective_resize(aspect, proj.raw);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
return glms_perspective_resize_lh_zo(proj, aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_perspective_resize_lh_no(proj, aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_perspective_resize_rh_zo(proj, aspect);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_perspective_resize_rh_no(proj, aspect);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -258,9 +357,15 @@ glms_perspective_resize(mat4s proj, float aspect) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_lookat(vec3s eye, vec3s center, vec3s up) {
|
glms_lookat(vec3s eye, vec3s center, vec3s up) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_lookat(eye.raw, center.raw, up.raw, dest.raw);
|
return glms_lookat_lh_zo(eye, center, up);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_lookat_lh_no(eye, center, up);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_lookat_rh_zo(eye, center, up);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_lookat_rh_no(eye, center, up);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -280,9 +385,15 @@ glms_lookat(vec3s eye, vec3s center, vec3s up) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_look(vec3s eye, vec3s dir, vec3s up) {
|
glms_look(vec3s eye, vec3s dir, vec3s up) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_look(eye.raw, dir.raw, up.raw, dest.raw);
|
return glms_look_lh_zo(eye, dir, up);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_look_lh_no(eye, dir, up);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_look_rh_zo(eye, dir, up);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_look_rh_no(eye, dir, up);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -298,17 +409,23 @@ glms_look(vec3s eye, vec3s dir, vec3s up) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
glms_look_anyup(vec3s eye, vec3s dir) {
|
glms_look_anyup(vec3s eye, vec3s dir) {
|
||||||
mat4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_look_anyup(eye.raw, dir.raw, dest.raw);
|
return glms_look_anyup_lh_zo(eye, dir);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_look_anyup_lh_no(eye, dir);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_look_anyup_rh_zo(eye, dir);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_look_anyup_rh_no(eye, dir);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes frustum values of perspective projection.
|
* @brief decomposes frustum values of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
* @param[out] top top
|
* @param[out] top top
|
||||||
* @param[out] bottom bottom
|
* @param[out] bottom bottom
|
||||||
* @param[out] left left
|
* @param[out] left left
|
||||||
@@ -317,10 +434,18 @@ glms_look_anyup(vec3s eye, vec3s dir) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glms_persp_decomp(mat4s proj,
|
glms_persp_decomp(mat4s proj,
|
||||||
float * __restrict nearVal, float * __restrict farVal,
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
float * __restrict top, float * __restrict bottom,
|
float * __restrict top, float * __restrict bottom,
|
||||||
float * __restrict left, float * __restrict right) {
|
float * __restrict left, float * __restrict right) {
|
||||||
glm_persp_decomp(proj.raw, nearVal, farVal, top, bottom, left, right);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_lh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_lh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_rh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_rh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -333,7 +458,15 @@ glms_persp_decomp(mat4s proj,
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glms_persp_decompv(mat4s proj, float dest[6]) {
|
glms_persp_decompv(mat4s proj, float dest[6]) {
|
||||||
glm_persp_decompv(proj.raw, dest);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decompv_lh_zo(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decompv_lh_no(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decompv_rh_zo(proj, dest);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decompv_rh_no(proj, dest);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -349,7 +482,15 @@ void
|
|||||||
glms_persp_decomp_x(mat4s proj,
|
glms_persp_decomp_x(mat4s proj,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right) {
|
float * __restrict right) {
|
||||||
glm_persp_decomp_x(proj.raw, left, right);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_x_lh_zo(proj, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_x_lh_no(proj, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_x_rh_zo(proj, left, right);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_x_rh_no(proj, left, right);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -365,7 +506,15 @@ void
|
|||||||
glms_persp_decomp_y(mat4s proj,
|
glms_persp_decomp_y(mat4s proj,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom) {
|
float * __restrict bottom) {
|
||||||
glm_persp_decomp_y(proj.raw, top, bottom);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_y_lh_zo(proj, top, bottom);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_y_lh_no(proj, top, bottom);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_y_rh_zo(proj, top, bottom);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_y_rh_no(proj, top, bottom);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -373,39 +522,63 @@ glms_persp_decomp_y(mat4s proj,
|
|||||||
* z stands for z axis (near / far axis)
|
* z stands for z axis (near / far axis)
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glms_persp_decomp_z(mat4s proj,
|
glms_persp_decomp_z(mat4s proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearZ,
|
||||||
float * __restrict farVal) {
|
float * __restrict farZ) {
|
||||||
glm_persp_decomp_z(proj.raw, nearVal, farVal);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_z_lh_zo(proj, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_z_lh_no(proj, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_z_rh_zo(proj, nearZ, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_z_rh_no(proj, nearZ, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes far value of perspective projection.
|
* @brief decomposes far value of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] farVal far
|
* @param[out] farZ far
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glms_persp_decomp_far(mat4s proj, float * __restrict farVal) {
|
glms_persp_decomp_far(mat4s proj, float * __restrict farZ) {
|
||||||
glm_persp_decomp_far(proj.raw, farVal);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_far_lh_zo(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_far_lh_no(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_far_rh_zo(proj, farZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_far_rh_no(proj, farZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes near value of perspective projection.
|
* @brief decomposes near value of perspective projection.
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] nearVal near
|
* @param[out] nearZ near
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) {
|
glms_persp_decomp_near(mat4s proj, float * __restrict nearZ) {
|
||||||
glm_persp_decomp_near(proj.raw, nearVal);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
glms_persp_decomp_near_lh_zo(proj, nearZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
glms_persp_decomp_near_lh_no(proj, nearZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
glms_persp_decomp_near_rh_zo(proj, nearZ);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
glms_persp_decomp_near_rh_no(proj, nearZ);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -419,7 +592,15 @@ glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glms_persp_fovy(mat4s proj) {
|
glms_persp_fovy(mat4s proj) {
|
||||||
return glm_persp_fovy(proj.raw);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
return glms_persp_fovy_lh_zo(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_persp_fovy_lh_no(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_persp_fovy_rh_zo(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_persp_fovy_rh_no(proj);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -430,7 +611,15 @@ glms_persp_fovy(mat4s proj) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glms_persp_aspect(mat4s proj) {
|
glms_persp_aspect(mat4s proj) {
|
||||||
return glm_persp_aspect(proj.raw);
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
return glms_persp_aspect_lh_zo(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_persp_aspect_lh_no(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_persp_aspect_rh_zo(proj);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_persp_aspect_rh_no(proj);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -443,9 +632,15 @@ glms_persp_aspect(mat4s proj) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
vec4s
|
vec4s
|
||||||
glms_persp_sizes(mat4s proj, float fovy) {
|
glms_persp_sizes(mat4s proj, float fovy) {
|
||||||
vec4s dest;
|
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
glm_persp_sizes(proj.raw, fovy, dest.raw);
|
return glms_persp_sizes_lh_zo(proj, fovy);
|
||||||
return dest;
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
return glms_persp_sizes_lh_no(proj, fovy);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
return glms_persp_sizes_rh_zo(proj, fovy);
|
||||||
|
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
return glms_persp_sizes_rh_no(proj, fovy);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* cglms_cam_h */
|
#endif /* cglms_cam_h */
|
||||||
|
|||||||
152
include/cglm/struct/clipspace/ortho_lh_no.h
Normal file
152
include/cglm/struct/clipspace/ortho_lh_no.h
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_lh_no(vec3s box[2]);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_p_lh_no(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_pz_lh_no(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_lh_no(float aspect)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_s_lh_no(float aspect, float size)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_ortho_lh_no_h
|
||||||
|
#define cglms_ortho_lh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_lh_no(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_lh_no(vec3s box[2]) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_lh_no(rawBox, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_p_lh_no(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_p_lh_no(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_pz_lh_no(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_pz_lh_no(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_lh_no(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_lh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_s_lh_no(float aspect, float size) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_s_lh_no(aspect, size, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_ortho_lh_no_h */
|
||||||
152
include/cglm/struct/clipspace/ortho_lh_zo.h
Normal file
152
include/cglm/struct/clipspace/ortho_lh_zo.h
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_lh_zo(vec3s box[2]);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_p_lh_zo(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_pz_lh_zo(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_lh_zo(float aspect)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_s_lh_zo(float aspect, float size)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_ortho_lh_zo_h
|
||||||
|
#define cglms_ortho_lh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_lh_zo(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_lh_zo(vec3s box[2]) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_lh_zo(rawBox, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_p_lh_zo(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_p_lh_zo(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_pz_lh_zo(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_pz_lh_zo(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_lh_zo(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_lh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_s_lh_zo(float aspect, float size) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_s_lh_zo(aspect, size, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_ortho_lh_zo_h */
|
||||||
152
include/cglm/struct/clipspace/ortho_rh_no.h
Normal file
152
include/cglm/struct/clipspace/ortho_rh_no.h
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_rh_no(vec3s box[2]);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_p_rh_no(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_pz_rh_no(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_rh_no(float aspect)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_s_rh_no(float aspect, float size)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_ortho_rh_no_h
|
||||||
|
#define cglms_ortho_rh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_rh_no(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_rh_no(vec3s box[2]) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_rh_no(rawBox, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_p_rh_no(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_p_rh_no(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_pz_rh_no(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_pz_rh_no(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_rh_no(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_rh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_s_rh_no(float aspect, float size) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_s_rh_no(aspect, size, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_ortho_rh_no_h */
|
||||||
152
include/cglm/struct/clipspace/ortho_rh_zo.h
Normal file
152
include/cglm/struct/clipspace/ortho_rh_zo.h
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_rh_zo(vec3s box[2]);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_p_rh_zo(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_aabb_pz_rh_zo(vec3s box[2], float padding);
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_rh_zo(float aspect)
|
||||||
|
CGLM_INLINE mat4s glms_ortho_default_s_rh_zo(float aspect, float size)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_ortho_rh_zo_h
|
||||||
|
#define cglms_ortho_rh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_rh_zo(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_rh_zo(vec3s box[2]) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_rh_zo(rawBox, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_p_rh_zo(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_p_rh_zo(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix using bounding box
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* bounding box (AABB) must be in view space
|
||||||
|
*
|
||||||
|
* @param[in] box AABB
|
||||||
|
* @param[in] padding padding for near and far
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_aabb_pz_rh_zo(vec3s box[2], float padding) {
|
||||||
|
mat4s dest;
|
||||||
|
vec3 rawBox[2];
|
||||||
|
|
||||||
|
glms_vec3_unpack(rawBox, box, 2);
|
||||||
|
glm_ortho_aabb_pz_rh_zo(rawBox, padding, dest.raw);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up unit orthographic projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ration ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_rh_zo(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_rh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up orthographic projection matrix with given CUBE size
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] size cube size
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_ortho_default_s_rh_zo(float aspect, float size) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_ortho_default_s_rh_zo(aspect, size, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_ortho_rh_zo_h */
|
||||||
311
include/cglm/struct/clipspace/persp_lh_no.h
Normal file
311
include/cglm/struct/clipspace/persp_lh_no.h
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_lh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ)
|
||||||
|
CGLM_INLINE void glms_persp_move_far_lh_no(mat4s proj, float deltaFar)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_default_lh_no(float aspect)
|
||||||
|
CGLM_INLINE void glms_perspective_resize_lh_no(mat4s proj, float aspect)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_lh_no(mat4s proj,
|
||||||
|
float *nearv, float *farv,
|
||||||
|
float *top, float *bottom,
|
||||||
|
float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decompv_lh_no(mat4s proj, float dest[6])
|
||||||
|
CGLM_INLINE void glms_persp_decomp_x_lh_no(mat4s proj, float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_y_lh_no(mat4s proj, float *top, float *bottom)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_z_lh_no(mat4s proj, float *nearv, float *farv)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_far_lh_no(mat4s proj, float *farZ)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_near_lh_no(mat4s proj, float *nearZ)
|
||||||
|
CGLM_INLINE float glms_persp_fovy_lh_no(mat4s proj)
|
||||||
|
CGLM_INLINE float glms_persp_aspect_lh_no(mat4s proj)
|
||||||
|
CGLM_INLINE vec4s glms_persp_sizes_lh_no(mat4s proj, float fovy)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_persp_lh_no_h
|
||||||
|
#define cglms_persp_lh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_frustum_lh_no(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_lh_no(float fovy, float aspect, float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_lh_no(fovy, aspect, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_persp_move_far_lh_no(prooj.raw, deltaFar) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_persp_move_far_lh_no(mat4s proj, float deltaFar) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_persp_move_far_lh_no(dest.raw, deltaFar);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_default_lh_no(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_default_lh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* reized with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glm_perspective_resize_lh_no(proj.raw, aspect) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_resize_lh_no(mat4s proj, float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_perspective_resize_lh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_lh_no(mat4s proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_lh_no(proj.raw, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decompv_lh_no(mat4s proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_lh_no(proj.raw, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_x_lh_no(mat4s proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_lh_no(proj.raw, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_y_lh_no(mat4s proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_lh_no(proj.raw, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_z_lh_no(mat4s proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_lh_no(proj.raw, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_far_lh_no(mat4s proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_lh_no(proj.raw, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_near_lh_no(mat4s proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_lh_no(proj.raw, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_fovy_lh_no(mat4s proj) {
|
||||||
|
return glm_persp_fovy_lh_no(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_aspect_lh_no(mat4s proj) {
|
||||||
|
return glm_persp_aspect_lh_no(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec4s
|
||||||
|
glms_persp_sizes_lh_no(mat4s proj, float fovy) {
|
||||||
|
vec4s dest;
|
||||||
|
glm_persp_sizes_lh_no(proj.raw, fovy, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_persp_lh_no_h */
|
||||||
311
include/cglm/struct/clipspace/persp_lh_zo.h
Normal file
311
include/cglm/struct/clipspace/persp_lh_zo.h
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_lh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ)
|
||||||
|
CGLM_INLINE void glms_persp_move_far_lh_zo(mat4s proj, float deltaFar)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_default_lh_zo(float aspect)
|
||||||
|
CGLM_INLINE void glms_perspective_resize_lh_zo(mat4s proj, float aspect)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_lh_zo(mat4s proj,
|
||||||
|
float *nearv, float *farv,
|
||||||
|
float *top, float *bottom,
|
||||||
|
float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decompv_lh_zo(mat4s proj, float dest[6])
|
||||||
|
CGLM_INLINE void glms_persp_decomp_x_lh_zo(mat4s proj, float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_y_lh_zo(mat4s proj, float *top, float *bottom)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_z_lh_zo(mat4s proj, float *nearv, float *farv)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_far_lh_zo(mat4s proj, float *farZ)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_near_lh_zo(mat4s proj, float *nearZ)
|
||||||
|
CGLM_INLINE float glms_persp_fovy_lh_zo(mat4s proj)
|
||||||
|
CGLM_INLINE float glms_persp_aspect_lh_zo(mat4s proj)
|
||||||
|
CGLM_INLINE vec4s glms_persp_sizes_lh_zo(mat4s proj, float fovy)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_persp_lh_zo_h
|
||||||
|
#define cglms_persp_lh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_frustum_lh_zo(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_lh_zo(float fovy, float aspect, float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_lh_zo(fovy, aspect, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_persp_move_far_lh_zo(prooj.raw, deltaFar) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_persp_move_far_lh_zo(mat4s proj, float deltaFar) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_persp_move_far_lh_zo(dest.raw, deltaFar);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_default_lh_zo(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_default_lh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* reized with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_perspective_resize_lh_zo(proj.raw, aspect) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_resize_lh_zo(mat4s proj, float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_perspective_resize_lh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_lh_zo(mat4s proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_lh_zo(proj.raw, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decompv_lh_zo(mat4s proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_lh_zo(proj.raw, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_x_lh_zo(mat4s proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_lh_zo(proj.raw, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_y_lh_zo(mat4s proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_lh_zo(proj.raw, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_z_lh_zo(mat4s proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_lh_zo(proj.raw, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_far_lh_zo(mat4s proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_lh_zo(proj.raw, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_near_lh_zo(mat4s proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_lh_zo(proj.raw, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_fovy_lh_zo(mat4s proj) {
|
||||||
|
return glm_persp_fovy_lh_zo(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_aspect_lh_zo(mat4s proj) {
|
||||||
|
return glm_persp_aspect_lh_zo(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec4s
|
||||||
|
glms_persp_sizes_lh_zo(mat4s proj, float fovy) {
|
||||||
|
vec4s dest;
|
||||||
|
glm_persp_sizes_lh_zo(proj.raw, fovy, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_persp_lh_zo_h */
|
||||||
311
include/cglm/struct/clipspace/persp_rh_no.h
Normal file
311
include/cglm/struct/clipspace/persp_rh_no.h
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_rh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ)
|
||||||
|
CGLM_INLINE void glms_persp_move_far_rh_no(mat4s proj, float deltaFar)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_default_rh_no(float aspect)
|
||||||
|
CGLM_INLINE void glms_perspective_resize_rh_no(mat4s proj, float aspect)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_rh_no(mat4s proj,
|
||||||
|
float *nearv, float *farv,
|
||||||
|
float *top, float *bottom,
|
||||||
|
float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decompv_rh_no(mat4s proj, float dest[6])
|
||||||
|
CGLM_INLINE void glms_persp_decomp_x_rh_no(mat4s proj, float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_y_rh_no(mat4s proj, float *top, float *bottom)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_z_rh_no(mat4s proj, float *nearv, float *farv)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_far_rh_no(mat4s proj, float *farZ)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_near_rh_no(mat4s proj, float *nearZ)
|
||||||
|
CGLM_INLINE float glms_persp_fovy_rh_no(mat4s proj)
|
||||||
|
CGLM_INLINE float glms_persp_aspect_rh_no(mat4s proj)
|
||||||
|
CGLM_INLINE vec4s glms_persp_sizes_rh_no(mat4s proj, float fovy)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_persp_rh_no_h
|
||||||
|
#define cglms_persp_rh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_frustum_rh_no(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_rh_no(float fovy, float aspect, float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_rh_no(fovy, aspect, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_persp_move_far_rh_no(prooj.raw, deltaFar) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
* s
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_persp_move_far_rh_no(mat4s proj, float deltaFar) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_persp_move_far_rh_no(dest.raw, deltaFar);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_default_rh_no(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_default_rh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* reized with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glm_perspective_resize_rh_no(proj.raw, aspect) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_resize_rh_no(mat4s proj, float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_perspective_resize_rh_no(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_rh_no(mat4s proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_rh_no(proj.raw, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decompv_rh_no(mat4s proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_rh_no(proj.raw, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_x_rh_no(mat4s proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_rh_no(proj.raw, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_y_rh_no(mat4s proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_rh_no(proj.raw, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_z_rh_no(mat4s proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_rh_no(proj.raw, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_far_rh_no(mat4s proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_rh_no(proj.raw, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_near_rh_no(mat4s proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_rh_no(proj.raw, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_fovy_rh_no(mat4s proj) {
|
||||||
|
return glm_persp_fovy_rh_no(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_aspect_rh_no(mat4s proj) {
|
||||||
|
return glm_persp_aspect_rh_no(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec4s
|
||||||
|
glms_persp_sizes_rh_no(mat4s proj, float fovy) {
|
||||||
|
vec4s dest;
|
||||||
|
glm_persp_sizes_rh_no(proj.raw, fovy, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_persp_rh_no_h */
|
||||||
311
include/cglm/struct/clipspace/persp_rh_zo.h
Normal file
311
include/cglm/struct/clipspace/persp_rh_zo.h
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_rh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearZ,
|
||||||
|
float farZ)
|
||||||
|
CGLM_INLINE void glms_persp_move_far_rh_zo(mat4s proj, float deltaFar)
|
||||||
|
CGLM_INLINE mat4s glms_perspective_default_rh_zo(float aspect)
|
||||||
|
CGLM_INLINE void glms_perspective_resize_rh_zo(mat4s proj, float aspect)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_rh_zo(mat4s proj,
|
||||||
|
float *nearv, float *farv,
|
||||||
|
float *top, float *bottom,
|
||||||
|
float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decompv_rh_zo(mat4s proj, float dest[6])
|
||||||
|
CGLM_INLINE void glms_persp_decomp_x_rh_zo(mat4s proj, float *left, float *right)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_y_rh_zo(mat4s proj, float *top, float *bottom)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_z_rh_zo(mat4s proj, float *nearv, float *farv)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_far_rh_zo(mat4s proj, float *farZ)
|
||||||
|
CGLM_INLINE void glms_persp_decomp_near_rh_zo(mat4s proj, float *nearZ)
|
||||||
|
CGLM_INLINE float glms_persp_fovy_rh_zo(mat4s proj)
|
||||||
|
CGLM_INLINE float glms_persp_aspect_rh_zo(mat4s proj)
|
||||||
|
CGLM_INLINE vec4s glms_persp_sizes_rh_zo(mat4s proj, float fovy)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_persp_rh_zo_h
|
||||||
|
#define cglms_persp_rh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective peprojection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] left viewport.left
|
||||||
|
* @param[in] right viewport.right
|
||||||
|
* @param[in] bottom viewport.bottom
|
||||||
|
* @param[in] top viewport.top
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping plane
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_frustum_rh_zo(left, right, bottom, top, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] fovy field of view angle
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @param[in] nearZ near clipping plane
|
||||||
|
* @param[in] farZ far clipping planes
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_rh_zo(float fovy, float aspect, float nearZ, float farZ) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_rh_zo(fovy, aspect, nearZ, farZ, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extend perspective projection matrix's far distance
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glms_persp_move_far_rh_zo(prooj.raw, deltaFar) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* this function does not guarantee far >= near, be aware of that!
|
||||||
|
*
|
||||||
|
* @param[in, out] proj projection matrix to extend
|
||||||
|
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_persp_move_far_rh_zo(mat4s proj, float deltaFar) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_persp_move_far_rh_zo(dest.raw, deltaFar);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up perspective projection matrix with default near/far
|
||||||
|
* and angle values with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_default_rh_zo(float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_perspective_default_rh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief resize perspective matrix by aspect ratio ( width / height )
|
||||||
|
* this makes very easy to resize proj matrix when window /viewport
|
||||||
|
* reized with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: if you dodn't want to create new matrix then use array api on struct.raw
|
||||||
|
* like glm_perspective_resize_rh_zo(proj.raw, aspect) to avoid create new mat4
|
||||||
|
* each time
|
||||||
|
*
|
||||||
|
* @param[in, out] proj perspective projection matrix
|
||||||
|
* @param[in] aspect aspect ratio ( width / height )
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_perspective_resize_rh_zo(mat4s proj, float aspect) {
|
||||||
|
mat4s dest;
|
||||||
|
dest = proj;
|
||||||
|
glm_perspective_resize_rh_zo(aspect, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_rh_zo(mat4s proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_rh_zo(proj.raw, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes frustum values of perspective projection.
|
||||||
|
* this makes easy to get all values at once
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] dest array
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decompv_rh_zo(mat4s proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_rh_zo(proj.raw, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes left and right values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* x stands for x axis (left / right axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] left left
|
||||||
|
* @param[out] right right
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_x_rh_zo(mat4s proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_rh_zo(proj.raw, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* y stands for y axis (top / botom axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] top top
|
||||||
|
* @param[out] bottom bottom
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_y_rh_zo(mat4s proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_rh_zo(proj.raw, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near and far values of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
* z stands for z axis (near / far axis)
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_z_rh_zo(mat4s proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_rh_zo(proj.raw, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes far value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] farZ far
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_far_rh_zo(mat4s proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_rh_zo(proj.raw, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief decomposes near value of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[out] nearZ near
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glms_persp_decomp_near_rh_zo(mat4s proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_rh_zo(proj.raw, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns field of view angle along the Y-axis (in radians)
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* if you need to degrees, use glm_deg to convert it or use this:
|
||||||
|
* fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_fovy_rh_zo(mat4s proj) {
|
||||||
|
return glm_persp_fovy_rh_zo(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns aspect ratio of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glms_persp_aspect_rh_zo(mat4s proj) {
|
||||||
|
return glm_persp_aspect_rh_zo(proj.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns sizes of near and far planes of perspective projection
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* @param[in] proj perspective projection matrix
|
||||||
|
* @param[in] fovy fovy (see brief)
|
||||||
|
* @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec4s
|
||||||
|
glms_persp_sizes_rh_zo(mat4s proj, float fovy) {
|
||||||
|
vec4s dest;
|
||||||
|
glm_persp_sizes_rh_zo(proj.raw, fovy, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_persp_rh_zo_h */
|
||||||
88
include/cglm/struct/clipspace/view_lh_no.h
Normal file
88
include/cglm/struct/clipspace/view_lh_no.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_lookat_lh_no(vec3s eye, vec3s center, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_lh_no(vec3s eye, vec3s dir, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_anyup_lh_no(vec3s eye, vec3s dir)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_view_lh_no_h
|
||||||
|
#define cglms_view_lh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_lookat_lh_no(vec3s eye, vec3s center, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_lookat_lh_no(eye.raw, center.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_lh_no(vec3s eye, vec3s dir, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_lh_no(eye.raw, dir.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_anyup_lh_no(vec3s eye, vec3s dir) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_anyup_lh_no(eye.raw, dir.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_view_lh_no_h */
|
||||||
88
include/cglm/struct/clipspace/view_lh_zo.h
Normal file
88
include/cglm/struct/clipspace/view_lh_zo.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_lookat_lh_zo(vec3s eye, vec3s center, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_lh_zo(vec3s eye, vec3s dir, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_anyup_lh_zo(vec3s eye, vec3s dir)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_view_lh_zo_h
|
||||||
|
#define cglms_view_lh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_lookat_lh_zo(vec3s eye, vec3s center, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_lookat_lh_zo(eye.raw, center.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_lh_zo(vec3s eye, vec3s dir, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_lh_zo(eye.raw, dir.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a left-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_anyup_lh_zo(vec3s eye, vec3s dir) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_anyup_lh_zo(eye.raw, dir.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_view_lh_zo_h */
|
||||||
88
include/cglm/struct/clipspace/view_rh_no.h
Normal file
88
include/cglm/struct/clipspace/view_rh_no.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_lookat_rh_no(vec3s eye, vec3s center, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_rh_no(vec3s eye, vec3s dir, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_anyup_rh_no(vec3s eye, vec3s dir)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_view_rh_no_h
|
||||||
|
#define cglms_view_rh_no_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_lookat_rh_no(vec3s eye, vec3s center, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_lookat_rh_no(eye.raw, center.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_rh_no(vec3s eye, vec3s dir, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_rh_no(eye.raw, dir.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [-1, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_anyup_rh_no(vec3s eye, vec3s dir) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_anyup_rh_no(eye.raw, dir.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_view_rh_no_h */
|
||||||
88
include/cglm/struct/clipspace/view_rh_zo.h
Normal file
88
include/cglm/struct/clipspace/view_rh_zo.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), htt../opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE mat4s glms_lookat_rh_zo(vec3s eye, vec3s center, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_rh_zo(vec3s eye, vec3s dir, vec3s up)
|
||||||
|
CGLM_INLINE mat4s glms_look_anyup_rh_zo(vec3s eye, vec3s dir)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_view_rh_zo_h
|
||||||
|
#define cglms_view_rh_zo_h
|
||||||
|
|
||||||
|
#include "../../common.h"
|
||||||
|
#include "../../types-struct.h"
|
||||||
|
#include "../../plane.h"
|
||||||
|
#include "../../cam.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] center center vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_lookat_rh_zo(vec3s eye, vec3s center, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_lookat_rh_zo(eye.raw, center.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for lookat: if you only have direction not target self
|
||||||
|
* then this might be useful. Because you need to get target from direction.
|
||||||
|
*
|
||||||
|
* NOTE: The UP vector must not be parallel to the line of sight from
|
||||||
|
* the eye point to the reference point
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @param[in] up up vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_rh_zo(vec3s eye, vec3s dir, vec3s up) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_rh_zo(eye.raw, dir.raw, up.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief set up view matrix
|
||||||
|
* with a right-hand coordinate system and a
|
||||||
|
* clip-space of [0, 1].
|
||||||
|
*
|
||||||
|
* convenient wrapper for look: if you only have direction and if you don't
|
||||||
|
* care what UP vector is then this might be useful to create view matrix
|
||||||
|
*
|
||||||
|
* @param[in] eye eye vector
|
||||||
|
* @param[in] dir direction vector
|
||||||
|
* @returns result matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_look_anyup_rh_zo(vec3s eye, vec3s dir) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_look_anyup_rh_zo(eye.raw, dir.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_view_rh_zo_h */
|
||||||
28
meson.build
28
meson.build
@@ -48,14 +48,28 @@ cglm_src = files(
|
|||||||
'src/sphere.c',
|
'src/sphere.c',
|
||||||
'src/vec2.c',
|
'src/vec2.c',
|
||||||
'src/vec3.c',
|
'src/vec3.c',
|
||||||
'src/vec4.c'
|
'src/vec4.c',
|
||||||
|
'src/clipspace/ortho_lh_no.c',
|
||||||
|
'src/clipspace/ortho_lh_zo.c',
|
||||||
|
'src/clipspace/ortho_rh_no.c',
|
||||||
|
'src/clipspace/ortho_rh_zo.c',
|
||||||
|
'src/clipspace/persp_lh_no.c',
|
||||||
|
'src/clipspace/persp_lh_zo.c',
|
||||||
|
'src/clipspace/persp_rh_no.c',
|
||||||
|
'src/clipspace/persp_rh_zo.c',
|
||||||
|
'src/clipspace/view_lh_no.c',
|
||||||
|
'src/clipspace/view_lh_zo.c',
|
||||||
|
'src/clipspace/view_rh_no.c',
|
||||||
|
'src/clipspace/view_rh_zo.c',
|
||||||
)
|
)
|
||||||
|
|
||||||
cglm_lib = library('cglm',
|
cglm_lib = library('cglm',
|
||||||
cglm_src,
|
cglm_src,
|
||||||
install : cglm_install,
|
install : cglm_install,
|
||||||
dependencies : cglm_deps,
|
dependencies : cglm_deps,
|
||||||
c_args : [ build_args, cglm_args ]
|
c_args : [ build_args, cglm_args ],
|
||||||
|
version : meson.project_version(),
|
||||||
|
soversion : '0'
|
||||||
)
|
)
|
||||||
|
|
||||||
cglm_dep = declare_dependency(
|
cglm_dep = declare_dependency(
|
||||||
@@ -88,13 +102,17 @@ if get_option('build_tests') == true
|
|||||||
|
|
||||||
test_src = files(
|
test_src = files(
|
||||||
'test/runner.c',
|
'test/runner.c',
|
||||||
'test/src/test_euler.c',
|
|
||||||
'test/src/test_bezier.c',
|
'test/src/test_bezier.c',
|
||||||
'test/src/test_cam.c',
|
'test/src/test_cam.c',
|
||||||
'test/src/test_struct.c',
|
'test/src/test_cam_lh_no.c',
|
||||||
|
'test/src/test_cam_lh_zo.c',
|
||||||
|
'test/src/test_cam_rh_no.c',
|
||||||
|
'test/src/test_cam_rh_zo.c',
|
||||||
'test/src/test_clamp.c',
|
'test/src/test_clamp.c',
|
||||||
'test/src/test_common.c',
|
'test/src/test_common.c',
|
||||||
'test/src/tests.c'
|
'test/src/test_euler.c',
|
||||||
|
'test/src/tests.c',
|
||||||
|
'test/src/test_struct.c',
|
||||||
)
|
)
|
||||||
|
|
||||||
test_exe = executable('tests',
|
test_exe = executable('tests',
|
||||||
|
|||||||
71
src/cam.c
71
src/cam.c
@@ -10,38 +10,20 @@
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_frustum(float left,
|
glmc_frustum(float left, float right,
|
||||||
float right,
|
float bottom, float top,
|
||||||
float bottom,
|
float nearZ, float farZ,
|
||||||
float top,
|
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_frustum(left,
|
glm_frustum(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
right,
|
|
||||||
bottom,
|
|
||||||
top,
|
|
||||||
nearVal,
|
|
||||||
farVal,
|
|
||||||
dest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ortho(float left,
|
glmc_ortho(float left, float right,
|
||||||
float right,
|
float bottom, float top,
|
||||||
float bottom,
|
float nearZ, float farZ,
|
||||||
float top,
|
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
glm_ortho(left,
|
glm_ortho(left, right, bottom, top, nearZ, farZ, dest);
|
||||||
right,
|
|
||||||
bottom,
|
|
||||||
top,
|
|
||||||
nearVal,
|
|
||||||
farVal,
|
|
||||||
dest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
@@ -76,16 +58,8 @@ glmc_ortho_default_s(float aspect, float size, mat4 dest) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_perspective(float fovy,
|
glmc_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest) {
|
||||||
float aspect,
|
glm_perspective(fovy, aspect, nearZ, farZ, dest);
|
||||||
float nearVal,
|
|
||||||
float farVal,
|
|
||||||
mat4 dest) {
|
|
||||||
glm_perspective(fovy,
|
|
||||||
aspect,
|
|
||||||
nearVal,
|
|
||||||
farVal,
|
|
||||||
dest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
@@ -108,10 +82,7 @@ glmc_perspective_resize(float aspect, mat4 proj) {
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_lookat(vec3 eye,
|
glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
vec3 center,
|
|
||||||
vec3 up,
|
|
||||||
mat4 dest) {
|
|
||||||
glm_lookat(eye, center, up, dest);
|
glm_lookat(eye, center, up, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,13 +101,13 @@ glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
|||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp(mat4 proj,
|
glmc_persp_decomp(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearZ,
|
||||||
float * __restrict farVal,
|
float * __restrict farZ,
|
||||||
float * __restrict top,
|
float * __restrict top,
|
||||||
float * __restrict bottom,
|
float * __restrict bottom,
|
||||||
float * __restrict left,
|
float * __restrict left,
|
||||||
float * __restrict right) {
|
float * __restrict right) {
|
||||||
glm_persp_decomp(proj, nearVal, farVal, top, bottom, left, right);
|
glm_persp_decomp(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
@@ -164,21 +135,21 @@ glmc_persp_decomp_y(mat4 proj,
|
|||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_z(mat4 proj,
|
glmc_persp_decomp_z(mat4 proj,
|
||||||
float * __restrict nearVal,
|
float * __restrict nearZ,
|
||||||
float * __restrict farVal) {
|
float * __restrict farZ) {
|
||||||
glm_persp_decomp_z(proj, nearVal, farVal);
|
glm_persp_decomp_z(proj, nearZ, farZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
glmc_persp_decomp_far(mat4 proj, float * __restrict farZ) {
|
||||||
glm_persp_decomp_far(proj, farVal);
|
glm_persp_decomp_far(proj, farZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
glmc_persp_decomp_near(mat4 proj, float * __restrict nearZ) {
|
||||||
glm_persp_decomp_near(proj, nearVal);
|
glm_persp_decomp_near(proj, nearZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
|
|||||||
51
src/clipspace/ortho_lh_no.c
Normal file
51
src/clipspace/ortho_lh_no.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/ortho_lh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_ortho_lh_no(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_lh_no(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_aabb_lh_no(box, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_lh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_p_lh_no(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_lh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_pz_lh_no(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_lh_no(float aspect, mat4 dest) {
|
||||||
|
glm_ortho_default_lh_no(aspect, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_lh_no(float aspect, float size, mat4 dest) {
|
||||||
|
glm_ortho_default_s_lh_no(aspect, size, dest);
|
||||||
|
}
|
||||||
51
src/clipspace/ortho_lh_zo.c
Normal file
51
src/clipspace/ortho_lh_zo.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/ortho_lh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_ortho_lh_zo(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_lh_zo(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_aabb_lh_zo(box, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_lh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_p_lh_zo(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_lh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_pz_lh_zo(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_lh_zo(float aspect, mat4 dest) {
|
||||||
|
glm_ortho_default_lh_zo(aspect, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_lh_zo(float aspect, float size, mat4 dest) {
|
||||||
|
glm_ortho_default_s_lh_zo(aspect, size, dest);
|
||||||
|
}
|
||||||
51
src/clipspace/ortho_rh_no.c
Normal file
51
src/clipspace/ortho_rh_no.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/ortho_rh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_ortho_rh_no(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_rh_no(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_aabb_rh_no(box, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_rh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_p_rh_no(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_rh_no(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_pz_rh_no(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_rh_no(float aspect, mat4 dest) {
|
||||||
|
glm_ortho_default_rh_no(aspect, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_rh_no(float aspect, float size, mat4 dest) {
|
||||||
|
glm_ortho_default_s_rh_no(aspect, size, dest);
|
||||||
|
}
|
||||||
51
src/clipspace/ortho_rh_zo.c
Normal file
51
src/clipspace/ortho_rh_zo.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/ortho_rh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_ortho_rh_zo(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_rh_zo(vec3 box[2], mat4 dest) {
|
||||||
|
glm_ortho_aabb_rh_zo(box, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_p_rh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_p_rh_zo(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_aabb_pz_rh_zo(vec3 box[2], float padding, mat4 dest) {
|
||||||
|
glm_ortho_aabb_pz_rh_zo(box, padding, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_rh_zo(float aspect, mat4 dest) {
|
||||||
|
glm_ortho_default_rh_zo(aspect, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ortho_default_s_rh_zo(float aspect, float size, mat4 dest) {
|
||||||
|
glm_ortho_default_s_rh_zo(aspect, size, dest);
|
||||||
|
}
|
||||||
109
src/clipspace/persp_lh_no.c
Normal file
109
src/clipspace/persp_lh_no.c
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/clipspace/persp_lh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_lh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_frustum_lh_no(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_lh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_perspective_lh_no(fovy,
|
||||||
|
aspect,
|
||||||
|
nearVal,
|
||||||
|
farVal,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_lh_no(mat4 proj, float deltaFar) {
|
||||||
|
glm_persp_move_far_lh_no(proj, deltaFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_lh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_lh_no(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_lh_no(proj, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_lh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_lh_no(proj, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_lh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_lh_no(proj, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_lh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_lh_no(proj, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_lh_no(mat4 proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_lh_no(proj, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_lh_no(mat4 proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_lh_no(proj, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_lh_no(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
glm_persp_sizes_lh_no(proj, fovy, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_lh_no(mat4 proj) {
|
||||||
|
return glm_persp_fovy_lh_no(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_lh_no(mat4 proj) {
|
||||||
|
return glm_persp_aspect_lh_no(proj);
|
||||||
|
}
|
||||||
109
src/clipspace/persp_lh_zo.c
Normal file
109
src/clipspace/persp_lh_zo.c
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/clipspace/persp_lh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_lh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_frustum_lh_zo(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_lh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_perspective_lh_zo(fovy,
|
||||||
|
aspect,
|
||||||
|
nearVal,
|
||||||
|
farVal,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_lh_zo(mat4 proj, float deltaFar) {
|
||||||
|
glm_persp_move_far_lh_zo(proj, deltaFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_lh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_lh_zo(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_lh_zo(proj, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_lh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_lh_zo(proj, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_lh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_lh_zo(proj, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_lh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_lh_zo(proj, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_lh_zo(mat4 proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_lh_zo(proj, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_lh_zo(mat4 proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_lh_zo(proj, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_lh_zo(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
glm_persp_sizes_lh_zo(proj, fovy, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_lh_zo(mat4 proj) {
|
||||||
|
return glm_persp_fovy_lh_zo(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_lh_zo(mat4 proj) {
|
||||||
|
return glm_persp_aspect_lh_zo(proj);
|
||||||
|
}
|
||||||
109
src/clipspace/persp_rh_no.c
Normal file
109
src/clipspace/persp_rh_no.c
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/clipspace/persp_rh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_rh_no(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_frustum_rh_no(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_rh_no(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_perspective_rh_no(fovy,
|
||||||
|
aspect,
|
||||||
|
nearVal,
|
||||||
|
farVal,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_rh_no(mat4 proj, float deltaFar) {
|
||||||
|
glm_persp_move_far_rh_no(proj, deltaFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_rh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_rh_no(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_rh_no(proj, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_rh_no(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_rh_no(proj, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_rh_no(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_rh_no(proj, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_rh_no(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_rh_no(proj, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_rh_no(mat4 proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_rh_no(proj, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_rh_no(mat4 proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_rh_no(proj, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_rh_no(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
glm_persp_sizes_rh_no(proj, fovy, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_rh_no(mat4 proj) {
|
||||||
|
return glm_persp_fovy_rh_no(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_rh_no(mat4 proj) {
|
||||||
|
return glm_persp_aspect_rh_no(proj);
|
||||||
|
}
|
||||||
109
src/clipspace/persp_rh_zo.c
Normal file
109
src/clipspace/persp_rh_zo.c
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/clipspace/persp_rh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_frustum_rh_zo(float left, float right,
|
||||||
|
float bottom, float top,
|
||||||
|
float nearZ, float farZ,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_frustum_rh_zo(left, right,
|
||||||
|
bottom, top,
|
||||||
|
nearZ, farZ,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_perspective_rh_zo(float fovy,
|
||||||
|
float aspect,
|
||||||
|
float nearVal,
|
||||||
|
float farVal,
|
||||||
|
mat4 dest) {
|
||||||
|
glm_perspective_rh_zo(fovy,
|
||||||
|
aspect,
|
||||||
|
nearVal,
|
||||||
|
farVal,
|
||||||
|
dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_move_far_rh_zo(mat4 proj, float deltaFar) {
|
||||||
|
glm_persp_move_far_rh_zo(proj, deltaFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ, float * __restrict farZ,
|
||||||
|
float * __restrict top, float * __restrict bottom,
|
||||||
|
float * __restrict left, float * __restrict right) {
|
||||||
|
glm_persp_decomp_rh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decompv_rh_zo(mat4 proj, float dest[6]) {
|
||||||
|
glm_persp_decompv_rh_zo(proj, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_x_rh_zo(mat4 proj,
|
||||||
|
float * __restrict left,
|
||||||
|
float * __restrict right) {
|
||||||
|
glm_persp_decomp_x_rh_zo(proj, left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_y_rh_zo(mat4 proj,
|
||||||
|
float * __restrict top,
|
||||||
|
float * __restrict bottom) {
|
||||||
|
glm_persp_decomp_y_rh_zo(proj, top, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_z_rh_zo(mat4 proj,
|
||||||
|
float * __restrict nearZ,
|
||||||
|
float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_z_rh_zo(proj, nearZ, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_far_rh_zo(mat4 proj, float * __restrict farZ) {
|
||||||
|
glm_persp_decomp_far_rh_zo(proj, farZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_decomp_near_rh_zo(mat4 proj, float * __restrict nearZ) {
|
||||||
|
glm_persp_decomp_near_rh_zo(proj, nearZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_persp_sizes_rh_zo(mat4 proj, float fovy, vec4 dest) {
|
||||||
|
glm_persp_sizes_rh_zo(proj, fovy, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_fovy_rh_zo(mat4 proj) {
|
||||||
|
return glm_persp_fovy_rh_zo(proj);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_persp_aspect_rh_zo(mat4 proj) {
|
||||||
|
return glm_persp_aspect_rh_zo(proj);
|
||||||
|
}
|
||||||
27
src/clipspace/view_lh_no.c
Normal file
27
src/clipspace/view_lh_no.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/view_lh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_lh_no(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_lh_no(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_lh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_lh_no(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_lh_no(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_lh_no(eye, dir, dest);
|
||||||
|
}
|
||||||
27
src/clipspace/view_lh_zo.c
Normal file
27
src/clipspace/view_lh_zo.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/view_lh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_lh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_lh_zo(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_lh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_lh_zo(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_lh_zo(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_lh_zo(eye, dir, dest);
|
||||||
|
}
|
||||||
27
src/clipspace/view_rh_no.c
Normal file
27
src/clipspace/view_rh_no.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/view_rh_no.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_rh_no(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_rh_no(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_rh_no(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_rh_no(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_rh_no(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_rh_no(eye, dir, dest);
|
||||||
|
}
|
||||||
27
src/clipspace/view_rh_zo.c
Normal file
27
src/clipspace/view_rh_zo.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../include/cglm/cglm.h"
|
||||||
|
#include "../../include/cglm/clipspace/view_rh_zo.h"
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_lookat_rh_zo(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||||
|
glm_lookat_rh_zo(eye, center, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_rh_zo(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||||
|
glm_look_rh_zo(eye, dir, up, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_look_anyup_rh_zo(vec3 eye, vec3 dir, mat4 dest) {
|
||||||
|
glm_look_anyup_rh_zo(eye, dir, dest);
|
||||||
|
}
|
||||||
@@ -6,6 +6,10 @@ set(TESTFILES
|
|||||||
src/test_euler.c
|
src/test_euler.c
|
||||||
src/test_bezier.c
|
src/test_bezier.c
|
||||||
src/test_cam.c
|
src/test_cam.c
|
||||||
|
src/test_cam_lh_zo.c
|
||||||
|
src/test_cam_rh_zo.c
|
||||||
|
src/test_cam_lh_no.c
|
||||||
|
src/test_cam_rh_no.c
|
||||||
src/test_struct.c
|
src/test_struct.c
|
||||||
src/test_clamp.c
|
src/test_clamp.c
|
||||||
src/test_common.c
|
src/test_common.c
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
# define _GNU_SOURCE /* for drand48() */
|
# define _GNU_SOURCE /* for drand48() */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CGLM_CLIPSPACE_INCLUDE_ALL
|
||||||
|
# define CGLM_CLIPSPACE_INCLUDE_ALL
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ TEST_IMPL(camera_lookat) {
|
|||||||
TEST_IMPL(camera_decomp) {
|
TEST_IMPL(camera_decomp) {
|
||||||
mat4 proj, proj2;
|
mat4 proj, proj2;
|
||||||
vec4 sizes;
|
vec4 sizes;
|
||||||
float aspect, fovy, nearVal, farVal;
|
float aspect, fovy, nearZ, farZ;
|
||||||
|
|
||||||
aspect = 0.782f;
|
aspect = 0.782f;
|
||||||
fovy = glm_rad(49.984f);
|
fovy = glm_rad(49.984f);
|
||||||
nearVal = 0.1f;
|
nearZ = 0.1f;
|
||||||
farVal = 100.0f;
|
farZ = 100.0f;
|
||||||
|
|
||||||
glm_perspective(fovy, aspect, nearVal, farVal, proj);
|
glm_perspective(fovy, aspect, nearZ, farZ, proj);
|
||||||
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < GLM_FLT_EPSILON)
|
||||||
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < GLM_FLT_EPSILON)
|
||||||
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < GLM_FLT_EPSILON)
|
||||||
@@ -45,8 +45,8 @@ TEST_IMPL(camera_decomp) {
|
|||||||
sizes[0] * 0.5f,
|
sizes[0] * 0.5f,
|
||||||
-sizes[1] * 0.5f,
|
-sizes[1] * 0.5f,
|
||||||
sizes[1] * 0.5f,
|
sizes[1] * 0.5f,
|
||||||
nearVal,
|
nearZ,
|
||||||
farVal,
|
farZ,
|
||||||
proj2);
|
proj2);
|
||||||
|
|
||||||
ASSERTIFY(test_assert_mat4_eq(proj, proj2))
|
ASSERTIFY(test_assert_mat4_eq(proj, proj2))
|
||||||
|
|||||||
36
test/src/test_cam_lh_no.c
Normal file
36
test/src/test_cam_lh_no.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_common.h"
|
||||||
|
|
||||||
|
TEST_IMPL(perspective_lh_no) {
|
||||||
|
mat4 dst;
|
||||||
|
const float fovy = glm_rad(45.0f);
|
||||||
|
const float aspect = 640/480.0f;
|
||||||
|
const float zNearVal = 0.1f;
|
||||||
|
const float zFarVal = 100.0f;
|
||||||
|
|
||||||
|
glm_perspective_lh_no(fovy, aspect, zNearVal, zFarVal, dst);
|
||||||
|
|
||||||
|
/* Sanity mk. I: longhand version */
|
||||||
|
ASSERT(test_eq(dst[0][0], 1.0f / (tanf(fovy / 2) * aspect)))
|
||||||
|
ASSERT(test_eq(dst[1][1], 1.0f / tanf(fovy / 2)))
|
||||||
|
ASSERT(test_eq(dst[2][2], (zFarVal + zNearVal) / (zFarVal - zNearVal)))
|
||||||
|
ASSERT(test_eq(dst[2][3], 1.0f))
|
||||||
|
ASSERT(test_eq(dst[3][2], -2 * zFarVal * zNearVal / (zFarVal - zNearVal)))
|
||||||
|
|
||||||
|
/* Sanity mk. II */
|
||||||
|
/*reference test data for glm_perspective_lh_no*/
|
||||||
|
mat4 cmp = {0};
|
||||||
|
cmp[0][0] = 1.8106601f;
|
||||||
|
cmp[1][1] = 2.4142134f;
|
||||||
|
cmp[2][2] = 1.0020020f;
|
||||||
|
cmp[2][3] = 1.0000000f;
|
||||||
|
cmp[3][2] = -0.2002002f;
|
||||||
|
|
||||||
|
return test_assert_mat4_eq(dst, cmp);
|
||||||
|
}
|
||||||
36
test/src/test_cam_lh_zo.c
Normal file
36
test/src/test_cam_lh_zo.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_common.h"
|
||||||
|
|
||||||
|
TEST_IMPL(perspective_lh_zo) {
|
||||||
|
mat4 dst;
|
||||||
|
const float fovy = glm_rad(45.0f);
|
||||||
|
const float aspect = 640/480.0f;
|
||||||
|
const float zNearVal = 0.1f;
|
||||||
|
const float zFarVal = 100.0f;
|
||||||
|
|
||||||
|
glm_perspective_lh_zo(fovy, aspect, zNearVal, zFarVal, dst);
|
||||||
|
|
||||||
|
/* Sanity mk. I: longhand version */
|
||||||
|
ASSERT(test_eq(dst[0][0], 1.0f / (tanf(fovy / 2) * aspect)))
|
||||||
|
ASSERT(test_eq(dst[1][1], 1.0f / tanf(fovy / 2)))
|
||||||
|
ASSERT(test_eq(dst[2][2], zFarVal / (zFarVal - zNearVal)))
|
||||||
|
ASSERT(test_eq(dst[2][3], 1.0f))
|
||||||
|
ASSERT(test_eq(dst[3][2], -1 * zFarVal * zNearVal / (zFarVal - zNearVal)))
|
||||||
|
|
||||||
|
/* Sanity mk. II */
|
||||||
|
/* "Reference values" generated by GLM's glm::perspectiveLH_ZO */
|
||||||
|
mat4 cmp = {0};
|
||||||
|
cmp[0][0] = 1.8106601f;
|
||||||
|
cmp[1][1] = 2.4142134f;
|
||||||
|
cmp[2][2] = 1.0010010f;
|
||||||
|
cmp[2][3] = 1.0000000f;
|
||||||
|
cmp[3][2] = -0.1001001f;
|
||||||
|
|
||||||
|
return test_assert_mat4_eq(dst, cmp);
|
||||||
|
}
|
||||||
36
test/src/test_cam_rh_no.c
Normal file
36
test/src/test_cam_rh_no.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_common.h"
|
||||||
|
|
||||||
|
TEST_IMPL(perspective_rh_no) {
|
||||||
|
mat4 dst;
|
||||||
|
const float fovy = glm_rad(45.0f);
|
||||||
|
const float aspect = 640/480.0f;
|
||||||
|
const float zNearVal = 0.1f;
|
||||||
|
const float zFarVal = 100.0f;
|
||||||
|
|
||||||
|
glm_perspective_rh_no(fovy, aspect, zNearVal, zFarVal, dst);
|
||||||
|
|
||||||
|
/* Sanity mk. I: longhand version */
|
||||||
|
ASSERT(test_eq(dst[0][0], 1.0f / (tanf(fovy / 2) * aspect)))
|
||||||
|
ASSERT(test_eq(dst[1][1], 1.0f / tanf(fovy / 2)))
|
||||||
|
ASSERT(test_eq(dst[2][2], -1.0f * (zFarVal + zNearVal) / (zFarVal - zNearVal)))
|
||||||
|
ASSERT(test_eq(dst[2][3], -1.0f))
|
||||||
|
ASSERT(test_eq(dst[3][2], -2 * zFarVal * zNearVal / (zFarVal - zNearVal)))
|
||||||
|
|
||||||
|
/* Sanity mk. II */
|
||||||
|
/*reference test data for glm_perspective_rh_no*/
|
||||||
|
mat4 cmp = {0};
|
||||||
|
cmp[0][0] = 1.8106601f;
|
||||||
|
cmp[1][1] = 2.4142134f;
|
||||||
|
cmp[2][2] = -1.0020020f;
|
||||||
|
cmp[2][3] = -1.0000000f;
|
||||||
|
cmp[3][2] = -0.2002002f;
|
||||||
|
|
||||||
|
return test_assert_mat4_eq(dst, cmp);
|
||||||
|
}
|
||||||
36
test/src/test_cam_rh_zo.c
Normal file
36
test/src/test_cam_rh_zo.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_common.h"
|
||||||
|
|
||||||
|
TEST_IMPL(perspective_rh_zo) {
|
||||||
|
mat4 dst;
|
||||||
|
const float fovy = glm_rad(45.0f);
|
||||||
|
const float aspect = 640/480.0f;
|
||||||
|
const float zNearVal = 0.1f;
|
||||||
|
const float zFarVal = 100.0f;
|
||||||
|
|
||||||
|
glm_perspective_rh_zo(fovy, aspect, zNearVal, zFarVal, dst);
|
||||||
|
|
||||||
|
/* Sanity mk. I: longhand version */
|
||||||
|
ASSERT(test_eq(dst[0][0], 1 / (tanf(fovy / 2) * aspect)))
|
||||||
|
ASSERT(test_eq(dst[1][1], 1 / tanf(fovy / 2)))
|
||||||
|
ASSERT(test_eq(dst[2][2], zFarVal / (zNearVal - zFarVal)))
|
||||||
|
ASSERT(test_eq(dst[2][3], -1.0f))
|
||||||
|
ASSERT(test_eq(dst[3][2], -1 * zFarVal * zNearVal / (zFarVal - zNearVal)))
|
||||||
|
|
||||||
|
/* Sanity mk. II */
|
||||||
|
/*reference test data for glm_perspective_rh_zo*/
|
||||||
|
mat4 cmp = {0};
|
||||||
|
cmp[0][0] = 1.8106601f;
|
||||||
|
cmp[1][1] = 2.4142134f;
|
||||||
|
cmp[2][2] = -1.0010010f;
|
||||||
|
cmp[2][3] = -1.0000000f;
|
||||||
|
cmp[3][2] = -0.1001001f;
|
||||||
|
|
||||||
|
return test_assert_mat4_eq(dst, cmp);
|
||||||
|
}
|
||||||
12
test/tests.h
12
test/tests.h
@@ -222,7 +222,11 @@ TEST_DECLARE(glmc_mat2_swap_col)
|
|||||||
TEST_DECLARE(glmc_mat2_swap_row)
|
TEST_DECLARE(glmc_mat2_swap_row)
|
||||||
TEST_DECLARE(glmc_mat2_rmc)
|
TEST_DECLARE(glmc_mat2_rmc)
|
||||||
|
|
||||||
/* camera */
|
/* camera (incl [LR]H cross [NZ]O) */
|
||||||
|
TEST_DECLARE(perspective_lh_zo)
|
||||||
|
TEST_DECLARE(perspective_rh_zo)
|
||||||
|
TEST_DECLARE(perspective_lh_no)
|
||||||
|
TEST_DECLARE(perspective_rh_no)
|
||||||
TEST_DECLARE(camera_lookat)
|
TEST_DECLARE(camera_lookat)
|
||||||
TEST_DECLARE(camera_decomp)
|
TEST_DECLARE(camera_decomp)
|
||||||
|
|
||||||
@@ -946,7 +950,11 @@ TEST_LIST {
|
|||||||
TEST_ENTRY(glmc_mat2_swap_row)
|
TEST_ENTRY(glmc_mat2_swap_row)
|
||||||
TEST_ENTRY(glmc_mat2_rmc)
|
TEST_ENTRY(glmc_mat2_rmc)
|
||||||
|
|
||||||
/* camera */
|
/* camera (incl [LR]H cross [NZ]O) */
|
||||||
|
TEST_ENTRY(perspective_lh_zo)
|
||||||
|
TEST_ENTRY(perspective_rh_zo)
|
||||||
|
TEST_ENTRY(perspective_lh_no)
|
||||||
|
TEST_ENTRY(perspective_rh_no)
|
||||||
TEST_ENTRY(camera_lookat)
|
TEST_ENTRY(camera_lookat)
|
||||||
TEST_ENTRY(camera_decomp)
|
TEST_ENTRY(camera_decomp)
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,10 @@
|
|||||||
<ClCompile Include="..\test\src\tests.c" />
|
<ClCompile Include="..\test\src\tests.c" />
|
||||||
<ClCompile Include="..\test\src\test_bezier.c" />
|
<ClCompile Include="..\test\src\test_bezier.c" />
|
||||||
<ClCompile Include="..\test\src\test_cam.c" />
|
<ClCompile Include="..\test\src\test_cam.c" />
|
||||||
|
<ClCompile Include="..\test\src\test_cam_lh_no.c" />
|
||||||
|
<ClCompile Include="..\test\src\test_cam_lh_zo.c" />
|
||||||
|
<ClCompile Include="..\test\src\test_cam_rh_no.c" />
|
||||||
|
<ClCompile Include="..\test\src\test_cam_rh_zo.c" />
|
||||||
<ClCompile Include="..\test\src\test_clamp.c" />
|
<ClCompile Include="..\test\src\test_clamp.c" />
|
||||||
<ClCompile Include="..\test\src\test_common.c" />
|
<ClCompile Include="..\test\src\test_common.c" />
|
||||||
<ClCompile Include="..\test\src\test_euler.c" />
|
<ClCompile Include="..\test\src\test_euler.c" />
|
||||||
|
|||||||
@@ -35,6 +35,18 @@
|
|||||||
<ClCompile Include="..\test\src\tests.c">
|
<ClCompile Include="..\test\src\tests.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\test\src\test_cam_lh_no.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\test\src\test_cam_lh_zo.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\test\src\test_cam_rh_no.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\test\src\test_cam_rh_zo.c">
|
||||||
|
<Filter>src</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\test\tests.h">
|
<ClInclude Include="..\test\tests.h">
|
||||||
|
|||||||
@@ -24,6 +24,18 @@
|
|||||||
<ClCompile Include="..\src\bezier.c" />
|
<ClCompile Include="..\src\bezier.c" />
|
||||||
<ClCompile Include="..\src\box.c" />
|
<ClCompile Include="..\src\box.c" />
|
||||||
<ClCompile Include="..\src\cam.c" />
|
<ClCompile Include="..\src\cam.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_lh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_lh_zo.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_rh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_rh_zo.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_lh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_lh_zo.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_rh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_rh_zo.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\view_lh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\view_lh_zo.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\view_rh_no.c" />
|
||||||
|
<ClCompile Include="..\src\clipspace\view_rh_zo.c" />
|
||||||
<ClCompile Include="..\src\curve.c" />
|
<ClCompile Include="..\src\curve.c" />
|
||||||
<ClCompile Include="..\src\ease.c" />
|
<ClCompile Include="..\src\ease.c" />
|
||||||
<ClCompile Include="..\src\euler.c" />
|
<ClCompile Include="..\src\euler.c" />
|
||||||
@@ -54,6 +66,18 @@
|
|||||||
<ClInclude Include="..\include\cglm\call\bezier.h" />
|
<ClInclude Include="..\include\cglm\call\bezier.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\box.h" />
|
<ClInclude Include="..\include\cglm\call\box.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\cam.h" />
|
<ClInclude Include="..\include\cglm\call\cam.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_rh_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\curve.h" />
|
<ClInclude Include="..\include\cglm\call\curve.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\ease.h" />
|
<ClInclude Include="..\include\cglm\call\ease.h" />
|
||||||
<ClInclude Include="..\include\cglm\call\euler.h" />
|
<ClInclude Include="..\include\cglm\call\euler.h" />
|
||||||
@@ -72,6 +96,21 @@
|
|||||||
<ClInclude Include="..\include\cglm\call\vec4.h" />
|
<ClInclude Include="..\include\cglm\call\vec4.h" />
|
||||||
<ClInclude Include="..\include\cglm\cam.h" />
|
<ClInclude Include="..\include\cglm\cam.h" />
|
||||||
<ClInclude Include="..\include\cglm\cglm.h" />
|
<ClInclude Include="..\include\cglm\cglm.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\color.h" />
|
<ClInclude Include="..\include\cglm\color.h" />
|
||||||
<ClInclude Include="..\include\cglm\common.h" />
|
<ClInclude Include="..\include\cglm\common.h" />
|
||||||
<ClInclude Include="..\include\cglm\curve.h" />
|
<ClInclude Include="..\include\cglm\curve.h" />
|
||||||
@@ -106,6 +145,18 @@
|
|||||||
<ClInclude Include="..\include\cglm\struct\affine2d.h" />
|
<ClInclude Include="..\include\cglm\struct\affine2d.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\box.h" />
|
<ClInclude Include="..\include\cglm\struct\box.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\cam.h" />
|
<ClInclude Include="..\include\cglm\struct\cam.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_zo.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_no.h" />
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_zo.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\color.h" />
|
<ClInclude Include="..\include\cglm\struct\color.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\curve.h" />
|
<ClInclude Include="..\include\cglm\struct\curve.h" />
|
||||||
<ClInclude Include="..\include\cglm\struct\euler.h" />
|
<ClInclude Include="..\include\cglm\struct\euler.h" />
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
|
||||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="src">
|
<Filter Include="src">
|
||||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
@@ -33,6 +29,18 @@
|
|||||||
<Filter Include="include\cglm\struct">
|
<Filter Include="include\cglm\struct">
|
||||||
<UniqueIdentifier>{0b5febe7-a88d-4330-94ae-305897a5e957}</UniqueIdentifier>
|
<UniqueIdentifier>{0b5febe7-a88d-4330-94ae-305897a5e957}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="include\cglm\clipspace">
|
||||||
|
<UniqueIdentifier>{8044a657-123d-4a0e-8de1-f348fad7dadb}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="include\cglm\call\clipspace">
|
||||||
|
<UniqueIdentifier>{842a48fc-5c7e-4951-9623-64af96dfb95a}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="include\cglm\struct\clipspace">
|
||||||
|
<UniqueIdentifier>{86101de1-0722-4c88-92a0-e6d71158354e}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="src\clipspace">
|
||||||
|
<UniqueIdentifier>{98a166bb-ba2d-4649-a20f-ba6bf4ce6383}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\affine.c">
|
<ClCompile Include="..\src\affine.c">
|
||||||
@@ -98,6 +106,42 @@
|
|||||||
<ClCompile Include="..\src\affine2d.c">
|
<ClCompile Include="..\src\affine2d.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_lh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_lh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_rh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\ortho_rh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_lh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_lh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_rh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\persp_rh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\view_lh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\view_lh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\view_rh_no.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\clipspace\view_rh_zo.c">
|
||||||
|
<Filter>src\clipspace</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\config.h">
|
<ClInclude Include="..\src\config.h">
|
||||||
@@ -379,5 +423,122 @@
|
|||||||
<ClInclude Include="..\include\cglm\simd\neon\quat.h">
|
<ClInclude Include="..\include\cglm\simd\neon\quat.h">
|
||||||
<Filter>include\cglm\simd\neon</Filter>
|
<Filter>include\cglm\simd\neon</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_lh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_lh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_rh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\ortho_rh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_lh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_lh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_rh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\persp_rh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_lh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh_no.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\clipspace\view_rh_zo.h">
|
||||||
|
<Filter>include\cglm\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_lh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_lh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_rh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\ortho_rh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_lh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_lh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_rh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\persp_rh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_lh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_lh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_rh_no.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\call\clipspace\view_rh_zo.h">
|
||||||
|
<Filter>include\cglm\call\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_lh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_lh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_rh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\ortho_rh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_lh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\persp_rh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_lh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_no.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\cglm\struct\clipspace\view_rh_zo.h">
|
||||||
|
<Filter>include\cglm\struct\clipspace</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Reference in New Issue
Block a user