mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95161f7776 | ||
|
|
f0942c13a1 | ||
|
|
8eddeb77d0 | ||
|
|
cbed29820b | ||
|
|
3ec6bad5b3 | ||
|
|
fefc3dc32d | ||
|
|
203d40208c | ||
|
|
c45445c613 | ||
|
|
73c6766806 | ||
|
|
65dff25ed5 | ||
|
|
c2584c0fe6 | ||
|
|
bd951f96be | ||
|
|
1200372ced | ||
|
|
75a5ca153d | ||
|
|
5a9593d9bc |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -73,3 +73,5 @@ cglm-test-ios*
|
|||||||
test-driver
|
test-driver
|
||||||
Default-568h@2x.png
|
Default-568h@2x.png
|
||||||
build/
|
build/
|
||||||
|
conftest.dir/*
|
||||||
|
confdefs.h
|
||||||
|
|||||||
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"C_Cpp.default.configurationProvider": "vector-of-bool.cmake-tools",
|
||||||
|
"restructuredtext.confPath": "${workspaceFolder}/docs/source"
|
||||||
|
}
|
||||||
@@ -1,6 +1,11 @@
|
|||||||
cmake_minimum_required(VERSION 3.8.2)
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
project(cglm LANGUAGES C)
|
project(cglm LANGUAGES C)
|
||||||
|
|
||||||
|
set(CGLM_VERSION_MAJOR 0)
|
||||||
|
set(CGLM_VERSION_MINOR 7)
|
||||||
|
set(CGLM_VERSION_PATCH 3)
|
||||||
|
set(CGLM_VERSION ${CGLM_VERSION_MAJOR}.${CGLM_VERSION_MINOR}.${CGLM_VERSION_PATCH})
|
||||||
|
|
||||||
set(C_STANDARD 11)
|
set(C_STANDARD 11)
|
||||||
set(C_STANDARD_REQUIRED YES)
|
set(C_STANDARD_REQUIRED YES)
|
||||||
|
|
||||||
@@ -163,6 +168,9 @@ add_library(cglm
|
|||||||
src/ray.c
|
src/ray.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set_target_properties(cglm PROPERTIES VERSION ${CGLM_VERSION}
|
||||||
|
SOVERSION ${CGLM_VERSION_MAJOR})
|
||||||
|
|
||||||
target_include_directories(cglm PUBLIC
|
target_include_directories(cglm PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
|
|||||||
|
|
||||||
# Description
|
# Description
|
||||||
s.name = "cglm"
|
s.name = "cglm"
|
||||||
s.version = "0.6.1"
|
s.version = "0.7.2"
|
||||||
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C"
|
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C"
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features.
|
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.7.2], [info@recp.me])
|
AC_INIT([cglm], [0.7.3], [info@recp.me])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
|
||||||
|
|
||||||
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.
|
||||||
|
|||||||
@@ -7,6 +7,46 @@ Build cglm
|
|||||||
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
If you only need to inline versions, you don't need to build **cglm**, you don't need to link it to your program.
|
||||||
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
Just import cglm to your project as dependency / external lib by copy-paste then use it as usual
|
||||||
|
|
||||||
|
CMake (All platforms):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake .. # [Optional] -DCGLM_SHARED=ON
|
||||||
|
$ make
|
||||||
|
$ sudo make install # [Optional]
|
||||||
|
|
||||||
|
**make** will build cglm to **build** folder.
|
||||||
|
If you don't want to install **cglm** to your system's folder you can get static and dynamic libs in this folder.
|
||||||
|
|
||||||
|
**CMake Options:**
|
||||||
|
|
||||||
|
.. code-block:: CMake
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
option(CGLM_SHARED "Shared build" ON)
|
||||||
|
option(CGLM_STATIC "Static build" OFF)
|
||||||
|
option(CGLM_USE_C99 "" OFF) # C11
|
||||||
|
option(CGLM_USE_TEST "Enable Tests" OFF) # for make check - make test
|
||||||
|
|
||||||
|
**Use with your CMake project example**
|
||||||
|
|
||||||
|
.. code-block:: CMake
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
|
|
||||||
|
project(<Your Project Name>)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} src/main.c)
|
||||||
|
target_link_libraries(${LIBRARY_NAME} PRIVATE
|
||||||
|
cglm)
|
||||||
|
|
||||||
|
add_subdirectory(external/cglm/)
|
||||||
|
|
||||||
Unix (Autotools):
|
Unix (Autotools):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = u'0.7.2'
|
version = u'0.7.3'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.7.2'
|
release = u'0.7.3'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
Features
|
Features
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
* array api and struct api, you can use arrays or structs.
|
||||||
* general purpose matrix operations (mat4, mat3)
|
* general purpose matrix operations (mat4, mat3)
|
||||||
* chain matrix multiplication (square only)
|
* chain matrix multiplication (square only)
|
||||||
* general purpose vector operations (cross, dot, rotate, proj, angle...)
|
* general purpose vector operations (cross, dot, rotate, proj, angle...)
|
||||||
* affine transforms
|
* affine transformations
|
||||||
* matrix decomposition (extract rotation, scaling factor)
|
* matrix decomposition (extract rotation, scaling factor)
|
||||||
* optimized affine transform matrices (mul, rigid-body inverse)
|
* optimized affine transform matrices (mul, rigid-body inverse)
|
||||||
* camera (lookat)
|
* camera (lookat)
|
||||||
@@ -20,4 +21,6 @@ Features
|
|||||||
* easing functions
|
* easing functions
|
||||||
* curves
|
* curves
|
||||||
* curve interpolation helpers (SMC, deCasteljau...)
|
* curve interpolation helpers (SMC, deCasteljau...)
|
||||||
* and other...
|
* helpers to convert cglm types to Apple's simd library to pass cglm types to Metal GL without packing them on both sides
|
||||||
|
* ray intersection helpers
|
||||||
|
* and others...
|
||||||
|
|||||||
@@ -28,6 +28,23 @@ Example to print mat4 matrix:
|
|||||||
(you probably will in some cases), you can change it temporary.
|
(you probably will in some cases), you can change it temporary.
|
||||||
cglm may provide precision parameter in the future
|
cglm may provide precision parameter in the future
|
||||||
|
|
||||||
|
Changes since **v0.7.3**:
|
||||||
|
* Now mis-alignment of columns are fixed: larger numbers are printed via %g and others are printed via %f. Column withs are calculated before print.
|
||||||
|
* Now values are colorful ;)
|
||||||
|
* Some print improvements
|
||||||
|
* New options with default values:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#define CGLM_PRINT_PRECISION 5
|
||||||
|
#define CGLM_PRINT_MAX_TO_SHORT 1e5
|
||||||
|
#define CGLM_PRINT_COLOR "\033[36m"
|
||||||
|
#define CGLM_PRINT_COLOR_RESET "\033[0m"
|
||||||
|
|
||||||
|
* Inline prints are only enabled in DEBUG mode and if **CGLM_DEFINE_PRINTS** is defined.
|
||||||
|
|
||||||
|
Check options page.
|
||||||
|
|
||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
@@ -50,3 +50,24 @@ You have to extra options for dot product: **CGLM_SSE4_DOT** and **CGLM_SSE3_DOT
|
|||||||
- If **SSE3** is enabled then you can define **CGLM_SSE3_DOT** to force cglm to use **_mm_hadd_ps** instructions.
|
- If **SSE3** is enabled then you can define **CGLM_SSE3_DOT** to force cglm to use **_mm_hadd_ps** instructions.
|
||||||
|
|
||||||
otherwise cglm will use custom cglm's hadd functions which are optimized too.
|
otherwise cglm will use custom cglm's hadd functions which are optimized too.
|
||||||
|
|
||||||
|
Print Options
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
1. **CGLM_DEFINE_PRINTS**
|
||||||
|
2. **CGLM_NO_PRINTS_NOOP**
|
||||||
|
|
||||||
|
Inline prints are only enabled in DEBUG mode and if **CGLM_DEFINE_PRINTS** is defined.
|
||||||
|
If DEBUG is not enabled then print function bodies will be emptied to eliminate print function calls.
|
||||||
|
You can disable this feature too by defining **CGLM_NO_PRINTS_NOOP** macro top of cglm headers.
|
||||||
|
|
||||||
|
3. **CGLM_PRINT_PRECISION** 5
|
||||||
|
|
||||||
|
precision.
|
||||||
|
|
||||||
|
4. **CGLM_PRINT_MAX_TO_SHORT** 1e5
|
||||||
|
|
||||||
|
if a number is greater than this value then %g will be used, since this is shorten print you won't be able to see high precision.
|
||||||
|
|
||||||
|
5. **CGLM_PRINT_COLOR** "\033[36m"
|
||||||
|
6. **CGLM_PRINT_COLOR_RESET** "\033[0m"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#ifndef cglmc_io_h
|
#ifndef cglmc_io_h
|
||||||
#define cglmc_io_h
|
#define cglmc_io_h
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
#ifndef cglm_common_h
|
#ifndef cglm_common_h
|
||||||
#define cglm_common_h
|
#define cglm_common_h
|
||||||
|
|
||||||
#define _USE_MATH_DEFINES /* for windows */
|
#define _USE_MATH_DEFINES /* for windows */
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS /* for windows */
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|||||||
@@ -55,8 +55,6 @@ typedef enum glm_euler_seq {
|
|||||||
GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4
|
GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4
|
||||||
} glm_euler_seq;
|
} glm_euler_seq;
|
||||||
|
|
||||||
typedef glm_euler_seq glm_euler_sq;
|
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
glm_euler_seq
|
glm_euler_seq
|
||||||
glm_euler_order(int ord[3]) {
|
glm_euler_order(int ord[3]) {
|
||||||
|
|||||||
@@ -17,67 +17,99 @@
|
|||||||
|
|
||||||
#ifndef cglm_io_h
|
#ifndef cglm_io_h
|
||||||
#define cglm_io_h
|
#define cglm_io_h
|
||||||
|
#if defined(DEBUG) || defined(_DEBUG) \
|
||||||
|
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC)
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define CGLM_PRINT_PRECISION 5
|
||||||
|
#define CGLM_PRINT_MAX_TO_SHORT 1e5
|
||||||
|
#define CGLM_PRINT_COLOR "\033[36m"
|
||||||
|
#define CGLM_PRINT_COLOR_RESET "\033[0m"
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_print(mat4 matrix,
|
glm_mat4_print(mat4 matrix,
|
||||||
FILE * __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
char buff[16];
|
||||||
int j;
|
int i, j, cw[4], cwi;
|
||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
#define n 4
|
#define n 4
|
||||||
|
|
||||||
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
|
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n" , m, n);
|
||||||
|
|
||||||
|
cw[0] = cw[1] = cw[2] = cw[3] = 0;
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "\t|");
|
|
||||||
for (j = 0; j < n; j++) {
|
for (j = 0; j < n; j++) {
|
||||||
fprintf(ostream, "%0.4f", matrix[j][i]);;
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
|
||||||
if (j != n - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
cwi = sprintf(buff, "% g", matrix[i][j]);
|
||||||
|
cw[i] = GLM_MAX(cw[i], cwi);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "\n");
|
for (i = 0; i < m; i++) {
|
||||||
|
fprintf(ostream, " |");
|
||||||
|
|
||||||
|
for (j = 0; j < n; j++)
|
||||||
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
|
||||||
|
else
|
||||||
|
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
|
||||||
|
|
||||||
|
fprintf(ostream, " |\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
#undef n
|
#undef n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_print(mat3 matrix,
|
glm_mat3_print(mat3 matrix,
|
||||||
FILE * __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
char buff[16];
|
||||||
int j;
|
int i, j, cw[4], cwi;
|
||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
#define n 3
|
#define n 3
|
||||||
|
|
||||||
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
|
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n", m, n);
|
||||||
|
|
||||||
|
cw[0] = cw[1] = cw[2] = 0;
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "\t|");
|
|
||||||
for (j = 0; j < n; j++) {
|
for (j = 0; j < n; j++) {
|
||||||
fprintf(ostream, "%0.4f", matrix[j][i]);;
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
|
||||||
if (j != n - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
cwi = sprintf(buff, "% g", matrix[i][j]);
|
||||||
|
cw[i] = GLM_MAX(cw[i], cwi);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "\n");
|
for (i = 0; i < m; i++) {
|
||||||
|
fprintf(ostream, " |");
|
||||||
|
|
||||||
|
for (j = 0; j < n; j++)
|
||||||
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
|
||||||
|
else
|
||||||
|
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
|
||||||
|
|
||||||
|
fprintf(ostream, " |\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
#undef n
|
#undef n
|
||||||
@@ -87,27 +119,39 @@ CGLM_INLINE
|
|||||||
void
|
void
|
||||||
glm_mat2_print(mat2 matrix,
|
glm_mat2_print(mat2 matrix,
|
||||||
FILE * __restrict ostream) {
|
FILE * __restrict ostream) {
|
||||||
int i;
|
char buff[16];
|
||||||
int j;
|
int i, j, cw[4], cwi;
|
||||||
|
|
||||||
#define m 2
|
#define m 2
|
||||||
#define n 2
|
#define n 2
|
||||||
|
|
||||||
fprintf(ostream, "Matrix (float%dx%d):\n", m, n);
|
fprintf(ostream, "Matrix (float%dx%d): " CGLM_PRINT_COLOR "\n", m, n);
|
||||||
|
|
||||||
|
cw[0] = cw[1] = 0;
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "\t|");
|
|
||||||
for (j = 0; j < n; j++) {
|
for (j = 0; j < n; j++) {
|
||||||
fprintf(ostream, "%0.4f", matrix[j][i]);;
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
cwi = sprintf(buff, "% .*f", CGLM_PRINT_PRECISION, matrix[i][j]);
|
||||||
if (j != n - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
cwi = sprintf(buff, "% g", matrix[i][j]);
|
||||||
|
cw[i] = GLM_MAX(cw[i], cwi);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "\n");
|
for (i = 0; i < m; i++) {
|
||||||
|
fprintf(ostream, " |");
|
||||||
|
|
||||||
|
for (j = 0; j < n; j++)
|
||||||
|
if (matrix[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % *.*f", cw[j], CGLM_PRINT_PRECISION, matrix[j][i]);
|
||||||
|
else
|
||||||
|
fprintf(ostream, " % *g", cw[j], matrix[j][i]);
|
||||||
|
|
||||||
|
fprintf(ostream, " |\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
#undef n
|
#undef n
|
||||||
@@ -121,16 +165,16 @@ glm_vec4_print(vec4 vec,
|
|||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
|
|
||||||
fprintf(ostream, "Vector (float%d):\n\t|", m);
|
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "%0.4f", vec[i]);
|
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
|
||||||
if (i != m - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
fprintf(ostream, " % g", vec[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n\n");
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
@@ -143,16 +187,16 @@ glm_vec3_print(vec3 vec,
|
|||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
|
|
||||||
fprintf(ostream, "Vector (float%d):\n\t|", m);
|
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "%0.4f", vec[i]);
|
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
|
||||||
if (i != m - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
fprintf(ostream, " % g", vec[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n\n");
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
@@ -165,16 +209,12 @@ glm_ivec3_print(ivec3 vec,
|
|||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
|
|
||||||
fprintf(ostream, "Vector (int%d):\n\t|", m);
|
fprintf(ostream, "Vector (int%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++)
|
||||||
fprintf(ostream, "%d", vec[i]);
|
fprintf(ostream, " % d", vec[i]);
|
||||||
|
|
||||||
if (i != m - 1)
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
fprintf(ostream, "\t");
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(ostream, "|\n\n");
|
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
@@ -187,16 +227,16 @@ glm_vec2_print(vec2 vec,
|
|||||||
|
|
||||||
#define m 2
|
#define m 2
|
||||||
|
|
||||||
fprintf(ostream, "Vector (float%d):\n\t|", m);
|
fprintf(ostream, "Vector (float%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "%0.4f", vec[i]);
|
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
|
||||||
if (i != m - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
fprintf(ostream, " % g", vec[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n\n");
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
@@ -209,16 +249,17 @@ glm_versor_print(versor vec,
|
|||||||
|
|
||||||
#define m 4
|
#define m 4
|
||||||
|
|
||||||
fprintf(ostream, "Versor (float%d):\n\t|", m);
|
fprintf(ostream, "Quaternion (float%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < m; i++) {
|
||||||
fprintf(ostream, "%0.4f", vec[i]);
|
if (vec[i] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, vec[i]);
|
||||||
if (i != m - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
fprintf(ostream, " % g", vec[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n\n");
|
|
||||||
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
@@ -232,24 +273,42 @@ glm_aabb_print(vec3 bbox[2],
|
|||||||
|
|
||||||
#define m 3
|
#define m 3
|
||||||
|
|
||||||
fprintf(ostream, "AABB (%s):\n", tag ? tag: "float");
|
fprintf(ostream, "AABB (%s): " CGLM_PRINT_COLOR "\n", tag ? tag: "float");
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
fprintf(ostream, "\t|");
|
fprintf(ostream, " (");
|
||||||
|
|
||||||
for (j = 0; j < m; j++) {
|
for (j = 0; j < m; j++) {
|
||||||
fprintf(ostream, "%0.4f", bbox[i][j]);
|
if (bbox[i][j] < CGLM_PRINT_MAX_TO_SHORT)
|
||||||
|
fprintf(ostream, " % .*f", CGLM_PRINT_PRECISION, bbox[i][j]);
|
||||||
if (j != m - 1)
|
else
|
||||||
fprintf(ostream, "\t");
|
fprintf(ostream, " % g", bbox[i][j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "|\n");
|
fprintf(ostream, " )\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(ostream, "\n");
|
fprintf(ostream, CGLM_PRINT_COLOR_RESET "\n");
|
||||||
|
|
||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif !defined(CGLM_NO_PRINTS_NOOP)
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* NOOP: Remove print from DEBUG */
|
||||||
|
CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_mat2_print(mat2 matrix, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_vec2_print(vec2 vec, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_versor_print(versor vec, FILE *o) { }
|
||||||
|
CGLM_INLINE void glm_aabb_print(vec3 bbox[2], const char *t, FILE *o) { }
|
||||||
|
#endif
|
||||||
#endif /* cglm_io_h */
|
#endif /* cglm_io_h */
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
* @param[in] v1 second vertex of triangle
|
* @param[in] v1 second vertex of triangle
|
||||||
* @param[in] v2 third vertex of triangle
|
* @param[in] v2 third vertex of triangle
|
||||||
* @param[in, out] d distance to intersection
|
* @param[in, out] d distance to intersection
|
||||||
* @param[out] intersection whether there is intersection
|
* @return whether there is intersection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -46,34 +46,30 @@ glm_ray_triangle(vec3 origin,
|
|||||||
|
|
||||||
glm_vec3_sub(v1, v0, edge1);
|
glm_vec3_sub(v1, v0, edge1);
|
||||||
glm_vec3_sub(v2, v0, edge2);
|
glm_vec3_sub(v2, v0, edge2);
|
||||||
|
|
||||||
glm_vec3_cross(direction, edge2, p);
|
glm_vec3_cross(direction, edge2, p);
|
||||||
|
|
||||||
det = glm_vec3_dot(edge1, p);
|
det = glm_vec3_dot(edge1, p);
|
||||||
|
|
||||||
if (det > -epsilon && det < epsilon)
|
if (det > -epsilon && det < epsilon)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
inv_det = 1.0f / det;
|
inv_det = 1.0f / det;
|
||||||
|
|
||||||
glm_vec3_sub(origin, v0, t);
|
glm_vec3_sub(origin, v0, t);
|
||||||
|
|
||||||
u = inv_det * glm_vec3_dot(t, p);
|
u = inv_det * glm_vec3_dot(t, p);
|
||||||
|
|
||||||
if (u < 0.0f || u > 1.0f)
|
if (u < 0.0f || u > 1.0f)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
glm_vec3_cross(t, edge1, q);
|
glm_vec3_cross(t, edge1, q);
|
||||||
|
|
||||||
v = inv_det * glm_vec3_dot(direction, q);
|
v = inv_det * glm_vec3_dot(direction, q);
|
||||||
|
|
||||||
if (v < 0.0f || u + v > 1.0f)
|
if (v < 0.0f || u + v > 1.0f)
|
||||||
return 0;
|
return false;
|
||||||
|
|
||||||
dist = inv_det * glm_vec3_dot(edge2, q);
|
dist = inv_det * glm_vec3_dot(edge2, q);
|
||||||
|
|
||||||
if (d)
|
if (d)
|
||||||
*d = dist;
|
*d = dist;
|
||||||
|
|
||||||
return dist > epsilon;
|
return dist > epsilon;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,6 @@
|
|||||||
|
|
||||||
#define CGLM_VERSION_MAJOR 0
|
#define CGLM_VERSION_MAJOR 0
|
||||||
#define CGLM_VERSION_MINOR 7
|
#define CGLM_VERSION_MINOR 7
|
||||||
#define CGLM_VERSION_PATCH 2
|
#define CGLM_VERSION_PATCH 3
|
||||||
|
|
||||||
#endif /* cglm_version_h */
|
#endif /* cglm_version_h */
|
||||||
|
|||||||
2
src/io.c
2
src/io.c
@@ -5,6 +5,8 @@
|
|||||||
* Full license can be found in the LICENSE file
|
* Full license can be found in the LICENSE file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define CGLM_LIB_SRC
|
||||||
|
|
||||||
#include "../include/cglm/cglm.h"
|
#include "../include/cglm/cglm.h"
|
||||||
#include "../include/cglm/call.h"
|
#include "../include/cglm/call.h"
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef tests_common_h
|
#ifndef tests_common_h
|
||||||
#define tests_common_h
|
#define tests_common_h
|
||||||
|
|
||||||
|
#define _USE_MATH_DEFINES /* for windows */
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS /* for windows */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user