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/*
|
||||
confdefs.h
|
||||
*.xcuserdatad
|
||||
.idea
|
||||
cmake-build-debug
|
||||
|
||||
@@ -73,6 +73,18 @@ add_library(${PROJECT_NAME}
|
||||
src/bezier.c
|
||||
src/ray.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)
|
||||
|
||||
51
Makefile.am
51
Makefile.am
@@ -69,6 +69,23 @@ cglm_HEADERS = include/cglm/version.h \
|
||||
include/cglm/ray.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_call_HEADERS = include/cglm/call/mat4.h \
|
||||
include/cglm/call/mat3.h \
|
||||
@@ -137,7 +154,21 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
||||
include/cglm/struct/color.h \
|
||||
include/cglm/struct/curve.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=\
|
||||
src/euler.c \
|
||||
src/affine.c \
|
||||
@@ -159,13 +190,29 @@ libcglm_la_SOURCES=\
|
||||
src/curve.c \
|
||||
src/bezier.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/runner.c \
|
||||
test/src/test_common.c \
|
||||
test/src/tests.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_euler.c \
|
||||
test/src/test_bezier.c \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 🎥 OpenGL Mathematics (glm) for `C`
|
||||
[](https://travis-ci.org/recp/cglm)
|
||||
[](https://ci.appveyor.com/project/recp/cglm/branch/master)
|
||||
[](https://travis-ci.com/recp/cglm)
|
||||
[](https://ci.appveyor.com/project/recp/cglm/branch/master)
|
||||
[](http://cglm.readthedocs.io/en/latest/?badge=latest)
|
||||
[](https://coveralls.io/github/recp/cglm?branch=master)
|
||||
[](https://codecov.io/gh/recp/cglm)
|
||||
@@ -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.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.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:
|
||||
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>
|
||||
|
||||
## 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.
|
||||
- general purpose matrix operations (mat4, mat3)
|
||||
- chain matrix multiplication (square only)
|
||||
@@ -83,7 +86,7 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi
|
||||
- extract euler angles
|
||||
- inline or pre-compiled function call
|
||||
- frustum (extract view frustum planes, corners...)
|
||||
- bounding box (AABB in Frustum (culling), crop, merge...)
|
||||
- bounding box (AABB in Frustum (culling), crop, merge...)
|
||||
- bounding sphere
|
||||
- project, unproject
|
||||
- easing functions
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
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.
|
||||
* general purpose matrix operations (mat4, mat3)
|
||||
* 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
|
||||
|
||||
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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
**_mm_shuffle_ps** generates **shufps** instruction even if registers are same.
|
||||
|
||||
@@ -15,23 +15,17 @@ extern "C" {
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_frustum(float left,
|
||||
float right,
|
||||
float bottom,
|
||||
float top,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest);
|
||||
glmc_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
mat4 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ortho(float left,
|
||||
float right,
|
||||
float bottom,
|
||||
float top,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest);
|
||||
glmc_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
mat4 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
@@ -55,11 +49,7 @@ glmc_ortho_default_s(float aspect, float size, mat4 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_perspective(float fovy,
|
||||
float aspect,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest);
|
||||
glmc_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
@@ -88,8 +78,8 @@ glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest);
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp(mat4 proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal,
|
||||
float * __restrict nearZ,
|
||||
float * __restrict farZ,
|
||||
float * __restrict top,
|
||||
float * __restrict bottom,
|
||||
float * __restrict left,
|
||||
@@ -114,16 +104,16 @@ glmc_persp_decomp_y(mat4 proj,
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_z(mat4 proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal);
|
||||
float * __restrict nearZ,
|
||||
float * __restrict farZ);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal);
|
||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farZ);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal);
|
||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearZ);
|
||||
|
||||
CGLM_EXPORT
|
||||
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 */
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
/*
|
||||
Functions:
|
||||
CGLM_INLINE void glm_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal,
|
||||
CGLM_INLINE void glm_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
mat4 dest)
|
||||
CGLM_INLINE void glm_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal,
|
||||
CGLM_INLINE void glm_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
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)
|
||||
@@ -22,8 +22,8 @@
|
||||
CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest)
|
||||
CGLM_INLINE void glm_perspective(float fovy,
|
||||
float aspect,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
float nearZ,
|
||||
float farZ,
|
||||
mat4 dest)
|
||||
CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest)
|
||||
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_anyup(vec3 eye, vec3 dir, mat4 dest)
|
||||
CGLM_INLINE void glm_persp_decomp(mat4 proj,
|
||||
float *nearVal, float *farVal,
|
||||
float *top, float *bottom,
|
||||
float *left, float *right)
|
||||
float *nearZ, float *farZ,
|
||||
float *top, float *bottom,
|
||||
float *left, float *right)
|
||||
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_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_far(mat4 proj, float *farVal)
|
||||
CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearVal)
|
||||
CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farZ)
|
||||
CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearZ)
|
||||
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_vcam_h
|
||||
#define cglm_vcam_h
|
||||
#ifndef cglm_cam_h
|
||||
#define cglm_cam_h
|
||||
|
||||
#include "common.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
|
||||
*
|
||||
@@ -58,32 +93,25 @@
|
||||
* @param[in] right viewport.right
|
||||
* @param[in] bottom viewport.bottom
|
||||
* @param[in] top viewport.top
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping plane
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping plane
|
||||
* @param[out] dest result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal,
|
||||
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 / (farVal - nearVal);
|
||||
nv = 2.0f * nearVal;
|
||||
|
||||
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;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_frustum_lh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_frustum_lh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_frustum_rh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_frustum_rh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -93,31 +121,25 @@ glm_frustum(float left, float right,
|
||||
* @param[in] right viewport.right
|
||||
* @param[in] bottom viewport.bottom
|
||||
* @param[in] top viewport.top
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping plane
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping plane
|
||||
* @param[out] dest result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal,
|
||||
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 / (farVal - nearVal);
|
||||
|
||||
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] = (farVal + nearVal) * fn;
|
||||
dest[3][3] = 1.0f;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_lh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_ortho_lh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_ortho_rh_zo(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_ortho_rh_no(left, right, bottom, top, nearZ, farZ, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -131,10 +153,15 @@ glm_ortho(float left, float right,
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ortho_aabb(vec3 box[2], mat4 dest) {
|
||||
glm_ortho(box[0][0], box[1][0],
|
||||
box[0][1], box[1][1],
|
||||
-box[1][2], -box[0][2],
|
||||
dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_aabb_lh_zo(box, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
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
|
||||
void
|
||||
glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) {
|
||||
glm_ortho(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);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_aabb_p_lh_zo(box, padding, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
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
|
||||
void
|
||||
glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) {
|
||||
glm_ortho(box[0][0], box[1][0],
|
||||
box[0][1], box[1][1],
|
||||
-(box[1][2] + padding), -(box[0][2] - padding),
|
||||
dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_aabb_pz_lh_zo(box, padding, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
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
|
||||
void
|
||||
glm_ortho_default(float aspect, mat4 dest) {
|
||||
if (aspect >= 1.0f) {
|
||||
glm_ortho(-aspect, aspect, -1.0f, 1.0f, -100.0f, 100.0f, dest);
|
||||
return;
|
||||
}
|
||||
|
||||
aspect = 1.0f / aspect;
|
||||
|
||||
glm_ortho(-1.0f, 1.0f, -aspect, aspect, -100.0f, 100.0f, dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_default_lh_zo(aspect, dest);
|
||||
#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
|
||||
glm_ortho_default_rh_zo(aspect, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_ortho_default_rh_no(aspect, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -202,24 +240,15 @@ glm_ortho_default(float aspect, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
||||
if (aspect >= 1.0f) {
|
||||
glm_ortho(-size * aspect,
|
||||
size * aspect,
|
||||
-size,
|
||||
size,
|
||||
-size - 100.0f,
|
||||
size + 100.0f,
|
||||
dest);
|
||||
return;
|
||||
}
|
||||
|
||||
glm_ortho(-size,
|
||||
size,
|
||||
-size / aspect,
|
||||
size / aspect,
|
||||
-size - 100.0f,
|
||||
size + 100.0f,
|
||||
dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_ortho_default_s_lh_zo(aspect, size, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_ortho_default_s_lh_no(aspect, size, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_ortho_default_s_rh_zo(aspect, size, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_ortho_default_s_rh_no(aspect, size, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -227,29 +256,22 @@ glm_ortho_default_s(float aspect, float size, mat4 dest) {
|
||||
*
|
||||
* @param[in] fovy field of view angle
|
||||
* @param[in] aspect aspect ratio ( width / height )
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping planes
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping planes
|
||||
* @param[out] dest result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_perspective(float fovy,
|
||||
float aspect,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest) {
|
||||
float f, fn;
|
||||
|
||||
glm_mat4_zero(dest);
|
||||
|
||||
f = 1.0f / tanf(fovy * 0.5f);
|
||||
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;
|
||||
glm_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_perspective_lh_zo(fovy, aspect, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_perspective_lh_no(fovy, aspect, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_perspective_rh_zo(fovy, aspect, nearZ, farZ, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_perspective_rh_no(fovy, aspect, nearZ, farZ, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -263,17 +285,15 @@ glm_perspective(float fovy,
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_move_far(mat4 proj, float deltaFar) {
|
||||
float fn, farVal, nearVal, p22, p32;
|
||||
|
||||
p22 = proj[2][2];
|
||||
p32 = proj[3][2];
|
||||
|
||||
nearVal = p32 / (p22 - 1.0f);
|
||||
farVal = p32 / (p22 + 1.0f) + deltaFar;
|
||||
fn = 1.0f / (nearVal - farVal);
|
||||
|
||||
proj[2][2] = (nearVal + farVal) * fn;
|
||||
proj[3][2] = 2.0f * nearVal * farVal * fn;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_move_far_lh_zo(proj, deltaFar);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_move_far_lh_no(proj, deltaFar);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_move_far_rh_zo(proj, deltaFar);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_move_far_rh_no(proj, deltaFar);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -286,7 +306,15 @@ glm_persp_move_far(mat4 proj, float deltaFar) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
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
|
||||
void
|
||||
glm_lookat(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;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||
glm_lookat_lh(eye, center, up, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_RH_BIT
|
||||
glm_lookat_rh(eye, center, up, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -361,9 +372,11 @@ glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) {
|
||||
CGLM_ALIGN(8) vec3 target;
|
||||
glm_vec3_add(eye, dir, target);
|
||||
glm_lookat(eye, target, up, dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||
glm_look_lh(eye, dir, 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
|
||||
void
|
||||
glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||
CGLM_ALIGN(8) vec3 up;
|
||||
glm_vec3_ortho(dir, up);
|
||||
glm_look(eye, dir, up, dest);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL & CGLM_CLIP_CONTROL_LH_BIT
|
||||
glm_look_anyup_lh(eye, dir, 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.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[out] farVal far
|
||||
* @param[out] nearZ near
|
||||
* @param[out] farZ far
|
||||
* @param[out] top top
|
||||
* @param[out] bottom bottom
|
||||
* @param[out] left left
|
||||
@@ -398,31 +413,18 @@ glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_decomp(mat4 proj,
|
||||
float * __restrict nearVal, float * __restrict farVal,
|
||||
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;
|
||||
|
||||
*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);
|
||||
float * __restrict nearZ, float * __restrict farZ,
|
||||
float * __restrict top, float * __restrict bottom,
|
||||
float * __restrict left, float * __restrict right) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_decomp_lh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_decomp_lh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_decomp_rh_zo(proj, nearZ, farZ, top, bottom, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_decomp_rh_no(proj, nearZ, farZ, top, bottom, left, right);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -435,8 +437,15 @@ glm_persp_decomp(mat4 proj,
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_decompv(mat4 proj, float dest[6]) {
|
||||
glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2],
|
||||
&dest[3], &dest[4], &dest[5]);
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
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,
|
||||
float * __restrict left,
|
||||
float * __restrict right) {
|
||||
float nearVal, m20, m00;
|
||||
|
||||
m00 = proj[0][0];
|
||||
m20 = proj[2][0];
|
||||
|
||||
nearVal = proj[3][2] / (proj[3][3] - 1.0f);
|
||||
*left = nearVal * (m20 - 1.0f) / m00;
|
||||
*right = nearVal * (m20 + 1.0f) / m00;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_decomp_x_lh_zo(proj, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_decomp_x_lh_no(proj, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_decomp_x_rh_zo(proj, left, right);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_decomp_x_rh_no(proj, left, right);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -475,14 +485,15 @@ void
|
||||
glm_persp_decomp_y(mat4 proj,
|
||||
float * __restrict top,
|
||||
float * __restrict bottom) {
|
||||
float nearVal, m21, m11;
|
||||
|
||||
m21 = proj[2][1];
|
||||
m11 = proj[1][1];
|
||||
|
||||
nearVal = proj[3][2] / (proj[3][3] - 1.0f);
|
||||
*bottom = nearVal * (m21 - 1) / m11;
|
||||
*top = nearVal * (m21 + 1) / m11;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_decomp_y_lh_zo(proj, top, bottom);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_decomp_y_lh_no(proj, top, bottom);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_decomp_y_rh_zo(proj, top, bottom);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
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)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[out] farVal far
|
||||
* @param[out] nearZ near
|
||||
* @param[out] farZ far
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_decomp_z(mat4 proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal) {
|
||||
float m32, m22;
|
||||
|
||||
m32 = proj[3][2];
|
||||
m22 = proj[2][2];
|
||||
|
||||
*nearVal = m32 / (m22 - 1.0f);
|
||||
*farVal = m32 / (m22 + 1.0f);
|
||||
glm_persp_decomp_z(mat4 proj, float * __restrict nearZ, float * __restrict farZ) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_decomp_z_lh_zo(proj, nearZ, farZ);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_decomp_z_lh_no(proj, nearZ, farZ);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_decomp_z_rh_zo(proj, nearZ, farZ);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_decomp_z_rh_no(proj, nearZ, farZ);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief decomposes far value of perspective projection.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] farVal far
|
||||
* @param[out] farZ far
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
||||
*farVal = proj[3][2] / (proj[2][2] + 1.0f);
|
||||
glm_persp_decomp_far(mat4 proj, float * __restrict farZ) {
|
||||
#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.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearZ near
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
||||
*nearVal = proj[3][2] / (proj[2][2] - 1.0f);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @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];
|
||||
glm_persp_decomp_near(mat4 proj, float * __restrict nearZ) {
|
||||
#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);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_decomp_near_rh_zo(proj, nearZ);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_decomp_near_rh_no(proj, nearZ);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -566,17 +568,15 @@ glm_persp_aspect(mat4 proj) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_persp_sizes(mat4 proj, float fovy, vec4 dest) {
|
||||
float t, a, nearVal, farVal;
|
||||
|
||||
t = 2.0f * tanf(fovy * 0.5f);
|
||||
a = glm_persp_aspect(proj);
|
||||
|
||||
glm_persp_decomp_z(proj, &nearVal, &farVal);
|
||||
|
||||
dest[1] = t * nearVal;
|
||||
dest[3] = t * farVal;
|
||||
dest[0] = a * dest[1];
|
||||
dest[2] = a * dest[3];
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
glm_persp_sizes_lh_zo(proj, fovy, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
glm_persp_sizes_lh_no(proj, fovy, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
glm_persp_sizes_rh_zo(proj, fovy, dest);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||
glm_persp_sizes_rh_no(proj, fovy, dest);
|
||||
#endif
|
||||
}
|
||||
|
||||
#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
|
||||
#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 */
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#define cglm_plane_h
|
||||
|
||||
#include "common.h"
|
||||
#include "vec3.h"
|
||||
#include "vec4.h"
|
||||
|
||||
/*
|
||||
|
||||
@@ -642,9 +642,12 @@ glm_quat_lerpc(versor from, versor to, float t, versor dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_quat_nlerp(versor from, versor to, float t, versor dest) {
|
||||
float dot = glm_vec4_dot(from, to);
|
||||
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_normalize(dest);
|
||||
}
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
Functions:
|
||||
CGLM_INLINE mat4s glms_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal)
|
||||
float nearZ, float farZ)
|
||||
CGLM_INLINE mat4s glms_ortho(float left, float right,
|
||||
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_p(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_perspective(float fovy,
|
||||
float aspect,
|
||||
float nearVal,
|
||||
float farVal)
|
||||
float nearZ,
|
||||
float farZ)
|
||||
CGLM_INLINE void glms_persp_move_far(mat4s proj, float deltaFar)
|
||||
CGLM_INLINE mat4s glms_perspective_default(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_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_far(mat4s proj, float *farVal)
|
||||
CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearVal)
|
||||
CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farZ)
|
||||
CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearZ)
|
||||
CGLM_INLINE float glms_persp_fovy(mat4s proj)
|
||||
CGLM_INLINE float glms_persp_aspect(mat4s proj)
|
||||
CGLM_INLINE vec4s glms_persp_sizes(mat4s proj, float fovy)
|
||||
@@ -51,6 +51,39 @@
|
||||
#include "../plane.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
|
||||
*
|
||||
@@ -58,18 +91,24 @@
|
||||
* @param[in] right viewport.right
|
||||
* @param[in] bottom viewport.bottom
|
||||
* @param[in] top viewport.top
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping plane
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping plane
|
||||
* @returns result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
glms_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal) {
|
||||
mat4s dest;
|
||||
glm_frustum(left, right, bottom, top, nearVal, farVal, dest.raw);
|
||||
return dest;
|
||||
glms_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_frustum_lh_zo(left, right, bottom, top, nearZ, farZ);
|
||||
#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] bottom viewport.bottom
|
||||
* @param[in] top viewport.top
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping plane
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping plane
|
||||
* @returns result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
glms_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearVal, float farVal) {
|
||||
mat4s dest;
|
||||
glm_ortho(left, right, bottom, top, nearVal, farVal, dest.raw);
|
||||
return dest;
|
||||
glms_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_lh_zo(left, right, bottom, top, nearZ, farZ);
|
||||
#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
|
||||
mat4s
|
||||
glms_ortho_aabb(vec3s box[2]) {
|
||||
mat4s dest;
|
||||
vec3 rawBox[2];
|
||||
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glm_ortho_aabb(rawBox, dest.raw);
|
||||
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_aabb_lh_zo(box);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
return glms_ortho_aabb_lh_no(box);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
return glms_ortho_aabb_rh_zo(box);
|
||||
#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
|
||||
mat4s
|
||||
glms_ortho_aabb_p(vec3s box[2], float padding) {
|
||||
mat4s dest;
|
||||
vec3 rawBox[2];
|
||||
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glm_ortho_aabb_p(rawBox, padding, dest.raw);
|
||||
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_aabb_p_lh_zo(box, padding);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
return glms_ortho_aabb_p_lh_no(box, padding);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
return glms_ortho_aabb_p_rh_zo(box, padding);
|
||||
#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
|
||||
mat4s
|
||||
glms_ortho_aabb_pz(vec3s box[2], float padding) {
|
||||
mat4s dest;
|
||||
vec3 rawBox[2];
|
||||
|
||||
glms_vec3_unpack(rawBox, box, 2);
|
||||
glm_ortho_aabb_pz(rawBox, padding, dest.raw);
|
||||
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_aabb_pz_lh_zo(box, padding);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||
return glms_ortho_aabb_pz_lh_no(box, padding);
|
||||
#elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||
return glms_ortho_aabb_pz_rh_zo(box, padding);
|
||||
#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
|
||||
mat4s
|
||||
glms_ortho_default(float aspect) {
|
||||
mat4s dest;
|
||||
glm_ortho_default(aspect, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_default_lh_zo(aspect);
|
||||
#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
|
||||
mat4s
|
||||
glms_ortho_default_s(float aspect, float size) {
|
||||
mat4s dest;
|
||||
glm_ortho_default_s(aspect, size, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_ortho_default_s_lh_zo(aspect, size);
|
||||
#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] aspect aspect ratio ( width / height )
|
||||
* @param[in] nearVal near clipping plane
|
||||
* @param[in] farVal far clipping planes
|
||||
* @param[in] nearZ near clipping plane
|
||||
* @param[in] farZ far clipping planes
|
||||
* @returns result matrix
|
||||
*/
|
||||
CGLM_INLINE
|
||||
mat4s
|
||||
glms_perspective(float fovy, float aspect, float nearVal, float farVal) {
|
||||
mat4s dest;
|
||||
glm_perspective(fovy, aspect, nearVal, farVal, dest.raw);
|
||||
return dest;
|
||||
glms_perspective(float fovy, float aspect, float nearZ, float farZ) {
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_perspective_lh_zo(fovy, aspect, nearZ, farZ);
|
||||
#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
|
||||
*
|
||||
* 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!
|
||||
*
|
||||
* @param[in, out] proj projection matrix to extend
|
||||
* @param[in] deltaFar distance from existing far (negative to shink)
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
mat4s
|
||||
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
|
||||
mat4s
|
||||
glms_perspective_default(float aspect) {
|
||||
mat4s dest;
|
||||
glm_perspective_default(aspect, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_perspective_default_lh_zo(aspect);
|
||||
#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
|
||||
* 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] aspect aspect ratio ( width / height )
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
mat4s
|
||||
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
|
||||
mat4s
|
||||
glms_lookat(vec3s eye, vec3s center, vec3s up) {
|
||||
mat4s dest;
|
||||
glm_lookat(eye.raw, center.raw, up.raw, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_lookat_lh_zo(eye, center, up);
|
||||
#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
|
||||
mat4s
|
||||
glms_look(vec3s eye, vec3s dir, vec3s up) {
|
||||
mat4s dest;
|
||||
glm_look(eye.raw, dir.raw, up.raw, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_look_lh_zo(eye, dir, up);
|
||||
#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
|
||||
mat4s
|
||||
glms_look_anyup(vec3s eye, vec3s dir) {
|
||||
mat4s dest;
|
||||
glm_look_anyup(eye.raw, dir.raw, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_look_anyup_lh_zo(eye, dir);
|
||||
#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.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[out] farVal far
|
||||
* @param[out] nearZ near
|
||||
* @param[out] farZ far
|
||||
* @param[out] top top
|
||||
* @param[out] bottom bottom
|
||||
* @param[out] left left
|
||||
@@ -317,10 +434,18 @@ glms_look_anyup(vec3s eye, vec3s dir) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_persp_decomp(mat4s proj,
|
||||
float * __restrict nearVal, float * __restrict farVal,
|
||||
float * __restrict top, float * __restrict bottom,
|
||||
float * __restrict left, float * __restrict right) {
|
||||
glm_persp_decomp(proj.raw, nearVal, farVal, top, bottom, left, right);
|
||||
float * __restrict nearZ, float * __restrict farZ,
|
||||
float * __restrict top, float * __restrict bottom,
|
||||
float * __restrict left, float * __restrict 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
|
||||
void
|
||||
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,
|
||||
float * __restrict left,
|
||||
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,
|
||||
float * __restrict top,
|
||||
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)
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[out] farVal far
|
||||
* @param[out] nearZ near
|
||||
* @param[out] farZ far
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_persp_decomp_z(mat4s proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal) {
|
||||
glm_persp_decomp_z(proj.raw, nearVal, farVal);
|
||||
float * __restrict nearZ,
|
||||
float * __restrict farZ) {
|
||||
#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.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] farVal far
|
||||
* @param[out] farZ far
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_persp_decomp_far(mat4s proj, float * __restrict farVal) {
|
||||
glm_persp_decomp_far(proj.raw, farVal);
|
||||
glms_persp_decomp_far(mat4s proj, float * __restrict farZ) {
|
||||
#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.
|
||||
*
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearVal near
|
||||
* @param[in] proj perspective projection matrix
|
||||
* @param[out] nearZ near
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) {
|
||||
glm_persp_decomp_near(proj.raw, nearVal);
|
||||
glms_persp_decomp_near(mat4s proj, float * __restrict nearZ) {
|
||||
#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
|
||||
float
|
||||
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
|
||||
float
|
||||
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
|
||||
vec4s
|
||||
glms_persp_sizes(mat4s proj, float fovy) {
|
||||
vec4s dest;
|
||||
glm_persp_sizes(proj.raw, fovy, dest.raw);
|
||||
return dest;
|
||||
#if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||
return glms_persp_sizes_lh_zo(proj, fovy);
|
||||
#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 */
|
||||
|
||||
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 */
|
||||
34
meson.build
34
meson.build
@@ -1,5 +1,5 @@
|
||||
project('cglm', 'c',
|
||||
version : '0.8.3',
|
||||
version : '0.8.3',
|
||||
license : 'mit',
|
||||
default_options : [
|
||||
'c_std=c11',
|
||||
@@ -48,14 +48,28 @@ cglm_src = files(
|
||||
'src/sphere.c',
|
||||
'src/vec2.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_src,
|
||||
install : cglm_install,
|
||||
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(
|
||||
@@ -88,17 +102,21 @@ if get_option('build_tests') == true
|
||||
|
||||
test_src = files(
|
||||
'test/runner.c',
|
||||
'test/src/test_euler.c',
|
||||
'test/src/test_bezier.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_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_src,
|
||||
test_exe = executable('tests',
|
||||
test_src,
|
||||
dependencies : cglm_dep,
|
||||
c_args : '-DGLM_TESTS_NO_COLORFUL_OUTPUT'
|
||||
)
|
||||
|
||||
73
src/cam.c
73
src/cam.c
@@ -10,38 +10,20 @@
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_frustum(float left,
|
||||
float right,
|
||||
float bottom,
|
||||
float top,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
glmc_frustum(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
mat4 dest) {
|
||||
glm_frustum(left,
|
||||
right,
|
||||
bottom,
|
||||
top,
|
||||
nearVal,
|
||||
farVal,
|
||||
dest);
|
||||
glm_frustum(left, right, bottom, top, nearZ, farZ, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_ortho(float left,
|
||||
float right,
|
||||
float bottom,
|
||||
float top,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest) {
|
||||
glm_ortho(left,
|
||||
right,
|
||||
bottom,
|
||||
top,
|
||||
nearVal,
|
||||
farVal,
|
||||
dest);
|
||||
glmc_ortho(float left, float right,
|
||||
float bottom, float top,
|
||||
float nearZ, float farZ,
|
||||
mat4 dest) {
|
||||
glm_ortho(left, right, bottom, top, nearZ, farZ, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
@@ -76,16 +58,8 @@ glmc_ortho_default_s(float aspect, float size, mat4 dest) {
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_perspective(float fovy,
|
||||
float aspect,
|
||||
float nearVal,
|
||||
float farVal,
|
||||
mat4 dest) {
|
||||
glm_perspective(fovy,
|
||||
aspect,
|
||||
nearVal,
|
||||
farVal,
|
||||
dest);
|
||||
glmc_perspective(float fovy, float aspect, float nearZ, float farZ, mat4 dest) {
|
||||
glm_perspective(fovy, aspect, nearZ, farZ, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
@@ -108,10 +82,7 @@ glmc_perspective_resize(float aspect, mat4 proj) {
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_lookat(vec3 eye,
|
||||
vec3 center,
|
||||
vec3 up,
|
||||
mat4 dest) {
|
||||
glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) {
|
||||
glm_lookat(eye, center, up, dest);
|
||||
}
|
||||
|
||||
@@ -130,13 +101,13 @@ glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) {
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp(mat4 proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal,
|
||||
float * __restrict nearZ,
|
||||
float * __restrict farZ,
|
||||
float * __restrict top,
|
||||
float * __restrict bottom,
|
||||
float * __restrict left,
|
||||
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
|
||||
@@ -164,21 +135,21 @@ glmc_persp_decomp_y(mat4 proj,
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_z(mat4 proj,
|
||||
float * __restrict nearVal,
|
||||
float * __restrict farVal) {
|
||||
glm_persp_decomp_z(proj, nearVal, farVal);
|
||||
float * __restrict nearZ,
|
||||
float * __restrict farZ) {
|
||||
glm_persp_decomp_z(proj, nearZ, farZ);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) {
|
||||
glm_persp_decomp_far(proj, farVal);
|
||||
glmc_persp_decomp_far(mat4 proj, float * __restrict farZ) {
|
||||
glm_persp_decomp_far(proj, farZ);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) {
|
||||
glm_persp_decomp_near(proj, nearVal);
|
||||
glmc_persp_decomp_near(mat4 proj, float * __restrict nearZ) {
|
||||
glm_persp_decomp_near(proj, nearZ);
|
||||
}
|
||||
|
||||
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_bezier.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_clamp.c
|
||||
src/test_common.c
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
# define _GNU_SOURCE /* for drand48() */
|
||||
#endif
|
||||
|
||||
#ifndef CGLM_CLIPSPACE_INCLUDE_ALL
|
||||
# define CGLM_CLIPSPACE_INCLUDE_ALL
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -27,14 +27,14 @@ TEST_IMPL(camera_lookat) {
|
||||
TEST_IMPL(camera_decomp) {
|
||||
mat4 proj, proj2;
|
||||
vec4 sizes;
|
||||
float aspect, fovy, nearVal, farVal;
|
||||
float aspect, fovy, nearZ, farZ;
|
||||
|
||||
aspect = 0.782f;
|
||||
fovy = glm_rad(49.984f);
|
||||
nearVal = 0.1f;
|
||||
farVal = 100.0f;
|
||||
nearZ = 0.1f;
|
||||
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(fovy - 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[1] * 0.5f,
|
||||
sizes[1] * 0.5f,
|
||||
nearVal,
|
||||
farVal,
|
||||
nearZ,
|
||||
farZ,
|
||||
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_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_decomp)
|
||||
|
||||
@@ -946,7 +950,11 @@ TEST_LIST {
|
||||
TEST_ENTRY(glmc_mat2_swap_row)
|
||||
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_decomp)
|
||||
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
<ClCompile Include="..\test\src\tests.c" />
|
||||
<ClCompile Include="..\test\src\test_bezier.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_common.c" />
|
||||
<ClCompile Include="..\test\src\test_euler.c" />
|
||||
|
||||
@@ -35,6 +35,18 @@
|
||||
<ClCompile Include="..\test\src\tests.c">
|
||||
<Filter>src</Filter>
|
||||
</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>
|
||||
<ClInclude Include="..\test\tests.h">
|
||||
|
||||
@@ -24,6 +24,18 @@
|
||||
<ClCompile Include="..\src\bezier.c" />
|
||||
<ClCompile Include="..\src\box.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\ease.c" />
|
||||
<ClCompile Include="..\src\euler.c" />
|
||||
@@ -54,6 +66,18 @@
|
||||
<ClInclude Include="..\include\cglm\call\bezier.h" />
|
||||
<ClInclude Include="..\include\cglm\call\box.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\ease.h" />
|
||||
<ClInclude Include="..\include\cglm\call\euler.h" />
|
||||
@@ -72,6 +96,21 @@
|
||||
<ClInclude Include="..\include\cglm\call\vec4.h" />
|
||||
<ClInclude Include="..\include\cglm\cam.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\common.h" />
|
||||
<ClInclude Include="..\include\cglm\curve.h" />
|
||||
@@ -106,6 +145,18 @@
|
||||
<ClInclude Include="..\include\cglm\struct\affine2d.h" />
|
||||
<ClInclude Include="..\include\cglm\struct\box.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\curve.h" />
|
||||
<ClInclude Include="..\include\cglm\struct\euler.h" />
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<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">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
@@ -33,6 +29,18 @@
|
||||
<Filter Include="include\cglm\struct">
|
||||
<UniqueIdentifier>{0b5febe7-a88d-4330-94ae-305897a5e957}</UniqueIdentifier>
|
||||
</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>
|
||||
<ClCompile Include="..\src\affine.c">
|
||||
@@ -98,6 +106,42 @@
|
||||
<ClCompile Include="..\src\affine2d.c">
|
||||
<Filter>src</Filter>
|
||||
</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>
|
||||
<ClInclude Include="..\src\config.h">
|
||||
@@ -379,5 +423,122 @@
|
||||
<ClInclude Include="..\include\cglm\simd\neon\quat.h">
|
||||
<Filter>include\cglm\simd\neon</Filter>
|
||||
</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>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user