mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
93 Commits
simd_min_m
...
sse_only
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
568634a79e | ||
|
|
c9c7941a72 | ||
|
|
4e929a81c2 | ||
|
|
1d09c41e18 | ||
|
|
d8e933b5b1 | ||
|
|
8b15fd51ba | ||
|
|
9ce0a3b625 | ||
|
|
00d2e8a4cf | ||
|
|
35a12ed033 | ||
|
|
32a477ef07 | ||
|
|
e3ed9834a1 | ||
|
|
8396bbf0b3 | ||
|
|
929963c6eb | ||
|
|
25b33fab6b | ||
|
|
c9adbaabd7 | ||
|
|
b22e8230d0 | ||
|
|
bf4c5b4e26 | ||
|
|
54dfbc5a28 | ||
|
|
088c66029d | ||
|
|
2283c708c6 | ||
|
|
46864ba2f7 | ||
|
|
c5dcb93c92 | ||
|
|
050bc95264 | ||
|
|
f388df7f3e | ||
|
|
4c872238d9 | ||
|
|
edfb5e3984 | ||
|
|
4d43241a69 | ||
|
|
1337e9cdfb | ||
|
|
9df36ce005 | ||
|
|
55521ecd61 | ||
|
|
829b7dddce | ||
|
|
2fced7181a | ||
|
|
1de373a9bd | ||
|
|
6a7d03bafb | ||
|
|
aad5223da0 | ||
|
|
707bff021c | ||
|
|
e4c38ccc4c | ||
|
|
ceaa54aef8 | ||
|
|
da57558078 | ||
|
|
6ad0aca7e0 | ||
|
|
96e415daa4 | ||
|
|
3701305c9e | ||
|
|
2b78f9ab47 | ||
|
|
41d1a8b9eb | ||
|
|
8ea2fd1cd1 | ||
|
|
8c81443f24 | ||
|
|
608e7d9c2c | ||
|
|
73a4fc76d7 | ||
|
|
aa45d081fc | ||
|
|
f1d4aea69b | ||
|
|
0ef8ebe84e | ||
|
|
8b6eca29cf | ||
|
|
0fbad944c5 | ||
|
|
182c28faf8 | ||
|
|
995fb2e347 | ||
|
|
838c5078b7 | ||
|
|
772238f53f | ||
|
|
b9e62b6fe5 | ||
|
|
c9e2b81e99 | ||
|
|
ee18e58815 | ||
|
|
85ee366861 | ||
|
|
0e4201b816 | ||
|
|
b7e4c96738 | ||
|
|
0d92bfc722 | ||
|
|
237432969d | ||
|
|
131ac68ad3 | ||
|
|
7e6a463256 | ||
|
|
e312f282b4 | ||
|
|
78fb330850 | ||
|
|
4896b2ea8d | ||
|
|
366e0d44e2 | ||
|
|
47a27f9d07 | ||
|
|
7957179808 | ||
|
|
3e79c4d799 | ||
|
|
af5048595f | ||
|
|
270d2b9d05 | ||
|
|
eb9a200b6c | ||
|
|
fd661d1b43 | ||
|
|
db6f9641ab | ||
|
|
125002cfb3 | ||
|
|
bb9a35caaf | ||
|
|
b89315f2c5 | ||
|
|
e80d163d71 | ||
|
|
74c5e86d0c | ||
|
|
45134b1265 | ||
|
|
b63b2b90b3 | ||
|
|
e4419c4f18 | ||
|
|
17f3ea5fab | ||
|
|
a8685ed6ab | ||
|
|
029bead207 | ||
|
|
30845124b4 | ||
|
|
80d5064476 | ||
|
|
2bd97f6599 |
236
.github/workflows/ci.yml
vendored
Normal file
236
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "master" ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_autotools:
|
||||||
|
name: Autotools / ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-12, macos-14, ubuntu-22.04]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Autotools
|
||||||
|
if: runner.os == 'macOS'
|
||||||
|
run: brew upgrade && brew install autoconf automake libtool
|
||||||
|
|
||||||
|
- name: Generate Autotools
|
||||||
|
run: ./autogen.sh
|
||||||
|
|
||||||
|
- name: Configure Autotools
|
||||||
|
run: ./configure
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: make
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: make check
|
||||||
|
|
||||||
|
build_cmake_ios:
|
||||||
|
name: CMake / iOS
|
||||||
|
runs-on: macos-14
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
run: |
|
||||||
|
cmake \
|
||||||
|
-B build \
|
||||||
|
-GXcode \
|
||||||
|
-DCMAKE_SYSTEM_NAME=iOS \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO \
|
||||||
|
-DCGLM_STATIC=ON \
|
||||||
|
-DCGLM_USE_TEST=ON
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
|
build_cmake_macos:
|
||||||
|
name: CMake / ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-12, macos-14]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Ninja
|
||||||
|
if: runner.os == 'macOS'
|
||||||
|
run: brew upgrade && brew install ninja
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
run: |
|
||||||
|
cmake \
|
||||||
|
-B build \
|
||||||
|
-GNinja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCGLM_STATIC=ON \
|
||||||
|
-DCGLM_USE_TEST=ON
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: build
|
||||||
|
run: ./tests
|
||||||
|
|
||||||
|
build_cmake_ubuntu:
|
||||||
|
name: CMake / ${{ matrix.target.os }} / ${{ matrix.target.cc }}
|
||||||
|
runs-on: ${{ matrix.target.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target:
|
||||||
|
- { os: ubuntu-20.04, cc: gcc-11 }
|
||||||
|
- { os: ubuntu-22.04, cc: gcc-12 }
|
||||||
|
- { os: ubuntu-22.04, cc: gcc-13 }
|
||||||
|
- { os: ubuntu-20.04, cc: clang-12 }
|
||||||
|
- { os: ubuntu-22.04, cc: clang-15 }
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Compiler and Ninja
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y ${{ matrix.target.cc }} ninja-build
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
run: |
|
||||||
|
cmake \
|
||||||
|
-B build \
|
||||||
|
-GNinja \
|
||||||
|
-DCMAKE_C_COMPILER=${{ matrix.target.cc }} \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCGLM_STATIC=ON \
|
||||||
|
-DCGLM_USE_TEST=ON
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
working-directory: build
|
||||||
|
run: ./tests
|
||||||
|
|
||||||
|
build_cmake_windows:
|
||||||
|
name: CMake / ${{ matrix.platform.name }}
|
||||||
|
runs-on: windows-2022
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
platform:
|
||||||
|
- { name: Windows (x64), flags: -A x64 }
|
||||||
|
- { name: Windows (x86), flags: -A Win32 }
|
||||||
|
- { name: Windows (clang-cl x64), flags: -T ClangCL -A x64 }
|
||||||
|
- { name: Windows (clang-cl x86), flags: -T ClangCL -A Win32 }
|
||||||
|
- { name: Windows (ARM), flags: -A ARM, skip_tests: true, skip_build: true } # This fails to build.
|
||||||
|
- { name: Windows (ARM64), flags: -A ARM64, skip_tests: true }
|
||||||
|
- { name: UWP (ARM64), flags: -A ARM64, -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0", skip_tests: true }
|
||||||
|
- { name: UWP (x64), flags: -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0", skip_tests: true }
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Configure CMake
|
||||||
|
run: cmake -B build `
|
||||||
|
-DCGLM_STATIC=ON `
|
||||||
|
-DCGLM_USE_TEST=ON `
|
||||||
|
${{ matrix.platform.flags }}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
if: ${{ !matrix.platform.skip_build }}
|
||||||
|
run: cmake --build build --config Release --parallel
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
if: ${{ !matrix.platform.skip_tests }}
|
||||||
|
working-directory: build
|
||||||
|
run: .\Release\tests.exe
|
||||||
|
|
||||||
|
build_documentation:
|
||||||
|
name: Documentation
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.12'
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
working-directory: docs
|
||||||
|
run: python3 -m pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
working-directory: docs
|
||||||
|
run: sphinx-build -W --keep-going source build
|
||||||
|
|
||||||
|
build_meson:
|
||||||
|
name: Meson / ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-14, ubuntu-22.04]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.12'
|
||||||
|
cache: 'pip'
|
||||||
|
|
||||||
|
- name: Install meson
|
||||||
|
run: python3 -m pip install meson ninja
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: meson setup build -Dbuildtype=release --default-library=static -Dbuild_tests=true
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: meson test -C build
|
||||||
|
|
||||||
|
build_msbuild:
|
||||||
|
name: MSBuild / Windows
|
||||||
|
runs-on: windows-2022
|
||||||
|
|
||||||
|
# This has no test yet.
|
||||||
|
# It could also try building for ARM, ARM64, ARM64EC, but those fail currently.
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build (x86)
|
||||||
|
working-directory: win
|
||||||
|
run: msbuild cglm.vcxproj /p:Configuration=Release /p:Platform=x86 /p:BuildInParallel=true
|
||||||
|
|
||||||
|
- name: Build (x64)
|
||||||
|
working-directory: win
|
||||||
|
run: msbuild cglm.vcxproj /p:Configuration=Release /p:Platform=x64 /p:BuildInParallel=true
|
||||||
|
|
||||||
|
build_swift:
|
||||||
|
name: Swift ${{ matrix.swift }} / ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-12, macos-14, ubuntu-22.04]
|
||||||
|
|
||||||
|
# This has no test yet.
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: swift build
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.8.2)
|
cmake_minimum_required(VERSION 3.8.2)
|
||||||
project(cglm
|
project(cglm
|
||||||
VERSION 0.9.3
|
VERSION 0.9.4
|
||||||
HOMEPAGE_URL https://github.com/recp/cglm
|
HOMEPAGE_URL https://github.com/recp/cglm
|
||||||
DESCRIPTION "OpenGL Mathematics (glm) for C"
|
DESCRIPTION "OpenGL Mathematics (glm) for C"
|
||||||
LANGUAGES C
|
LANGUAGES C
|
||||||
@@ -32,18 +32,23 @@ if(CGLM_USE_C99)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
add_definitions(-DNDEBUG -D_WINDOWS -D_USRDLL)
|
add_definitions(-D_WINDOWS -D_USRDLL)
|
||||||
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
|
||||||
|
|
||||||
# Ref: https://skia.googlesource.com/third_party/sdl/+/refs/heads/master/CMakeLists.txt#225
|
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
# Make sure /RTC1 is disabled, otherwise it will use functions from the CRT
|
add_definitions(-DNDEBUG)
|
||||||
|
add_compile_options(/W3 /Ox /Gy /Oi /TC)
|
||||||
foreach(flag_var
|
foreach(flag_var
|
||||||
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||||||
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
||||||
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}")
|
||||||
endforeach(flag_var)
|
endforeach(flag_var)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
add_compile_options(-Wall -O3)
|
add_compile_options(-Wall)
|
||||||
|
|
||||||
|
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
|
add_compile_options(-O3)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
get_directory_property(hasParent PARENT_DIRECTORY)
|
get_directory_property(hasParent PARENT_DIRECTORY)
|
||||||
|
|||||||
14
CREDITS
14
CREDITS
@@ -82,3 +82,17 @@ http://github.com/microsoft/DirectXMath
|
|||||||
17. Pick Matrix
|
17. Pick Matrix
|
||||||
|
|
||||||
glu project -> project.c
|
glu project -> project.c
|
||||||
|
|
||||||
|
18. Ray sphere intersection
|
||||||
|
|
||||||
|
RAY TRACING GEMS
|
||||||
|
HIGH-QUALITY AND REAL-TIME RENDERING WITH DXR AND OTHER APIS
|
||||||
|
|
||||||
|
CHAPTER 7
|
||||||
|
Precision Improvements for Ray/Sphere Intersection
|
||||||
|
Eric Haines (1), Johannes Günther (2), and Tomas Akenine-Möller (1)
|
||||||
|
(1) NVIDIA
|
||||||
|
(2) Intel
|
||||||
|
|
||||||
|
Wyman, C., and Haines, E. Getting Started with RTX Ray Tracing.
|
||||||
|
https://github.com/NVIDIAGameWorks/GettingStartedWithRTXRayTracing
|
||||||
|
|||||||
@@ -198,10 +198,13 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
|||||||
include/cglm/struct/affine2d.h \
|
include/cglm/struct/affine2d.h \
|
||||||
include/cglm/struct/vec2.h \
|
include/cglm/struct/vec2.h \
|
||||||
include/cglm/struct/vec2-ext.h \
|
include/cglm/struct/vec2-ext.h \
|
||||||
|
include/cglm/struct/ivec2.h \
|
||||||
include/cglm/struct/vec3.h \
|
include/cglm/struct/vec3.h \
|
||||||
include/cglm/struct/vec3-ext.h \
|
include/cglm/struct/vec3-ext.h \
|
||||||
|
include/cglm/struct/ivec3.h \
|
||||||
include/cglm/struct/vec4.h \
|
include/cglm/struct/vec4.h \
|
||||||
include/cglm/struct/vec4-ext.h \
|
include/cglm/struct/vec4-ext.h \
|
||||||
|
include/cglm/struct/ivec4.h \
|
||||||
include/cglm/struct/io.h \
|
include/cglm/struct/io.h \
|
||||||
include/cglm/struct/cam.h \
|
include/cglm/struct/cam.h \
|
||||||
include/cglm/struct/quat.h \
|
include/cglm/struct/quat.h \
|
||||||
@@ -213,7 +216,8 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
|||||||
include/cglm/struct/project.h \
|
include/cglm/struct/project.h \
|
||||||
include/cglm/struct/sphere.h \
|
include/cglm/struct/sphere.h \
|
||||||
include/cglm/struct/color.h \
|
include/cglm/struct/color.h \
|
||||||
include/cglm/struct/curve.h
|
include/cglm/struct/curve.h \
|
||||||
|
include/cglm/struct/ray.h
|
||||||
|
|
||||||
cglm_struct_clipspacedir=$(includedir)/cglm/struct/clipspace
|
cglm_struct_clipspacedir=$(includedir)/cglm/struct/clipspace
|
||||||
cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_no.h \
|
cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_no.h \
|
||||||
|
|||||||
14
README.md
14
README.md
@@ -5,14 +5,10 @@
|
|||||||
</p>
|
</p>
|
||||||
<br>
|
<br>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://travis-ci.com/recp/cglm">
|
<a href="https://github.com/recp/cglm/actions/workflows/ci.yml">
|
||||||
<img src="https://travis-ci.com/recp/cglm.svg?branch=master"
|
<img src="https://github.com/recp/cglm/actions/workflows/ci.yml/badge.svg"
|
||||||
alt="Build Status">
|
alt="Build Status">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://ci.appveyor.com/project/recp/cglm/branch/master">
|
|
||||||
<img src="https://ci.appveyor.com/api/projects/status/av7l3gc0yhfex8y4/branch/master?svg=true"
|
|
||||||
alt="Windows Build Status">
|
|
||||||
</a>
|
|
||||||
<a href="http://cglm.readthedocs.io/en/latest/?badge=latest">
|
<a href="http://cglm.readthedocs.io/en/latest/?badge=latest">
|
||||||
<img src="https://readthedocs.org/projects/cglm/badge/?version=latest"
|
<img src="https://readthedocs.org/projects/cglm/badge/?version=latest"
|
||||||
alt="Documentation Status">
|
alt="Documentation Status">
|
||||||
@@ -66,7 +62,7 @@ you have the latest version
|
|||||||
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
- **[major change]** by starting v0.5.0, vec3 functions use **glm_vec3_** namespace, it was **glm_vec_** until v0.5.0
|
||||||
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
- **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types
|
||||||
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
- **[major change]** by starting v0.7.3, inline print functions are disabled in release/production mode to eliminate print costs (see options in documentation). Print output also improved. You can disable colors if you need (see documentation)
|
||||||
- **[major change]** by starting v0.8.3, **cglm** supports alternative clipspace configuations e.g. Left Handed, Zero-to-One (_zo)... `CGLM_FORCE_DEPTH_ZERO_TO_ONE` and `CGLM_FORCE_LEFT_HANDED` is provided to control clipspace. You should be able to use **cglm** with Vulkan, DirectX and Metal now... see https://cglm.readthedocs.io/en/latest/opt.html#clipspace-option-s
|
- **[major change]** by starting v0.8.3, **cglm** supports alternative clipspace configurations e.g. Left Handed, Zero-to-One (_zo)... `CGLM_FORCE_DEPTH_ZERO_TO_ONE` and `CGLM_FORCE_LEFT_HANDED` is provided to control clipspace. You should be able to use **cglm** with Vulkan, DirectX and Metal now... see https://cglm.readthedocs.io/en/latest/opt.html#clipspace-option-s
|
||||||
|
|
||||||
#### 📌 Note for C++ developers:
|
#### 📌 Note for C++ developers:
|
||||||
If you are not aware of the original GLM library yet, you may also want to look at:
|
If you are not aware of the original GLM library yet, you may also want to look at:
|
||||||
@@ -108,7 +104,7 @@ https://github.com/g-truc/glm
|
|||||||
|
|
||||||
## 🚀 Features
|
## 🚀 Features
|
||||||
- **scalar** and **simd** (sse, avx, neon...) optimizations
|
- **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)
|
- option to use different clipspaces e.g. Left Handed, Zero-to-One... (currently right handed negative-one is default)
|
||||||
- array api and struct api, you can use arrays or structs.
|
- array api and struct api, you can use arrays or structs.
|
||||||
- general purpose matrix operations (mat4, mat3)
|
- general purpose matrix operations (mat4, mat3)
|
||||||
- chain matrix multiplication (square only)
|
- chain matrix multiplication (square only)
|
||||||
@@ -148,7 +144,7 @@ To call pre-compiled versions, just use `glmc_` (c stands for 'call') instead of
|
|||||||
glm_mul(trans, rot, rt); /* inline */
|
glm_mul(trans, rot, rt); /* inline */
|
||||||
glmc_mul(trans, rot, rt); /* call from library */
|
glmc_mul(trans, rot, rt); /* call from library */
|
||||||
```
|
```
|
||||||
Most of math functions are optimized manualy with SSE2 if available, if not? Dont worry there are non-sse versions of all operations
|
Most of math functions are optimized manually with SSE2 if available, if not? Dont worry there are non-sse versions of all operations
|
||||||
|
|
||||||
You can pass matrices and vectors as array to functions rather than get address.
|
You can pass matrices and vectors as array to functions rather than get address.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
image: Visual Studio 2017
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- ps: >-
|
|
||||||
cd win
|
|
||||||
|
|
||||||
.\build.bat
|
|
||||||
0
autogen.sh
Normal file → Executable file
0
autogen.sh
Normal file → Executable file
@@ -2,7 +2,7 @@ Pod::Spec.new do |s|
|
|||||||
|
|
||||||
# Description
|
# Description
|
||||||
s.name = "cglm"
|
s.name = "cglm"
|
||||||
s.version = "0.9.2"
|
s.version = "0.9.3"
|
||||||
s.summary = "📽 Highly Optimized Graphics Math (glm) for C"
|
s.summary = "📽 Highly Optimized Graphics Math (glm) for C"
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
cglm is math library for graphics programming for C. See the documentation or README for all features.
|
cglm is math library for graphics programming for C. See the documentation or README for all features.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
AC_INIT([cglm], [0.9.3], [info@recp.me])
|
AC_INIT([cglm], [0.9.4], [info@recp.me])
|
||||||
AM_INIT_AUTOMAKE([-Wall foreign subdir-objects serial-tests])
|
AM_INIT_AUTOMAKE([-Wall 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.
|
||||||
|
|||||||
0
docs/make.bat
Normal file → Executable file
0
docs/make.bat
Normal file → Executable file
@@ -1,4 +1,4 @@
|
|||||||
# Defining the exact version will make sure things don't break
|
# Defining the exact version will make sure things don't break
|
||||||
sphinx==5.3.0
|
sphinx==7.2.6
|
||||||
sphinx_rtd_theme==1.1.1
|
sphinx_rtd_theme==2.0.0
|
||||||
readthedocs-sphinx-search==0.1.1
|
readthedocs-sphinx-search==0.3.2
|
||||||
|
|||||||
@@ -17,16 +17,22 @@ convert it before and after calling a cglm aabb2d function.
|
|||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Macros:
|
||||||
|
|
||||||
|
1. :c:func:`glm_aabb2d_size`
|
||||||
|
|
||||||
Functions:
|
Functions:
|
||||||
|
|
||||||
1. :c:func:`glm_aabb2d_copy`
|
1. :c:func:`glm_aabb2d_copy`
|
||||||
|
#. :c:func:`glm_aabb2d_zero`
|
||||||
#. :c:func:`glm_aabb2d_transform`
|
#. :c:func:`glm_aabb2d_transform`
|
||||||
#. :c:func:`glm_aabb2d_merge`
|
#. :c:func:`glm_aabb2d_merge`
|
||||||
#. :c:func:`glm_aabb2d_crop`
|
#. :c:func:`glm_aabb2d_crop`
|
||||||
#. :c:func:`glm_aabb2d_crop_until`
|
#. :c:func:`glm_aabb2d_crop_until`
|
||||||
#. :c:func:`glm_aabb2d_invalidate`
|
#. :c:func:`glm_aabb2d_invalidate`
|
||||||
#. :c:func:`glm_aabb2d_isvalid`
|
#. :c:func:`glm_aabb2d_isvalid`
|
||||||
#. :c:func:`glm_aabb2d_size`
|
#. :c:func:`glm_aabb2d_diag`
|
||||||
|
#. :c:func:`glm_aabb2d_sizev`
|
||||||
#. :c:func:`glm_aabb2d_radius`
|
#. :c:func:`glm_aabb2d_radius`
|
||||||
#. :c:func:`glm_aabb2d_center`
|
#. :c:func:`glm_aabb2d_center`
|
||||||
#. :c:func:`glm_aabb2d_aabb`
|
#. :c:func:`glm_aabb2d_aabb`
|
||||||
@@ -45,6 +51,13 @@ Functions documentation
|
|||||||
| *[in]* **aabb** bounding box
|
| *[in]* **aabb** bounding box
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_zero(vec2 aabb[2])
|
||||||
|
|
||||||
|
| makes all members of [aabb] 0.0f (zero)
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **aabb** bounding box
|
||||||
|
|
||||||
.. c:function:: void glm_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2])
|
.. c:function:: void glm_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2])
|
||||||
|
|
||||||
| apply transform to Axis-Aligned Bounding Box
|
| apply transform to Axis-Aligned Bounding Box
|
||||||
@@ -89,7 +102,7 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **aabb** bounding box
|
| *[in]* **aabb** bounding box
|
||||||
| *[in]* **cropAabb** crop box
|
| *[in]* **cropAabb** crop box
|
||||||
| *[in]* **clampAabb** miniumum box
|
| *[in]* **clampAabb** minimum box
|
||||||
| *[out]* **dest** cropped bounding box
|
| *[out]* **dest** cropped bounding box
|
||||||
|
|
||||||
.. c:function:: void glm_aabb2d_invalidate(vec2 aabb[2])
|
.. c:function:: void glm_aabb2d_invalidate(vec2 aabb[2])
|
||||||
@@ -111,9 +124,9 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
returns true if aabb is valid otherwise false
|
returns true if aabb is valid otherwise false
|
||||||
|
|
||||||
.. c:function:: float glm_aabb2d_size(vec2 aabb[2])
|
.. c:function:: float glm_aabb2d_diag(vec2 aabb[2])
|
||||||
|
|
||||||
| distance between of min and max
|
| distance between min and max
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **aabb** bounding box
|
| *[in]* **aabb** bounding box
|
||||||
@@ -121,6 +134,18 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
distance between min - max
|
distance between min - max
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_sizev(vec2 aabb[2], vec2 dest)
|
||||||
|
|
||||||
|
| size vector of aabb
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[out]* **dest** size vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
size vector of aabb max - min
|
||||||
|
|
||||||
.. c:function:: float glm_aabb2d_radius(vec2 aabb[2])
|
.. c:function:: float glm_aabb2d_radius(vec2 aabb[2])
|
||||||
|
|
||||||
| radius of sphere which surrounds AABB
|
| radius of sphere which surrounds AABB
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
3D Affine Transforms (common)
|
3D Affine Transforms (common)
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Common transfrom functions.
|
Common transform functions.
|
||||||
|
|
||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -30,7 +30,7 @@ Functions documentation
|
|||||||
creates NEW translate transform matrix by *v* vector.
|
creates NEW translate transform matrix by *v* vector.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
||||||
@@ -38,7 +38,7 @@ Functions documentation
|
|||||||
scale existing transform matrix by *v* vector and store result in dest
|
scale existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
| *[out]* **dest** scaled matrix
|
| *[out]* **dest** scaled matrix
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ Functions documentation
|
|||||||
creates NEW scale matrix by v vector
|
creates NEW scale matrix by v vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **m** affine transfrom
|
| *[out]* **m** affine transform
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
||||||
@@ -56,7 +56,7 @@ Functions documentation
|
|||||||
and stores result in same matrix
|
and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
| *[in]* **v** scale vector [x, y, z]
|
||||||
|
|
||||||
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
||||||
@@ -65,7 +65,7 @@ Functions documentation
|
|||||||
and stores result in same matrix
|
and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** scale factor
|
| *[in]* **v** scale factor
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
||||||
@@ -74,7 +74,7 @@ Functions documentation
|
|||||||
axis will be normalized so you don't need to normalize it
|
axis will be normalized so you don't need to normalize it
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **m** affine transfrom
|
| *[out]* **m** affine transform
|
||||||
| *[in]* **axis** angle (radians)
|
| *[in]* **axis** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ Functions documentation
|
|||||||
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
@@ -123,7 +123,7 @@ Functions documentation
|
|||||||
DON'T pass projected matrix here
|
DON'T pass projected matrix here
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[out]* **t** translation vector
|
| *[out]* **t** translation vector
|
||||||
| *[out]* **r** rotation matrix (mat4)
|
| *[out]* **r** rotation matrix (mat4)
|
||||||
| *[out]* **s** scaling vector [X, Y, Z]
|
| *[out]* **s** scaling vector [X, Y, Z]
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ You cannot use :c:func:`glm_mul` anymore.
|
|||||||
Same is also true for :c:func:`glm_inv_tr` if you only have rotation and
|
Same is also true for :c:func:`glm_inv_tr` if you only have rotation and
|
||||||
translation then it will work as expected, otherwise you cannot use that.
|
translation then it will work as expected, otherwise you cannot use that.
|
||||||
|
|
||||||
In the future it may accept scale factors too but currectly it does not.
|
In the future it may accept scale factors too but currently it does not.
|
||||||
|
|
||||||
Table of contents (click func go):
|
Table of contents (click func go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -3,10 +3,8 @@
|
|||||||
3D Affine Transforms (post)
|
3D Affine Transforms (post)
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Post transfrom functions are similar to pre transform functions except order of application is reversed.
|
Post transform functions are similar to pre transform functions except order of application is reversed.
|
||||||
Post transform functions are applied after the object is transformed with given (model matrix) transfrom.
|
Post transform functions are applied after the object is transformed with given (model matrix) transform.
|
||||||
|
|
||||||
Ther are named af
|
|
||||||
|
|
||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -33,7 +31,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by *v* vector and store result in dest
|
translate existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
| *[out]* **dest** translated matrix
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
@@ -43,7 +41,7 @@ Functions documentation
|
|||||||
and stores result in same matrix
|
and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
.. c:function:: void glm_translated_x(mat4 m, float x)
|
.. c:function:: void glm_translated_x(mat4 m, float x)
|
||||||
@@ -51,7 +49,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by x factor
|
translate existing transform matrix by x factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** x factor
|
| *[in]* **v** x factor
|
||||||
|
|
||||||
.. c:function:: void glm_translated_y(mat4 m, float y)
|
.. c:function:: void glm_translated_y(mat4 m, float y)
|
||||||
@@ -59,7 +57,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by *y* factor
|
translate existing transform matrix by *y* factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** y factor
|
| *[in]* **v** y factor
|
||||||
|
|
||||||
.. c:function:: void glm_translated_z(mat4 m, float z)
|
.. c:function:: void glm_translated_z(mat4 m, float z)
|
||||||
@@ -67,7 +65,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by *z* factor
|
translate existing transform matrix by *z* factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** z factor
|
| *[in]* **v** z factor
|
||||||
|
|
||||||
.. c:function:: void glm_rotated_x(mat4 m, float angle, mat4 dest)
|
.. c:function:: void glm_rotated_x(mat4 m, float angle, mat4 dest)
|
||||||
@@ -76,7 +74,7 @@ Functions documentation
|
|||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
@@ -86,7 +84,7 @@ Functions documentation
|
|||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
@@ -96,7 +94,7 @@ Functions documentation
|
|||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
@@ -105,7 +103,7 @@ Functions documentation
|
|||||||
rotate existing transform matrix around Z axis by angle and axis
|
rotate existing transform matrix around Z axis by angle and axis
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
@@ -114,7 +112,7 @@ Functions documentation
|
|||||||
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
@@ -124,6 +122,6 @@ Functions documentation
|
|||||||
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
3D Affine Transforms (pre)
|
3D Affine Transforms (pre)
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Pre transfrom functions which are regular transfrom functions.
|
Pre transform functions which are regular transform functions.
|
||||||
|
|
||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -41,7 +41,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by *v* vector and store result in dest
|
translate existing transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
| *[out]* **dest** translated matrix
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ Functions documentation
|
|||||||
and stores result in same matrix
|
and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
| *[in]* **v** translate vector [x, y, z]
|
||||||
|
|
||||||
.. c:function:: void glm_translate_x(mat4 m, float x)
|
.. c:function:: void glm_translate_x(mat4 m, float x)
|
||||||
@@ -59,7 +59,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by x factor
|
translate existing transform matrix by x factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** x factor
|
| *[in]* **v** x factor
|
||||||
|
|
||||||
.. c:function:: void glm_translate_y(mat4 m, float y)
|
.. c:function:: void glm_translate_y(mat4 m, float y)
|
||||||
@@ -67,7 +67,7 @@ Functions documentation
|
|||||||
translate existing transform matrix by *y* factor
|
translate existing transform matrix by *y* factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** y factor
|
| *[in]* **v** y factor
|
||||||
|
|
||||||
.. c:function:: void glm_translate_z(mat4 m, float z)
|
.. c:function:: void glm_translate_z(mat4 m, float z)
|
||||||
@@ -75,59 +75,16 @@ Functions documentation
|
|||||||
translate existing transform matrix by *z* factor
|
translate existing transform matrix by *z* factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** z factor
|
| *[in]* **v** z factor
|
||||||
|
|
||||||
.. c:function:: void glm_translate_make(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
creates NEW translate transform matrix by *v* vector.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** translate vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_to(mat4 m, vec3 v, mat4 dest)
|
|
||||||
|
|
||||||
scale existing transform matrix by *v* vector and store result in dest
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
| *[out]* **dest** scaled matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_make(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
creates NEW scale matrix by v vector
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale(mat4 m, vec3 v)
|
|
||||||
|
|
||||||
scales existing transform matrix by v vector
|
|
||||||
and stores result in same matrix
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale vector [x, y, z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_scale_uni(mat4 m, float s)
|
|
||||||
|
|
||||||
applies uniform scale to existing transform matrix v = [s, s, s]
|
|
||||||
and stores result in same matrix
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **v** scale factor
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_x(mat4 m, float angle, mat4 dest)
|
.. c:function:: void glm_rotate_x(mat4 m, float angle, mat4 dest)
|
||||||
|
|
||||||
rotate existing transform matrix around X axis by angle
|
rotate existing transform matrix around X axis by angle
|
||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
@@ -137,7 +94,7 @@ Functions documentation
|
|||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
@@ -147,26 +104,33 @@ Functions documentation
|
|||||||
and store result in dest
|
and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_make(mat4 m, float angle, vec3 axis)
|
|
||||||
|
|
||||||
creates NEW rotation matrix by angle and axis,
|
|
||||||
axis will be normalized so you don't need to normalize it
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[out]* **m** affine transfrom
|
|
||||||
| *[in]* **axis** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_rotate(mat4 m, float angle, vec3 axis)
|
.. c:function:: void glm_rotate(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
rotate existing transform matrix around Z axis by angle and axis
|
rotate existing transform matrix around given axis by angle at ORIGIN (0,0,0)
|
||||||
|
|
||||||
|
**❗️IMPORTANT ❗️**
|
||||||
|
|
||||||
|
If you need to rotate object around itself e.g. center of object or at
|
||||||
|
some point [of object] then `glm_rotate_at()` would be better choice to do so.
|
||||||
|
|
||||||
|
Even if object's model transform is identiy, rotation may not be around
|
||||||
|
center of object if object does not lay out at ORIGIN perfectly.
|
||||||
|
|
||||||
|
Using `glm_rotate_at()` with center of bounding shape ( AABB, Sphere ... )
|
||||||
|
would be an easy option to rotate around object if object is not at origin.
|
||||||
|
|
||||||
|
One another option to rotate around itself at any point is `glm_spin()`
|
||||||
|
which is perfect if only rotating around model position is desired e.g. not
|
||||||
|
specific point on model for instance center of geometry or center of mass,
|
||||||
|
again if geometry is not perfectly centered at origin at identity transform,
|
||||||
|
rotation may not be around geometry.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
@@ -175,66 +139,16 @@ Functions documentation
|
|||||||
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
rotate existing transform around given axis by angle at given pivot point (rotation center)
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
| *[in]* **pivot** pivot, anchor point, rotation center
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|
||||||
.. c:function:: void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis)
|
|
||||||
|
|
||||||
| creates NEW rotation matrix by angle and axis at given point
|
|
||||||
| this creates rotation matrix, it assumes you don't have a matrix
|
|
||||||
|
|
||||||
| this should work faster than glm_rotate_at because it reduces one glm_translate.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in, out]* **m** affine transfrom
|
|
||||||
| *[in]* **pivot** pivot, anchor point, rotation center
|
|
||||||
| *[in]* **angle** angle (radians)
|
|
||||||
| *[in]* **axis** axis
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose_scalev(mat4 m, vec3 s)
|
|
||||||
|
|
||||||
decompose scale vector
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transform
|
|
||||||
| *[out]* **s** scale vector (Sx, Sy, Sz)
|
|
||||||
|
|
||||||
.. c:function:: bool glm_uniscaled(mat4 m)
|
|
||||||
|
|
||||||
returns true if matrix is uniform scaled.
|
|
||||||
This is helpful for creating normal matrix.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose_rs(mat4 m, mat4 r, vec3 s)
|
|
||||||
|
|
||||||
decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz]
|
|
||||||
DON'T pass projected matrix here
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transform
|
|
||||||
| *[out]* **r** rotation matrix
|
|
||||||
| *[out]* **s** scale matrix
|
|
||||||
|
|
||||||
.. c:function:: void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s)
|
|
||||||
|
|
||||||
decompose affine transform, TODO: extract shear factors.
|
|
||||||
DON'T pass projected matrix here
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
| *[in]* **m** affine transfrom
|
|
||||||
| *[out]* **t** translation vector
|
|
||||||
| *[out]* **r** rotation matrix (mat4)
|
|
||||||
| *[out]* **s** scaling vector [X, Y, Z]
|
|
||||||
|
|
||||||
.. c:function:: void glm_spin(mat4 m, float angle, vec3 axis)
|
.. c:function:: void glm_spin(mat4 m, float angle, vec3 axis)
|
||||||
|
|
||||||
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
| rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[in]* **axis** axis
|
| *[in]* **axis** axis
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Post functions (`T' = T * Tnew`) are like `glm_translated`, `glm_rotated` which
|
|||||||
`glm_translate`, `glm_rotate` are pre functions and are similar to C++ **glm** which you are familiar with.
|
`glm_translate`, `glm_rotate` are pre functions and are similar to C++ **glm** which you are familiar with.
|
||||||
|
|
||||||
In new versions of **cglm** we added `glm_translated`, `glm_rotated`... which are post functions,
|
In new versions of **cglm** we added `glm_translated`, `glm_rotated`... which are post functions,
|
||||||
they are useful in some cases, e.g. append transform to existing transform (apply/append transform as last transfrom T' = T * Tnew).
|
they are useful in some cases, e.g. append transform to existing transform (apply/append transform as last transform T' = T * Tnew).
|
||||||
|
|
||||||
Post functions are named after pre functions with `ed` suffix, e.g. `glm_translate` -> `glm_translated`. So don't mix them up.
|
Post functions are named after pre functions with `ed` suffix, e.g. `glm_translate` -> `glm_translated`. So don't mix them up.
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ a matrix for you. You don't need to pass identity matrix.
|
|||||||
|
|
||||||
But other functions expect you have a matrix and you want to transform them. If
|
But other functions expect you have a matrix and you want to transform them. If
|
||||||
you didn't have any existing matrix you have to initialize matrix to identity
|
you didn't have any existing matrix you have to initialize matrix to identity
|
||||||
before sending to transfrom functions.
|
before sending to transform functions.
|
||||||
|
|
||||||
There are also functions to decompose transform matrix. These functions can't
|
There are also functions to decompose transform matrix. These functions can't
|
||||||
decompose matrix after projected.
|
decompose matrix after projected.
|
||||||
@@ -35,7 +35,7 @@ Rotation Center
|
|||||||
Rotating functions uses origin as rotation center (pivot/anchor point),
|
Rotating functions uses origin as rotation center (pivot/anchor point),
|
||||||
since scale factors are stored in rotation matrix, same may also true for scalling.
|
since scale factors are stored in rotation matrix, same may also true for scalling.
|
||||||
cglm provides some functions for rotating around at given point e.g.
|
cglm provides some functions for rotating around at given point e.g.
|
||||||
**glm_rotate_at**, **glm_quat_rotate_at**. Use them or follow next section for algorihm ("Rotate or Scale around specific Point (Pivot Point / Anchor Point)").
|
**glm_rotate_at**, **glm_quat_rotate_at**. Use them or follow next section for algorithm ("Rotate or Scale around specific Point (Pivot Point / Anchor Point)").
|
||||||
|
|
||||||
Also **cglm** provides :c:func:`glm_spin` and :c:func:`glm_spinned` functions to rotate around itself. No need to give pivot.
|
Also **cglm** provides :c:func:`glm_spin` and :c:func:`glm_spinned` functions to rotate around itself. No need to give pivot.
|
||||||
These functions are useful for rotating around center of object.
|
These functions are useful for rotating around center of object.
|
||||||
@@ -43,7 +43,7 @@ These functions are useful for rotating around center of object.
|
|||||||
Rotate or Scale around specific Point (Anchor Point)
|
Rotate or Scale around specific Point (Anchor Point)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you want to rotate model around arbibtrary point follow these steps:
|
If you want to rotate model around arbitrary point follow these steps:
|
||||||
|
|
||||||
1. Move model from pivot point to origin: **translate(-pivot.x, -pivot.y, -pivot.z)**
|
1. Move model from pivot point to origin: **translate(-pivot.x, -pivot.y, -pivot.z)**
|
||||||
2. Apply rotation (or scaling maybe)
|
2. Apply rotation (or scaling maybe)
|
||||||
@@ -82,11 +82,11 @@ helpers functions works like this (cglm provides reverse order as `ed` suffix e.
|
|||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
TransformMatrix = TransformMatrix * TraslateMatrix; // glm_translate()
|
TransformMatrix = TransformMatrix * TranslateMatrix; // glm_translate()
|
||||||
TransformMatrix = TransformMatrix * RotateMatrix; // glm_rotate(), glm_quat_rotate()
|
TransformMatrix = TransformMatrix * RotateMatrix; // glm_rotate(), glm_quat_rotate()
|
||||||
TransformMatrix = TransformMatrix * ScaleMatrix; // glm_scale()
|
TransformMatrix = TransformMatrix * ScaleMatrix; // glm_scale()
|
||||||
|
|
||||||
As you can see it is multipled as right matrix. For instance what will happen if you call `glm_translate` twice?
|
As you can see it is multiplied as right matrix. For instance what will happen if you call `glm_translate` twice?
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ a matrix for you. You don't need to pass identity matrix.
|
|||||||
|
|
||||||
But other functions expect you have a matrix and you want to transform them. If
|
But other functions expect you have a matrix and you want to transform them. If
|
||||||
you didn't have any existing matrix you have to initialize matrix to identity
|
you didn't have any existing matrix you have to initialize matrix to identity
|
||||||
before sending to transfrom functions.
|
before sending to transform functions.
|
||||||
|
|
||||||
Transforms Order
|
Transforms Order
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -45,7 +45,7 @@ Functions:
|
|||||||
translate existing 2d transform matrix by *v* vector and stores result in same matrix
|
translate existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** 2d affine transfrom
|
| *[in, out]* **m** 2d affine transform
|
||||||
| *[in]* **v** translate vector [x, y]
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
.. c:function:: void glm_translate2d_to(mat3 m, vec2 v, mat3 dest)
|
.. c:function:: void glm_translate2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
@@ -53,7 +53,7 @@ Functions:
|
|||||||
translate existing 2d transform matrix by *v* vector and store result in dest
|
translate existing 2d transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** 2d affine transfrom
|
| *[in]* **m** 2d affine transform
|
||||||
| *[in]* **v** translate vector [x, y]
|
| *[in]* **v** translate vector [x, y]
|
||||||
| *[out]* **dest** translated matrix
|
| *[out]* **dest** translated matrix
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ Functions:
|
|||||||
translate existing 2d transform matrix by x factor
|
translate existing 2d transform matrix by x factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** 2d affine transfrom
|
| *[in, out]* **m** 2d affine transform
|
||||||
| *[in]* **x** x factor
|
| *[in]* **x** x factor
|
||||||
|
|
||||||
.. c:function:: void glm_translate2d_y(mat3 m, float y)
|
.. c:function:: void glm_translate2d_y(mat3 m, float y)
|
||||||
@@ -70,7 +70,7 @@ Functions:
|
|||||||
translate existing 2d transform matrix by y factor
|
translate existing 2d transform matrix by y factor
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** 2d affine transfrom
|
| *[in, out]* **m** 2d affine transform
|
||||||
| *[in]* **y** y factor
|
| *[in]* **y** y factor
|
||||||
|
|
||||||
.. c:function:: void glm_translate2d_make(mat3 m, vec2 v)
|
.. c:function:: void glm_translate2d_make(mat3 m, vec2 v)
|
||||||
@@ -78,7 +78,7 @@ Functions:
|
|||||||
creates NEW translate 2d transform matrix by *v* vector
|
creates NEW translate 2d transform matrix by *v* vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y]
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
.. c:function:: void glm_scale2d_to(mat3 m, vec2 v, mat3 dest)
|
.. c:function:: void glm_scale2d_to(mat3 m, vec2 v, mat3 dest)
|
||||||
@@ -86,7 +86,7 @@ Functions:
|
|||||||
scale existing 2d transform matrix by *v* vector and store result in dest
|
scale existing 2d transform matrix by *v* vector and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **v** scale vector [x, y]
|
| *[in]* **v** scale vector [x, y]
|
||||||
| *[out]* **dest** scaled matrix
|
| *[out]* **dest** scaled matrix
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ Functions:
|
|||||||
creates NEW 2d scale matrix by *v* vector
|
creates NEW 2d scale matrix by *v* vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** scale vector [x, y]
|
| *[in]* **v** scale vector [x, y]
|
||||||
|
|
||||||
.. c:function:: void glm_scale2d(mat3 m, vec2 v)
|
.. c:function:: void glm_scale2d(mat3 m, vec2 v)
|
||||||
@@ -103,7 +103,7 @@ Functions:
|
|||||||
scales existing 2d transform matrix by *v* vector and stores result in same matrix
|
scales existing 2d transform matrix by *v* vector and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **v** translate vector [x, y]
|
| *[in]* **v** translate vector [x, y]
|
||||||
|
|
||||||
.. c:function:: void glm_scale2d_uni(mat3 m, float s)
|
.. c:function:: void glm_scale2d_uni(mat3 m, float s)
|
||||||
@@ -111,7 +111,7 @@ Functions:
|
|||||||
applies uniform scale to existing 2d transform matrix v = [s, s] and stores result in same matrix
|
applies uniform scale to existing 2d transform matrix v = [s, s] and stores result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **s** scale factor
|
| *[in]* **s** scale factor
|
||||||
|
|
||||||
.. c:function:: void glm_rotate2d_make(mat3 m, float angle)
|
.. c:function:: void glm_rotate2d_make(mat3 m, float angle)
|
||||||
@@ -119,7 +119,7 @@ Functions:
|
|||||||
creates NEW rotation matrix by angle around *Z* axis
|
creates NEW rotation matrix by angle around *Z* axis
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
|
|
||||||
.. c:function:: void glm_rotate2d(mat3 m, float angle)
|
.. c:function:: void glm_rotate2d(mat3 m, float angle)
|
||||||
@@ -127,7 +127,7 @@ Functions:
|
|||||||
rotate existing 2d transform matrix around *Z* axis by angle and store result in same matrix
|
rotate existing 2d transform matrix around *Z* axis by angle and store result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **m** affine transfrom
|
| *[in, out]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
|
|
||||||
.. c:function:: void glm_rotate2d_to(mat3 m, float angle, mat3 dest)
|
.. c:function:: void glm_rotate2d_to(mat3 m, float angle, mat3 dest)
|
||||||
@@ -135,6 +135,6 @@ Functions:
|
|||||||
rotate existing 2d transform matrix around *Z* axis by angle and store result in dest
|
rotate existing 2d transform matrix around *Z* axis by angle and store result in dest
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** affine transfrom
|
| *[in]* **m** affine transform
|
||||||
| *[in]* **angle** angle (radians)
|
| *[in]* **angle** angle (radians)
|
||||||
| *[out]* **dest** rotated matrix
|
| *[out]* **dest** rotated matrix
|
||||||
@@ -9,7 +9,7 @@ In the future there may be option to forward struct api to call api instead of i
|
|||||||
|
|
||||||
📌 **USE this API docs for similar functions in struct and call api**
|
📌 **USE this API docs for similar functions in struct and call api**
|
||||||
|
|
||||||
📌 In struct api you can omit namespace e.g :code:`glms_vec3_dot` can be called as :code:`vec3_dot` in struct api, see :doc:`struct-api` to configure struct api for more details.
|
📌 In struct api you can omit namespace e.g :code:`glms_vec3_dot` can be called as :code:`vec3_dot` in struct api, see :doc:`api_struct` to configure struct api for more details.
|
||||||
📌 In struct api functions can return struct/union
|
📌 In struct api functions can return struct/union
|
||||||
📌 In struct api you can access items like **.x**, **.y**, **.z**, **.w**, **.r**, **.g**, **.b**, **.a**, **.m00**, **m01**...
|
📌 In struct api you can access items like **.x**, **.y**, **.z**, **.w**, **.r**, **.g**, **.b**, **.a**, **.m00**, **m01**...
|
||||||
|
|
||||||
@@ -43,6 +43,7 @@ Follow the :doc:`build` documentation for this
|
|||||||
cam
|
cam
|
||||||
frustum
|
frustum
|
||||||
box
|
box
|
||||||
|
aabb2d
|
||||||
quat
|
quat
|
||||||
euler
|
euler
|
||||||
mat2
|
mat2
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Also struct api `s` suffix to namespace e.g. `glms_vec3_add`, `glms_mat4_mul` et
|
|||||||
|
|
||||||
By starting v0.9.0, struct api namespace is configurable. We can omit **glms_** namespace or
|
By starting v0.9.0, struct api namespace is configurable. We can omit **glms_** namespace or
|
||||||
even change it with custom name to move existing api integrations to **cglm** more easliy...
|
even change it with custom name to move existing api integrations to **cglm** more easliy...
|
||||||
We can also add **s** to functin names if we want e.g. `glms_vec3_add()` -> `vec3_add()` or `vec3s_add()`.
|
We can also add **s** to function names if we want e.g. `glms_vec3_add()` -> `vec3_add()` or `vec3s_add()`.
|
||||||
|
|
||||||
By including **cglm/struct.h** header you will include all struct api. It will also include **cglm/cglm.h** too.
|
By including **cglm/struct.h** header you will include all struct api. It will also include **cglm/cglm.h** too.
|
||||||
Since struct apis are inline you don't need to build or link *cglm* against
|
Since struct apis are inline you don't need to build or link *cglm* against
|
||||||
@@ -91,6 +91,9 @@ To configure the Struct API namespace, you can define the following macros befor
|
|||||||
- **CGLM_STRUCT_API_NS**: define name space for struct api, DEFAULT is **glms**
|
- **CGLM_STRUCT_API_NS**: define name space for struct api, DEFAULT is **glms**
|
||||||
- **CGLM_STRUCT_API_NAME_SUFFIX**: define name suffix, DEFAULT is **empty** e.g defining it as #define CGLM_STRUCT_API_NAME_SUFFIX s will add s suffix to mat4_mul -> mat4s_mul
|
- **CGLM_STRUCT_API_NAME_SUFFIX**: define name suffix, DEFAULT is **empty** e.g defining it as #define CGLM_STRUCT_API_NAME_SUFFIX s will add s suffix to mat4_mul -> mat4s_mul
|
||||||
|
|
||||||
|
❗️ IMPORTANT ❗️
|
||||||
|
|
||||||
|
It's a good idea to set up your config macros in build settings like CMake, Xcode, or Visual Studio. This is especially important if you're using features like Modules in Xcode, where adding macros directly before the **cglm** headers might not work.
|
||||||
|
|
||||||
Detailed documentation for Struct API:
|
Detailed documentation for Struct API:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **box** bounding box
|
| *[in]* **box** bounding box
|
||||||
| *[in]* **cropBox** crop box
|
| *[in]* **cropBox** crop box
|
||||||
| *[in]* **clampBox** miniumum box
|
| *[in]* **clampBox** minimum box
|
||||||
| *[out]* **dest** cropped bounding box
|
| *[out]* **dest** cropped bounding box
|
||||||
|
|
||||||
.. c:function:: bool glm_aabb_frustum(vec3 box[2], vec4 planes[6])
|
.. c:function:: bool glm_aabb_frustum(vec3 box[2], vec4 planes[6])
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ Build cglm
|
|||||||
|
|
||||||
| **cglm** does not have any external dependencies.
|
| **cglm** does not have any external dependencies.
|
||||||
|
|
||||||
**NOTE:**
|
.. note::
|
||||||
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):
|
CMake (All platforms):
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -3,17 +3,17 @@
|
|||||||
precompiled functions (call)
|
precompiled functions (call)
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
All funcitons in **glm_** namespace are forced to **inline**.
|
All functions in **glm_** namespace are forced to **inline**.
|
||||||
Most functions also have pre-compiled version.
|
Most functions also have pre-compiled version.
|
||||||
|
|
||||||
Precompiled versions are in **glmc_** namespace. *c* in the namespace stands for
|
Precompiled versions are in **glmc_** namespace. *c* in the namespace stands for
|
||||||
"call".
|
"call".
|
||||||
|
|
||||||
Since precompiled functions are just wrapper for inline verisons,
|
Since precompiled functions are just wrapper for inline versions,
|
||||||
these functions are not documented individually.
|
these functions are not documented individually.
|
||||||
It would be duplicate documentation also it
|
It would be duplicate documentation also it
|
||||||
would be hard to sync documentation between inline and call verison for me.
|
would be hard to sync documentation between inline and call version for me.
|
||||||
|
|
||||||
By including **clgm/cglm.h** you include all inline verisons. To get precompiled
|
By including **clgm/cglm.h** you include all inline versions. To get precompiled
|
||||||
versions you need to include **cglm/call.h** header it also includes all
|
versions you need to include **cglm/call.h** header it also includes all
|
||||||
call versions plus *clgm/cglm.h* (inline verisons)
|
call versions plus *clgm/cglm.h* (inline versions)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ fast if you don't care specific projection values.
|
|||||||
*_decomp* means decompose; these function can help to decompose projection
|
*_decomp* means decompose; these function can help to decompose projection
|
||||||
matrices.
|
matrices.
|
||||||
|
|
||||||
**NOTE**: Be careful when working with high range (very small near, very large
|
.. note:: Be careful when working with high range (very small near, very large
|
||||||
far) projection matrices. You may not get exact value you gave.
|
far) projection matrices. You may not get exact value you gave.
|
||||||
**float** type cannot store very high precision so you will lose precision.
|
**float** type cannot store very high precision so you will lose precision.
|
||||||
Also your projection matrix will be inaccurate due to losing precision
|
Also your projection matrix will be inaccurate due to losing precision
|
||||||
@@ -178,7 +178,7 @@ Functions documentation
|
|||||||
|
|
||||||
| set up view matrix
|
| set up view matrix
|
||||||
|
|
||||||
**NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
.. note:: The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **eye** eye vector
|
| *[in]* **eye** eye vector
|
||||||
@@ -194,7 +194,7 @@ Functions documentation
|
|||||||
target self then this might be useful. Because you need to get target
|
target self then this might be useful. Because you need to get target
|
||||||
from direction.
|
from direction.
|
||||||
|
|
||||||
**NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
.. note:: The UP vector must not be parallel to the line of sight from the eye point to the reference point.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **eye** eye vector
|
| *[in]* **eye** eye vector
|
||||||
@@ -250,7 +250,7 @@ Functions documentation
|
|||||||
.. c:function:: void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
|
.. c:function:: void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
|
||||||
|
|
||||||
| decomposes top and bottom values of perspective projection.
|
| decomposes top and bottom values of perspective projection.
|
||||||
| y stands for y axis (top / botom axis)
|
| y stands for y axis (top / bottom axis)
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **proj** perspective projection matrix
|
| *[in]* **proj** perspective projection matrix
|
||||||
|
|||||||
@@ -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.9.2'
|
version = u'0.9.4'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.9.2'
|
release = u'0.9.4'
|
||||||
|
|
||||||
# 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.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Features
|
|||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
* **scalar** and **simd** (sse, avx, neon, wasm...) optimizations
|
* **scalar** and **simd** (sse, avx, neon, wasm...) optimizations
|
||||||
* option to use different clipspaces e.g. Left Handed, Zero-to-One... (currrently right handed negative-one is default)
|
* option to use different clipspaces e.g. Left Handed, Zero-to-One... (currently right handed negative-one is default)
|
||||||
* array api and struct api, you can use arrays or structs.
|
* array api and struct api, you can use arrays or structs.
|
||||||
* general purpose matrix operations (mat4, mat3)
|
* general purpose matrix operations (mat4, mat3)
|
||||||
* chain matrix multiplication (square only)
|
* chain matrix multiplication (square only)
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ not **vec3**. If you want to store them to save space you msut convert them
|
|||||||
yourself.
|
yourself.
|
||||||
|
|
||||||
**vec4** is used to speed up functions need to corners. This is why frustum
|
**vec4** is used to speed up functions need to corners. This is why frustum
|
||||||
fucntions use *vec4* instead of *vec3*
|
functions use *vec4* instead of *vec3*
|
||||||
|
|
||||||
Currenty related-functions use [-1, 1] clip space configuration to extract
|
Currently related-functions use [-1, 1] clip space configuration to extract
|
||||||
corners but you can override it by prodiving **GLM_CUSTOM_CLIPSPACE** macro.
|
corners but you can override it by prodiving **GLM_CUSTOM_CLIPSPACE** macro.
|
||||||
If you provide it then you have to all bottom macros as *vec4*
|
If you provide it then you have to all bottom macros as *vec4*
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Types:
|
|||||||
typedef CGLM_ALIGN_IF(16) vec4 mat4[4];
|
typedef CGLM_ALIGN_IF(16) vec4 mat4[4];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
As you can see types don't store extra informations in favor of space.
|
As you can see types don't store extra information in favor of space.
|
||||||
You can send these values e.g. matrix to OpenGL directly without casting or calling a function like *value_ptr*
|
You can send these values e.g. matrix to OpenGL directly without casting or calling a function like *value_ptr*
|
||||||
|
|
||||||
Alignment Is Required:
|
Alignment Is Required:
|
||||||
@@ -35,16 +35,16 @@ Alignment Is Required:
|
|||||||
|
|
||||||
| Check :doc:`opt` page for more details
|
| Check :doc:`opt` page for more details
|
||||||
|
|
||||||
Also alignment is disabled for older msvc verisons as default. Now alignment is only required in Visual Studio 2017 version 15.6+ if CGLM_ALL_UNALIGNED macro is not defined.
|
Also alignment is disabled for older msvc versions as default. Now alignment is only required in Visual Studio 2017 version 15.6+ if CGLM_ALL_UNALIGNED macro is not defined.
|
||||||
|
|
||||||
Allocations:
|
Allocations:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
*cglm* doesn't alloc any memory on heap. So it doesn't provide any allocator.
|
*cglm* doesn't alloc any memory on heap. So it doesn't provide any allocator.
|
||||||
You must allocate memory yourself. You should alloc memory for out parameters too if you pass pointer of memory location. When allocating memory, don't forget that **vec4** and **mat4** require alignment.
|
You must allocate memory yourself. You should alloc memory for out parameters too if you pass pointer of memory location. When allocating memory, don't forget that **vec4** and **mat4** require alignment.
|
||||||
|
|
||||||
**NOTE:** Unaligned **vec4** and unaligned **mat4** operations will be supported in the future. Check todo list.
|
.. note:: Unaligned **vec4** and unaligned **mat4** operations will be supported in the future. Check todo list.
|
||||||
Because you may want to multiply a CGLM matrix with external matrix.
|
Because you may want to multiply a CGLM matrix with external matrix.
|
||||||
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
There is no guarantee that non-CGLM matrix is aligned. Unaligned types will have *u* prefix e.g. **umat4**
|
||||||
|
|
||||||
Array vs Struct:
|
Array vs Struct:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -24,12 +24,12 @@ Example to print mat4 matrix:
|
|||||||
/* ... */
|
/* ... */
|
||||||
glm_mat4_print(transform, stderr);
|
glm_mat4_print(transform, stderr);
|
||||||
|
|
||||||
**NOTE:** print functions use **%0.4f** precision if you need more
|
.. note:: print functions use **%0.4f** precision if you need more
|
||||||
(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**:
|
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 mis-alignment of columns are fixed: larger numbers are printed via %g and others are printed via %f. Column widths are calculated before print.
|
||||||
* Now values are colorful ;)
|
* Now values are colorful ;)
|
||||||
* Some print improvements
|
* Some print improvements
|
||||||
* New options with default values:
|
* New options with default values:
|
||||||
@@ -143,5 +143,5 @@ Functions documentation
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **vec** aabb (axis-aligned bounding box)
|
| *[in]* **vec** aabb (axis-aligned bounding box)
|
||||||
| *[in]* **tag** tag to find it more easly in logs
|
| *[in]* **tag** tag to find it more easily in logs
|
||||||
| *[in]* **ostream** FILE to write
|
| *[in]* **ostream** FILE to write
|
||||||
|
|||||||
@@ -21,12 +21,17 @@ Functions:
|
|||||||
#. :c:func:`glm_ivec2_copy`
|
#. :c:func:`glm_ivec2_copy`
|
||||||
#. :c:func:`glm_ivec2_zero`
|
#. :c:func:`glm_ivec2_zero`
|
||||||
#. :c:func:`glm_ivec2_one`
|
#. :c:func:`glm_ivec2_one`
|
||||||
|
#. :c:func:`glm_ivec2_dot`
|
||||||
|
#. :c:func:`glm_ivec2_cross`
|
||||||
#. :c:func:`glm_ivec2_add`
|
#. :c:func:`glm_ivec2_add`
|
||||||
#. :c:func:`glm_ivec2_adds`
|
#. :c:func:`glm_ivec2_adds`
|
||||||
#. :c:func:`glm_ivec2_sub`
|
#. :c:func:`glm_ivec2_sub`
|
||||||
#. :c:func:`glm_ivec2_subs`
|
#. :c:func:`glm_ivec2_subs`
|
||||||
#. :c:func:`glm_ivec2_mul`
|
#. :c:func:`glm_ivec2_mul`
|
||||||
#. :c:func:`glm_ivec2_scale`
|
#. :c:func:`glm_ivec2_scale`
|
||||||
|
#. :c:func:`glm_ivec2_div`
|
||||||
|
#. :c:func:`glm_ivec2_divs`
|
||||||
|
#. :c:func:`glm_ivec2_mod`
|
||||||
#. :c:func:`glm_ivec2_distance2`
|
#. :c:func:`glm_ivec2_distance2`
|
||||||
#. :c:func:`glm_ivec2_distance`
|
#. :c:func:`glm_ivec2_distance`
|
||||||
#. :c:func:`glm_ivec2_maxv`
|
#. :c:func:`glm_ivec2_maxv`
|
||||||
@@ -67,6 +72,30 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **v** vector
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec2_dot(ivec2 a, ivec2 b)
|
||||||
|
|
||||||
|
dot product of ivec2
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector1
|
||||||
|
| *[in]* **b** vector2
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dot product
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec2_cross(ivec2 a, ivec2 b)
|
||||||
|
|
||||||
|
cross product of two vector (RH)
|
||||||
|
|
||||||
|
| ref: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Z component of cross product
|
||||||
|
|
||||||
.. c:function:: void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
.. c:function:: void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
add vector [a] to vector [b] and store result in [dest]
|
add vector [a] to vector [b] and store result in [dest]
|
||||||
@@ -121,6 +150,33 @@ Functions documentation
|
|||||||
| *[in]* **s** scalar
|
| *[in]* **s** scalar
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
div vector with another component-wise division: d = a / b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_divs(ivec2 v, int s, ivec2 dest)
|
||||||
|
|
||||||
|
div vector with scalar: d = v / s
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s)
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
|
mod vector with another component-wise modulo: d = a % b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector
|
||||||
|
| *[in]* **b** scalar
|
||||||
|
| *[out]* **dest** result = (a[0] % b[0], a[1] % b[1])
|
||||||
|
|
||||||
.. c:function:: int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
.. c:function:: int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
||||||
|
|
||||||
squared distance between two vectors
|
squared distance between two vectors
|
||||||
|
|||||||
@@ -21,12 +21,18 @@ Functions:
|
|||||||
#. :c:func:`glm_ivec3_copy`
|
#. :c:func:`glm_ivec3_copy`
|
||||||
#. :c:func:`glm_ivec3_zero`
|
#. :c:func:`glm_ivec3_zero`
|
||||||
#. :c:func:`glm_ivec3_one`
|
#. :c:func:`glm_ivec3_one`
|
||||||
|
#. :c:func:`glm_ivec3_dot`
|
||||||
|
#. :c:func:`glm_ivec3_norm2`
|
||||||
|
#. :c:func:`glm_ivec3_norm`
|
||||||
#. :c:func:`glm_ivec3_add`
|
#. :c:func:`glm_ivec3_add`
|
||||||
#. :c:func:`glm_ivec3_adds`
|
#. :c:func:`glm_ivec3_adds`
|
||||||
#. :c:func:`glm_ivec3_sub`
|
#. :c:func:`glm_ivec3_sub`
|
||||||
#. :c:func:`glm_ivec3_subs`
|
#. :c:func:`glm_ivec3_subs`
|
||||||
#. :c:func:`glm_ivec3_mul`
|
#. :c:func:`glm_ivec3_mul`
|
||||||
#. :c:func:`glm_ivec3_scale`
|
#. :c:func:`glm_ivec3_scale`
|
||||||
|
#. :c:func:`glm_ivec3_div`
|
||||||
|
#. :c:func:`glm_ivec3_divs`
|
||||||
|
#. :c:func:`glm_ivec3_mod`
|
||||||
#. :c:func:`glm_ivec3_distance2`
|
#. :c:func:`glm_ivec3_distance2`
|
||||||
#. :c:func:`glm_ivec3_distance`
|
#. :c:func:`glm_ivec3_distance`
|
||||||
#. :c:func:`glm_ivec3_fill`
|
#. :c:func:`glm_ivec3_fill`
|
||||||
@@ -70,6 +76,39 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **v** vector
|
| *[out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec3_dot(ivec3 a, ivec3 b)
|
||||||
|
|
||||||
|
dot product of ivec3
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector1
|
||||||
|
| *[in]* **b** vector2
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dot product
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec3_norm2(ivec3 v)
|
||||||
|
|
||||||
|
norm * norm (magnitude) of vector
|
||||||
|
|
||||||
|
we can use this func instead of calling norm * norm, because it would call
|
||||||
|
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||||
|
not good name for this func
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
square of norm / magnitude, cast to an integer
|
||||||
|
|
||||||
|
.. c:function:: int glm_ivec3_norm(ivec3 vec)
|
||||||
|
|
||||||
|
| euclidean norm (magnitude), also called L2 norm
|
||||||
|
| this will give magnitude of vector in euclidean space
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector
|
||||||
|
|
||||||
.. c:function:: void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
.. c:function:: void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
add vector [a] to vector [b] and store result in [dest]
|
add vector [a] to vector [b] and store result in [dest]
|
||||||
@@ -124,6 +163,33 @@ Functions documentation
|
|||||||
| *[in]* **s** scalar
|
| *[in]* **s** scalar
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_div(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
div vector with another component-wise division: d = a / b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_divs(ivec3 v, int s, ivec3 dest)
|
||||||
|
|
||||||
|
div vector with scalar: d = v / s
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **s** scalar
|
||||||
|
| *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s)
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
|
mod vector with another component-wise modulo: d = a % b
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector
|
||||||
|
| *[in]* **b** scalar
|
||||||
|
| *[out]* **dest** result = (a[0] % b[0], a[1] % b[1], a[2] % b[2])
|
||||||
|
|
||||||
.. c:function:: int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
.. c:function:: int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
||||||
|
|
||||||
squared distance between two vectors
|
squared distance between two vectors
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat2_identity(mat2 mat)
|
.. c:function:: void glm_mat2_identity(mat2 mat)
|
||||||
|
|
||||||
copy identity mat2 to mat, or makes mat to identiy
|
copy identity mat2 to mat, or makes mat to identity
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **mat** matrix
|
| *[out]* **mat** matrix
|
||||||
@@ -94,7 +94,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat2_transpose(mat2 m)
|
.. c:function:: void glm_mat2_transpose(mat2 m)
|
||||||
|
|
||||||
tranpose mat2 and store result in same matrix
|
transpose mat2 and store result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **mat** source
|
| *[in]* **mat** source
|
||||||
@@ -180,11 +180,11 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
scalar value e.g. Matrix1x1
|
scalar value e.g. Matrix1x1
|
||||||
|
|
||||||
.. c:function:: void glm_mat2_make(float * __restrict src, mat2 dest)
|
.. c:function:: void glm_mat2_make(const float * __restrict src, mat2 dest)
|
||||||
|
|
||||||
Create mat2 matrix from pointer
|
Create mat2 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 4 elements.
|
.. note:: **@src** must contain at least 4 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
|
|||||||
@@ -23,6 +23,16 @@ Functions:
|
|||||||
#. :c:func:`glm_mat2x3_transpose`
|
#. :c:func:`glm_mat2x3_transpose`
|
||||||
#. :c:func:`glm_mat2x3_scale`
|
#. :c:func:`glm_mat2x3_scale`
|
||||||
|
|
||||||
|
Represented
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. csv-table:: mat2x3
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10"
|
||||||
|
"row 2", "m01", "m11"
|
||||||
|
"row 3", "m02", "m12"
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -41,38 +51,78 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x3_make(float * __restrict src, mat2x3 dest)
|
.. c:function:: void glm_mat2x3_make(const float * __restrict src, mat2x3 dest)
|
||||||
|
|
||||||
Create mat2x3 matrix from pointer
|
Create mat2x3 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 6 elements.
|
.. note:: **@src** must contain at least 6 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix2x3
|
| *[out]* **dest** destination matrix2x3
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest)
|
.. c:function:: void glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat3 dest)
|
||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat2x3_mul(mat2x3, mat3x2, mat2);
|
glm_mat2x3_mul(mat2x3, mat3x2, mat3);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix (mat2x3)
|
| *[in]* **m1** left matrix (mat2x3)
|
||||||
| *[in]* **m2** right matrix (mat3x2)
|
| *[in]* **m2** right matrix (mat3x2)
|
||||||
| *[out]* **dest** destination matrix (mat2)
|
| *[out]* **dest** destination matrix (mat3)
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest)
|
.. csv-table:: mat2x3
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
multiply mat2x3 with vec3 (column vector) and store in dest vector
|
"row 1", "a00", "a10"
|
||||||
|
"row 2", "a01", "a11"
|
||||||
|
"row 3", "a02", "a12"
|
||||||
|
|
||||||
|
.. csv-table:: mat3x2
|
||||||
|
:header: "", "column 1", "column 2", "column 3"
|
||||||
|
|
||||||
|
"row 1", "b00", "b10", "b20"
|
||||||
|
"row 2", "b01", "b11", "b21"
|
||||||
|
|
||||||
|
.. csv-table:: mat3x3
|
||||||
|
:header: "", "column 1", "column 2", "column 3"
|
||||||
|
|
||||||
|
"row 1", "a00 * b00 + a10 * b01", "a00 * b10 + a10 * b11", "a00 * b20 + a10 * b21"
|
||||||
|
"row 2", "a01 * b00 + a11 * b01", "a01 * b10 + a11 * b11", "a01 * b20 + a11 * b21"
|
||||||
|
"row 3", "a02 * b00 + a12 * b01", "a02 * b10 + a12 * b11", "a02 * b20 + a12 * b21"
|
||||||
|
|
||||||
|
.. c:function:: void glm_mat2x3_mulv(mat2x3 m, vec2 v, vec3 dest)
|
||||||
|
|
||||||
|
multiply mat2x3 with vec2 (column vector) and store in dest column vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** mat2x3 (left)
|
| *[in]* **m** mat2x3 (left)
|
||||||
| *[in]* **v** vec3 (right, column vector)
|
| *[in]* **v** vec3 (right, column vector)
|
||||||
| *[out]* **dest** destination (result, column vector)
|
| *[out]* **dest** destination (result, column vector)
|
||||||
|
|
||||||
|
.. csv-table:: mat2x3
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10"
|
||||||
|
"row 2", "m01", "m11"
|
||||||
|
"row 3", "m02", "m12"
|
||||||
|
|
||||||
|
.. csv-table:: column vec2 (1x2)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "v0"
|
||||||
|
"row 2", "v1"
|
||||||
|
|
||||||
|
.. csv-table:: column vec3 (1x3)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "m00 * v0 + m10 * v1"
|
||||||
|
"row 2", "m01 * v0 + m11 * v1"
|
||||||
|
"row 3", "m02 * v0 + m12 * v1"
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest)
|
.. c:function:: void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest)
|
||||||
|
|
||||||
transpose matrix and store in dest
|
transpose matrix and store in dest
|
||||||
|
|||||||
@@ -23,6 +23,17 @@ Functions:
|
|||||||
#. :c:func:`glm_mat2x4_transpose`
|
#. :c:func:`glm_mat2x4_transpose`
|
||||||
#. :c:func:`glm_mat2x4_scale`
|
#. :c:func:`glm_mat2x4_scale`
|
||||||
|
|
||||||
|
Represented
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. csv-table:: mat2x4
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10"
|
||||||
|
"row 2", "m01", "m11"
|
||||||
|
"row 3", "m02", "m12"
|
||||||
|
"row 4", "m03", "m13"
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -41,38 +52,82 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x4_make(float * __restrict src, mat2x4 dest)
|
.. c:function:: void glm_mat2x4_make(const float * __restrict src, mat2x4 dest)
|
||||||
|
|
||||||
Create mat2x4 matrix from pointer
|
Create mat2x4 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 8 elements.
|
.. note:: **@src** must contain at least 8 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix2x4
|
| *[out]* **dest** destination matrix2x4
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest)
|
.. c:function:: void glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat4 dest)
|
||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat2x4_mul(mat2x4, mat4x2, mat2);
|
glm_mat2x4_mul(mat2x4, mat4x2, mat4);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix (mat2x4)
|
| *[in]* **m1** left matrix (mat2x4)
|
||||||
| *[in]* **m2** right matrix (mat4x2)
|
| *[in]* **m2** right matrix (mat4x2)
|
||||||
| *[out]* **dest** destination matrix (mat2)
|
| *[out]* **dest** destination matrix (mat4)
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest)
|
.. csv-table:: mat2x4
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
multiply mat2x4 with vec4 (column vector) and store in dest vector
|
"row 1", "a00", "a10"
|
||||||
|
"row 2", "a01", "a11"
|
||||||
|
"row 3", "a02", "a12"
|
||||||
|
"row 4", "a03", "a13"
|
||||||
|
|
||||||
|
.. csv-table:: mat4x2
|
||||||
|
:header: "", "column 1", "column 2", "column 3", "column 4"
|
||||||
|
|
||||||
|
"row 1", "b00", "b10", "b20", "b30"
|
||||||
|
"row 2", "b01", "b11", "b21", "b31"
|
||||||
|
|
||||||
|
.. csv-table:: mat4x4
|
||||||
|
:header: "", "column 1", "column 2", "column 3", "column 4"
|
||||||
|
|
||||||
|
"row 1", "a00 * b00 + a10 * b01", "a00 * b10 + a10 * b11", "a00 * b20 + a10 * b21", "a00 * b30 + a10 * b31"
|
||||||
|
"row 2", "a01 * b00 + a11 * b01", "a01 * b10 + a11 * b11", "a01 * b20 + a11 * b21", "a01 * b30 + a11 * b31"
|
||||||
|
"row 3", "a02 * b00 + a12 * b01", "a02 * b10 + a12 * b11", "a02 * b20 + a12 * b21", "a02 * b30 + a12 * b31"
|
||||||
|
"row 4", "a03 * b00 + a13 * b01", "a03 * b10 + a13 * b11", "a03 * b20 + a13 * b21", "a03 * b30 + a13 * b31"
|
||||||
|
|
||||||
|
.. c:function:: void glm_mat2x4_mulv(mat2x4 m, vec2 v, vec4 dest)
|
||||||
|
|
||||||
|
multiply mat2x4 with vec2 (column vector) and store in dest column vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** mat2x4 (left)
|
| *[in]* **m** mat2x4 (left)
|
||||||
| *[in]* **v** vec4 (right, column vector)
|
| *[in]* **v** vec2 (right, column vector)
|
||||||
| *[out]* **dest** destination (result, column vector)
|
| *[out]* **dest** destination (result, column vector)
|
||||||
|
|
||||||
|
.. csv-table:: mat2x4
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10"
|
||||||
|
"row 2", "m01", "m11"
|
||||||
|
"row 3", "m02", "m12"
|
||||||
|
"row 4", "m03", "m13"
|
||||||
|
|
||||||
|
.. csv-table:: column vec2 (1x2)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "v0"
|
||||||
|
"row 2", "v1"
|
||||||
|
|
||||||
|
.. csv-table:: column vec4 (1x4)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "m00 * v0 + m10 * v1"
|
||||||
|
"row 2", "m01 * v0 + m11 * v1"
|
||||||
|
"row 3", "m02 * v0 + m12 * v1"
|
||||||
|
"row 4", "m03 * v0 + m13 * v1"
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest)
|
.. c:function:: void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest)
|
||||||
|
|
||||||
transpose matrix and store in dest
|
transpose matrix and store in dest
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat3_identity(mat3 mat)
|
.. c:function:: void glm_mat3_identity(mat3 mat)
|
||||||
|
|
||||||
copy identity mat3 to mat, or makes mat to identiy
|
copy identity mat3 to mat, or makes mat to identity
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **mat** matrix
|
| *[out]* **mat** matrix
|
||||||
@@ -96,7 +96,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat3_transpose(mat3 m)
|
.. c:function:: void glm_mat3_transpose(mat3 m)
|
||||||
|
|
||||||
tranpose mat3 and store result in same matrix
|
transpose mat3 and store result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **mat** source
|
| *[in]* **mat** source
|
||||||
@@ -190,11 +190,11 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
scalar value e.g. Matrix1x1
|
scalar value e.g. Matrix1x1
|
||||||
|
|
||||||
.. c:function:: void glm_mat3_make(float * __restrict src, mat3 dest)
|
.. c:function:: void glm_mat3_make(const float * __restrict src, mat3 dest)
|
||||||
|
|
||||||
Create mat3 matrix from pointer
|
Create mat3 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 9 elements.
|
.. note:: **@src** must contain at least 9 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
|
|||||||
@@ -23,6 +23,15 @@ Functions:
|
|||||||
#. :c:func:`glm_mat3x2_transpose`
|
#. :c:func:`glm_mat3x2_transpose`
|
||||||
#. :c:func:`glm_mat3x2_scale`
|
#. :c:func:`glm_mat3x2_scale`
|
||||||
|
|
||||||
|
Represented
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. csv-table:: mat3x2
|
||||||
|
:header: "", "column 1", "column 2", "column 3"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10", "m20"
|
||||||
|
"row 2", "m01", "m11", "m21"
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@@ -41,37 +50,76 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x2_make(float * __restrict src, mat3x2 dest)
|
.. c:function:: void glm_mat3x2_make(const float * __restrict src, mat3x2 dest)
|
||||||
|
|
||||||
Create mat3x2 matrix from pointer
|
Create mat3x2 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 6 elements.
|
.. note:: **@src** must contain at least 6 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix3x2
|
| *[out]* **dest** destination matrix3x2
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest)
|
.. c:function:: void glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat2 dest)
|
||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat3x2_mul(mat3x2, mat2x3, mat3);
|
glm_mat3x2_mul(mat3x2, mat2x3, mat2);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix (mat3x2)
|
| *[in]* **m1** left matrix (mat3x2)
|
||||||
| *[in]* **m2** right matrix (mat2x3)
|
| *[in]* **m2** right matrix (mat2x3)
|
||||||
| *[out]* **dest** destination matrix (mat3)
|
| *[out]* **dest** destination matrix (mat2)
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest)
|
.. csv-table:: mat3x2
|
||||||
|
:header: "", "column 1", "column 2", "column 3"
|
||||||
|
|
||||||
multiply mat3x2 with vec2 (column vector) and store in dest vector
|
"row 1", "a00", "a10", "a20"
|
||||||
|
"row 2", "a01", "a11", "a21"
|
||||||
|
|
||||||
|
.. csv-table:: mat2x3
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "b00", "b10"
|
||||||
|
"row 2", "b01", "b11"
|
||||||
|
"row 3", "b02", "b12"
|
||||||
|
|
||||||
|
.. csv-table:: mat2x2
|
||||||
|
:header: "", "column 1", "column 2"
|
||||||
|
|
||||||
|
"row 1", "a00 * b00 + a10 * b01 + a20 * b02", "a00 * b10 + a10 * b11 + a20 * b12"
|
||||||
|
"row 2", "a01 * b00 + a11 * b01 + a21 * b02", "a01 * b10 + a11 * b11 + a21 * b12"
|
||||||
|
|
||||||
|
.. c:function:: void glm_mat3x2_mulv(mat3x2 m, vec3 v, vec2 dest)
|
||||||
|
|
||||||
|
multiply mat3x2 with vec3 (column vector) and store in dest vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** mat3x2 (left)
|
| *[in]* **m** mat3x2 (left)
|
||||||
| *[in]* **v** vec3 (right, column vector)
|
| *[in]* **v** vec3 (right, column vector)
|
||||||
| *[out]* **dest** destination (result, column vector)
|
| *[out]* **dest** destination (result, column vector)
|
||||||
|
|
||||||
|
.. csv-table:: mat3x2
|
||||||
|
:header: "", "column 1", "column 2", "column 3"
|
||||||
|
|
||||||
|
"row 1", "m00", "m10", "m20"
|
||||||
|
"row 2", "m01", "m11", "m21"
|
||||||
|
|
||||||
|
.. csv-table:: column vec3 (1x3)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "v0"
|
||||||
|
"row 2", "v1"
|
||||||
|
"row 3", "v2"
|
||||||
|
|
||||||
|
.. csv-table:: column vec2 (1x2)
|
||||||
|
:header: "", "column 1"
|
||||||
|
|
||||||
|
"row 1", "m00 * v0 + m10 * v1 + m20 * v2"
|
||||||
|
"row 2", "m01 * v0 + m11 * v1 + m21 * v2"
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest)
|
.. c:function:: void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest)
|
||||||
|
|
||||||
transpose matrix and store in dest
|
transpose matrix and store in dest
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x4_make(float * __restrict src, mat3x4 dest)
|
.. c:function:: void glm_mat3x4_make(const float * __restrict src, mat3x4 dest)
|
||||||
|
|
||||||
Create mat3x4 matrix from pointer
|
Create mat3x4 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 12 elements.
|
.. note::: **@src** must contain at least 12 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix3x4
|
| *[out]* **dest** destination matrix3x4
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ Functions:
|
|||||||
#. :c:func:`glm_mat4_mulN`
|
#. :c:func:`glm_mat4_mulN`
|
||||||
#. :c:func:`glm_mat4_mulv`
|
#. :c:func:`glm_mat4_mulv`
|
||||||
#. :c:func:`glm_mat4_mulv3`
|
#. :c:func:`glm_mat4_mulv3`
|
||||||
#. :c:func:`glm_mat3_trace`
|
#. :c:func:`glm_mat4_trace`
|
||||||
#. :c:func:`glm_mat3_trace3`
|
#. :c:func:`glm_mat4_trace3`
|
||||||
#. :c:func:`glm_mat4_quat`
|
#. :c:func:`glm_mat4_quat`
|
||||||
#. :c:func:`glm_mat4_transpose_to`
|
#. :c:func:`glm_mat4_transpose_to`
|
||||||
#. :c:func:`glm_mat4_transpose`
|
#. :c:func:`glm_mat4_transpose`
|
||||||
@@ -70,7 +70,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat4_identity(mat4 mat)
|
.. c:function:: void glm_mat4_identity(mat4 mat)
|
||||||
|
|
||||||
copy identity mat4 to mat, or makes mat to identiy
|
copy identity mat4 to mat, or makes mat to identity
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[out]* **mat** matrix
|
| *[out]* **mat** matrix
|
||||||
@@ -214,7 +214,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat4_transpose(mat4 m)
|
.. c:function:: void glm_mat4_transpose(mat4 m)
|
||||||
|
|
||||||
tranpose mat4 and store result in same matrix
|
transpose mat4 and store result in same matrix
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m** source
|
| *[in]* **m** source
|
||||||
@@ -263,7 +263,7 @@ Functions documentation
|
|||||||
| e.g Newton-Raphson. this should work faster than normal,
|
| e.g Newton-Raphson. this should work faster than normal,
|
||||||
| to get more precise use glm_mat4_inv version.
|
| to get more precise use glm_mat4_inv version.
|
||||||
|
|
||||||
| NOTE: You will lose precision, glm_mat4_inv is more accurate
|
.. note:: You will lose precision, glm_mat4_inv is more accurate
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **mat** source
|
| *[in]* **mat** source
|
||||||
@@ -304,11 +304,11 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
scalar value e.g. Matrix1x1
|
scalar value e.g. Matrix1x1
|
||||||
|
|
||||||
.. c:function:: void glm_mat4_make(float * __restrict src, mat4 dest)
|
.. c:function:: void glm_mat4_make(const float * __restrict src, mat4 dest)
|
||||||
|
|
||||||
Create mat4 matrix from pointer
|
Create mat4 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 16 elements.
|
.. note:: **@src** must contain at least 16 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat4x2_make(float * __restrict src, mat4x2 dest)
|
.. c:function:: void glm_mat4x2_make(const float * __restrict src, mat4x2 dest)
|
||||||
|
|
||||||
Create mat4x2 matrix from pointer
|
Create mat4x2 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 8 elements.
|
.. note:: **@src** must contain at least 8 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix4x2
|
| *[out]* **dest** destination matrix4x2
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in,out]* **mat** matrix
|
| *[in,out]* **mat** matrix
|
||||||
|
|
||||||
.. c:function:: void glm_mat4x3_make(float * __restrict src, mat4x3 dest)
|
.. c:function:: void glm_mat4x3_make(const float * __restrict src, mat4x3 dest)
|
||||||
|
|
||||||
Create mat4x3 matrix from pointer
|
Create mat4x3 matrix from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 12 elements.
|
.. note:: **@src** must contain at least 12 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination matrix4x3
|
| *[out]* **dest** destination matrix4x3
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ array of matrices:
|
|||||||
/* ... */
|
/* ... */
|
||||||
glUniformMatrix4fv(location, count, GL_FALSE, (float *)matrix);
|
glUniformMatrix4fv(location, count, GL_FALSE, (float *)matrix);
|
||||||
|
|
||||||
in this way, passing aray of matrices is same
|
in this way, passing array of matrices is same
|
||||||
|
|
||||||
Passing / Uniforming Vectors to OpenGL:
|
Passing / Uniforming Vectors to OpenGL:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You don't need to do extra thing when passing cglm vectors to OpengL or other APIs.
|
You don't need to do extra thing when passing cglm vectors to OpengL or other APIs.
|
||||||
Because a function like **glUniform4fv** accepts vector as pointer. cglm's vectors
|
Because a function like **glUniform4fv** accepts vector as pointer. cglm's vectors
|
||||||
are array of floats. So you can pass it directly ot those functions:
|
are array of floats. So you can pass it directly to those functions:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
|
|||||||
@@ -5,35 +5,33 @@
|
|||||||
|
|
||||||
A few options are provided via macros.
|
A few options are provided via macros.
|
||||||
|
|
||||||
|
❗️ IMPORTANT ❗️
|
||||||
|
|
||||||
|
It's a good idea to set up your config macros in build settings like CMake, Xcode, or Visual Studio. This is especially important if you're using features like Modules in Xcode, where adding macros directly before the **cglm** headers might not work.
|
||||||
|
|
||||||
Alignment Option
|
Alignment Option
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
As default, cglm requires types to be aligned. Alignment requirements:
|
By default, **cglm** requires types to be aligned with specific byte requirements:
|
||||||
|
|
||||||
vec3: 8 byte
|
- vec3: 8 bytes
|
||||||
vec4: 16 byte
|
- vec4: 16 bytes
|
||||||
mat4: 16 byte
|
- mat4: 16 bytes (32 on AVX)
|
||||||
versor: 16 byte
|
- versor: 16 bytes
|
||||||
|
|
||||||
By starting **v0.4.5** cglm provides an option to disable alignment requirement.
|
Starting with **v0.4.5**, **cglm** offers an option to relax these alignment requirements. To use this option, define the **CGLM_ALL_UNALIGNED** macro before including any headers. This definition can be made within Xcode, Visual Studio, other IDEs, or directly in your build system. If using pre-compiled versions of **cglm**, you'll need to compile them with the **CGLM_ALL_UNALIGNED** macro.
|
||||||
To enable this option define **CGLM_ALL_UNALIGNED** macro before all headers.
|
|
||||||
You can define it in Xcode, Visual Studio (or other IDEs) or you can also prefer
|
|
||||||
to define it in build system. If you use pre-compiled versions then you
|
|
||||||
have to compile cglm with **CGLM_ALL_UNALIGNED** macro.
|
|
||||||
|
|
||||||
**VERY VERY IMPORTANT:** If you use cglm in multiple projects and
|
**❗️NOTE:❗️** If you're using **cglm** across multiple interdependent projects:
|
||||||
those projects are depends on each other, then
|
|
||||||
|
|
||||||
| *ALWAYS* or *NEVER USE* **CGLM_ALL_UNALIGNED** macro in linked projects
|
- Always or never use the **CGLM_ALL_UNALIGNED** macro in all linked projects to avoid configuration conflicts. A **cglm** header from one project could require alignment, while a header from another might not, leading to **cglm** functions accessing invalid memory locations.
|
||||||
|
|
||||||
if you do not know what you are doing. Because a cglm header included
|
- **Key Point:** Maintain the same **cglm** configuration across all your projects. For example, if you activate **CGLM_ALL_UNALIGNED** in one project, ensure it's set in the others too.
|
||||||
via 'project A' may force types to be aligned and another cglm header
|
|
||||||
included via 'project B' may not require alignment. In this case
|
|
||||||
cglm functions will read from and write to **INVALID MEMORY LOCATIONs**.
|
|
||||||
|
|
||||||
ALWAYS USE SAME CONFIGURATION / OPTION for **cglm** if you have multiple projects.
|
**❗️NOTE:❗️**
|
||||||
|
|
||||||
For instance if you set CGLM_ALL_UNALIGNED in a project then set it in other projects too
|
While **CGLM_ALL_UNALIGNED** allows for flexibility in alignment, it doesn't override C's fundamental alignment rules. For example, an array like *vec4* decays to a pointer (float*) in functions, which must adhere to the alignment requirements of a float pointer (4 bytes). This adherence is crucial because **cglm** directly dereferences these pointers instead of copying data, and failing to meet alignment requirements can lead to unpredictable errors, such as crashes.
|
||||||
|
|
||||||
|
You can use `CGLM_ALIGN` and `CGLM_ALIGN_MAT` macros for aligning local variables or struct members. However, when dealing with dynamic memory allocation or custom memory locations, you'll need to ensure alignment requirements are met appropriately for those cases
|
||||||
|
|
||||||
Clipspace Option[s]
|
Clipspace Option[s]
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -43,7 +41,7 @@ By starting **v0.8.3** cglm provides options to switch between clipspace configu
|
|||||||
Clipspace related files are located at `include/cglm/[struct]/clipspace.h` but
|
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
|
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`...
|
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.
|
then you can include individual headers or just define `CGLM_CLIPSPACE_INCLUDE_ALL` which will include all headers for you.
|
||||||
|
|
||||||
1. **CGLM_CLIPSPACE_INCLUDE_ALL**
|
1. **CGLM_CLIPSPACE_INCLUDE_ALL**
|
||||||
2. **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
2. **CGLM_FORCE_DEPTH_ZERO_TO_ONE**
|
||||||
|
|||||||
@@ -422,11 +422,11 @@ Functions documentation
|
|||||||
| *[in]* **q** quaternion
|
| *[in]* **q** quaternion
|
||||||
| *[in]* **pivot** pivot
|
| *[in]* **pivot** pivot
|
||||||
|
|
||||||
.. c:function:: void glm_quat_make(float * __restrict src, versor dest)
|
.. c:function:: void glm_quat_make(const float * __restrict src, versor dest)
|
||||||
|
|
||||||
Create quaternion from pointer
|
Create quaternion from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 4 elements. cglm store quaternions as [x, y, z, w].
|
.. note:: **@src** must contain at least 4 elements. cglm store quaternions as [x, y, z, w].
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ Table of contents (click to go):
|
|||||||
Functions:
|
Functions:
|
||||||
|
|
||||||
1. :c:func:`glm_ray_triangle`
|
1. :c:func:`glm_ray_triangle`
|
||||||
|
#. :c:func:`glm_ray_sphere`
|
||||||
|
#. :c:func:`glm_ray_at`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -29,3 +31,39 @@ Functions documentation
|
|||||||
| *[in]* **v2** third vertex of triangle
|
| *[in]* **v2** third vertex of triangle
|
||||||
| *[in, out]* **d** float pointer to save distance to intersection
|
| *[in, out]* **d** float pointer to save distance to intersection
|
||||||
| *[out]* **intersection** whether there is intersection
|
| *[out]* **intersection** whether there is intersection
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ray_sphere(vec3 origin, vec3 dir, vec4 s, float * __restrict t1, float * __restrict t2)
|
||||||
|
|
||||||
|
ray sphere intersection
|
||||||
|
|
||||||
|
returns false if there is no intersection if true:
|
||||||
|
|
||||||
|
- t1 > 0, t2 > 0: ray intersects the sphere at t1 and t2 both ahead of the origin
|
||||||
|
- t1 < 0, t2 > 0: ray starts inside the sphere, exits at t2
|
||||||
|
- t1 < 0, t2 < 0: no intersection ahead of the ray ( returns false )
|
||||||
|
- the caller can check if the intersection points (t1 and t2) fall within a
|
||||||
|
specific range (for example, tmin < t1, t2 < tmax) to determine if the
|
||||||
|
intersections are within a desired segment of the ray
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **origin** ray origin
|
||||||
|
| *[in]* **dir** normalized ray direction
|
||||||
|
| *[in]* **s** sphere [center.x, center.y, center.z, radii]
|
||||||
|
| *[out]* **t1** near point1 (closer to origin)
|
||||||
|
| *[out]* **t2** far point2 (farther from origin)
|
||||||
|
|
||||||
|
Return:
|
||||||
|
| whether there is intersection
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ray_at(vec3 orig, vec3 dir, float t, vec3 point)
|
||||||
|
|
||||||
|
point using t by 𝐏(𝑡)=𝐀+𝑡𝐛
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **origin** ray origin
|
||||||
|
| *[in]* **dir** ray direction
|
||||||
|
| *[out]* **t** parameter
|
||||||
|
| *[out]* **point** point at t
|
||||||
|
|
||||||
|
Return:
|
||||||
|
| point at t
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Header: cglm/sphere.h
|
|||||||
|
|
||||||
Sphere Representation in cglm is *vec4*: **[center.x, center.y, center.z, radii]**
|
Sphere Representation in cglm is *vec4*: **[center.x, center.y, center.z, radii]**
|
||||||
|
|
||||||
You can call any vec3 function by pasing sphere. Because first three elements
|
You can call any vec3 function by passing sphere. Because first three elements
|
||||||
defines center of sphere.
|
defines center of sphere.
|
||||||
|
|
||||||
Table of contents (click to go):
|
Table of contents (click to go):
|
||||||
|
|||||||
@@ -68,14 +68,14 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_make_rad(float *degm)
|
.. c:function:: void glm_make_rad(float *degm)
|
||||||
|
|
||||||
| convert exsisting degree to radians. this will override degrees value
|
| convert existing degree to radians. this will override degrees value
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **deg** pointer to angle in degrees
|
| *[in, out]* **deg** pointer to angle in degrees
|
||||||
|
|
||||||
.. c:function:: void glm_make_deg(float *rad)
|
.. c:function:: void glm_make_deg(float *rad)
|
||||||
|
|
||||||
| convert exsisting radians to degree. this will override radians value
|
| convert existing radians to degree. this will override radians value
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **rad** pointer to angle in radians
|
| *[in, out]* **rad** pointer to angle in radians
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ Functions:
|
|||||||
#. :c:func:`glm_vec2_clamp`
|
#. :c:func:`glm_vec2_clamp`
|
||||||
#. :c:func:`glm_vec2_lerp`
|
#. :c:func:`glm_vec2_lerp`
|
||||||
#. :c:func:`glm_vec2_make`
|
#. :c:func:`glm_vec2_make`
|
||||||
|
#. :c:func:`glm_vec2_reflect`
|
||||||
|
#. :c:func:`glm_vec2_refract`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -117,7 +119,7 @@ Functions documentation
|
|||||||
norm * norm (magnitude) of vector
|
norm * norm (magnitude) of vector
|
||||||
|
|
||||||
we can use this func instead of calling norm * norm, because it would call
|
we can use this func instead of calling norm * norm, because it would call
|
||||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||||
not good name for this func
|
not good name for this func
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
@@ -385,11 +387,38 @@ Functions documentation
|
|||||||
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
.. c:function:: void glm_vec2_make(float * __restrict src, vec2 dest)
|
.. c:function:: void glm_vec2_make(const float * __restrict src, vec2 dest)
|
||||||
|
|
||||||
Create two dimensional vector from pointer
|
Create two dimensional vector from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 2 elements.
|
.. note:: **@src** must contain at least 2 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination vector
|
| *[out]* **dest** destination vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec2_reflect(vec2 v, vec2 n, vec2 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: bool glm_vec2_refract(vec2 v, vec2 n, float eta, vec2 dest)
|
||||||
|
|
||||||
|
Computes refraction vector for an incident vector and a surface normal.
|
||||||
|
|
||||||
|
Calculates the refraction vector based on Snell's law. If total internal reflection
|
||||||
|
occurs (angle too great given eta), dest is set to zero and returns false.
|
||||||
|
Otherwise, computes refraction vector, stores it in dest, and returns true.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction (incident/transmitted)
|
||||||
|
| *[out]* **dest** refraction vector if refraction occurs; zero vector otherwise
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
returns true if refraction occurs; false if total internal reflection occurs.
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Header: cglm/vec3.h
|
|||||||
We mostly use vectors in graphics math, to make writing code faster
|
We mostly use vectors in graphics math, to make writing code faster
|
||||||
and easy to read, some *vec3* functions are aliased in global namespace.
|
and easy to read, some *vec3* functions are aliased in global namespace.
|
||||||
For instance :c:func:`glm_dot` is alias of :c:func:`glm_vec3_dot`,
|
For instance :c:func:`glm_dot` is alias of :c:func:`glm_vec3_dot`,
|
||||||
alias means inline wrapper here. There is no call verison of alias functions
|
alias means inline wrapper here. There is no call version of alias functions
|
||||||
|
|
||||||
There are also functions for rotating *vec3* vector. **_m4**, **_m3** prefixes
|
There are also functions for rotating *vec3* vector. **_m4**, **_m3** prefixes
|
||||||
rotate *vec3* with matrix.
|
rotate *vec3* with matrix.
|
||||||
@@ -80,6 +80,9 @@ Functions:
|
|||||||
#. :c:func:`glm_vec3_clamp`
|
#. :c:func:`glm_vec3_clamp`
|
||||||
#. :c:func:`glm_vec3_lerp`
|
#. :c:func:`glm_vec3_lerp`
|
||||||
#. :c:func:`glm_vec3_make`
|
#. :c:func:`glm_vec3_make`
|
||||||
|
#. :c:func:`glm_vec3_faceforward`
|
||||||
|
#. :c:func:`glm_vec3_reflect`
|
||||||
|
#. :c:func:`glm_vec3_refract`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -148,7 +151,7 @@ Functions documentation
|
|||||||
norm * norm (magnitude) of vector
|
norm * norm (magnitude) of vector
|
||||||
|
|
||||||
we can use this func instead of calling norm * norm, because it would call
|
we can use this func instead of calling norm * norm, because it would call
|
||||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||||
not good name for this func
|
not good name for this func
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
@@ -309,7 +312,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec3_flipsign(vec3 v)
|
.. c:function:: void glm_vec3_flipsign(vec3 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec3_negate`
|
use :c:func:`glm_vec3_negate`
|
||||||
|
|
||||||
@@ -318,7 +321,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec3_flipsign_to(vec3 v, vec3 dest)
|
.. c:function:: void glm_vec3_flipsign_to(vec3 v, vec3 dest)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec3_negate_to`
|
use :c:func:`glm_vec3_negate_to`
|
||||||
|
|
||||||
@@ -328,7 +331,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec3_inv(vec3 v)
|
.. c:function:: void glm_vec3_inv(vec3 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec3_negate`
|
use :c:func:`glm_vec3_negate`
|
||||||
|
|
||||||
@@ -337,7 +340,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec3_inv_to(vec3 v, vec3 dest)
|
.. c:function:: void glm_vec3_inv_to(vec3 v, vec3 dest)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec3_negate_to`
|
use :c:func:`glm_vec3_negate_to`
|
||||||
|
|
||||||
@@ -377,7 +380,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: float glm_vec3_angle(vec3 v1, vec3 v2)
|
.. c:function:: float glm_vec3_angle(vec3 v1, vec3 v2)
|
||||||
|
|
||||||
angle betwen two vector
|
angle between two vector
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **v1** vector1
|
| *[in]* **v1** vector1
|
||||||
@@ -503,12 +506,49 @@ Functions documentation
|
|||||||
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
| *[in]* **t** interpolant (amount) clamped between 0 and 1
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
.. c:function:: void glm_vec3_make(float * __restrict src, vec3 dest)
|
.. c:function:: void glm_vec3_make(const float * __restrict src, vec3 dest)
|
||||||
|
|
||||||
Create three dimensional vector from pointer
|
Create three dimensional vector from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 3 elements.
|
.. note::: **@src** must contain at least 3 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination vector
|
| *[out]* **dest** destination vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_faceforward(vec3 n, vec3 v, vec3 nref, vec3 dest)
|
||||||
|
|
||||||
|
A vector pointing in the same direction as another
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **n** vector to orient
|
||||||
|
| *[in]* **v** incident vector
|
||||||
|
| *[in]* **nref** reference vector
|
||||||
|
| *[out]* **dest** destination: oriented vector, pointing away from the surface.
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_reflect(vec3 v, vec3 n, vec3 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: bool glm_vec3_refract(vec3 v, vec3 n, float eta, vec3 dest)
|
||||||
|
|
||||||
|
|
||||||
|
Computes refraction vector for an incident vector and a surface normal.
|
||||||
|
|
||||||
|
Calculates the refraction vector based on Snell's law. If total internal reflection
|
||||||
|
occurs (angle too great given eta), dest is set to zero and returns false.
|
||||||
|
Otherwise, computes refraction vector, stores it in dest, and returns true.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction (incident/transmitted)
|
||||||
|
| *[out]* **dest** refraction vector if refraction occurs; zero vector otherwise
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
returns true if refraction occurs; false if total internal reflection occurs.
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ Functions:
|
|||||||
#. :c:func:`glm_vec4_lerp`
|
#. :c:func:`glm_vec4_lerp`
|
||||||
#. :c:func:`glm_vec4_cubic`
|
#. :c:func:`glm_vec4_cubic`
|
||||||
#. :c:func:`glm_vec4_make`
|
#. :c:func:`glm_vec4_make`
|
||||||
|
#. :c:func:`glm_vec4_reflect`
|
||||||
|
#. :c:func:`glm_vec4_refract`
|
||||||
|
|
||||||
Functions documentation
|
Functions documentation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -108,6 +110,13 @@ Functions documentation
|
|||||||
Parameters:
|
Parameters:
|
||||||
| *[in, out]* **v** vector
|
| *[in, out]* **v** vector
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec4_one(vec4 v)
|
||||||
|
|
||||||
|
makes all members one
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **v** vector
|
||||||
|
|
||||||
.. c:function:: float glm_vec4_dot(vec4 a, vec4 b)
|
.. c:function:: float glm_vec4_dot(vec4 a, vec4 b)
|
||||||
|
|
||||||
dot product of vec4
|
dot product of vec4
|
||||||
@@ -124,7 +133,7 @@ Functions documentation
|
|||||||
norm * norm (magnitude) of vector
|
norm * norm (magnitude) of vector
|
||||||
|
|
||||||
we can use this func instead of calling norm * norm, because it would call
|
we can use this func instead of calling norm * norm, because it would call
|
||||||
sqrtf fuction twice but with this func we can avoid func call, maybe this is
|
sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||||
not good name for this func
|
not good name for this func
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
@@ -284,7 +293,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec4_flipsign(vec4 v)
|
.. c:function:: void glm_vec4_flipsign(vec4 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec4_negate`
|
use :c:func:`glm_vec4_negate`
|
||||||
|
|
||||||
@@ -293,7 +302,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec4_flipsign_to(vec4 v, vec4 dest)
|
.. c:function:: void glm_vec4_flipsign_to(vec4 v, vec4 dest)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec4_negate_to`
|
use :c:func:`glm_vec4_negate_to`
|
||||||
|
|
||||||
@@ -303,7 +312,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec4_inv(vec4 v)
|
.. c:function:: void glm_vec4_inv(vec4 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec4_negate`
|
use :c:func:`glm_vec4_negate`
|
||||||
|
|
||||||
@@ -312,7 +321,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec4_inv_to(vec4 v, vec4 dest)
|
.. c:function:: void glm_vec4_inv_to(vec4 v, vec4 dest)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRECATED!**
|
||||||
|
|
||||||
use :c:func:`glm_vec4_negate_to`
|
use :c:func:`glm_vec4_negate_to`
|
||||||
|
|
||||||
@@ -408,11 +417,42 @@ Functions documentation
|
|||||||
| *[in]* **s** parameter
|
| *[in]* **s** parameter
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
.. c:function:: void glm_vec4_make(float * __restrict src, vec4 dest)
|
.. c:function:: void glm_vec4_make(const float * __restrict src, vec4 dest)
|
||||||
|
|
||||||
Create four dimensional vector from pointer
|
Create four dimensional vector from pointer
|
||||||
|
|
||||||
| NOTE: **@src** must contain at least 4 elements.
|
.. note:: **@src** must contain at least 4 elements.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **src** pointer to an array of floats
|
| *[in]* **src** pointer to an array of floats
|
||||||
| *[out]* **dest** destination vector
|
| *[out]* **dest** destination vector
|
||||||
|
|
||||||
|
.. c:function:: bool glm_vec4_reflect(vec4 v, vec4 n, vec4 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: bool glm_vec4_refract(vec4 v, vec4 n, float eta, vec4 dest)
|
||||||
|
|
||||||
|
computes refraction vector for an incident vector and a surface normal.
|
||||||
|
|
||||||
|
Calculates the refraction vector based on Snell's law. If total internal reflection
|
||||||
|
occurs (angle too great given eta), dest is set to zero and returns false.
|
||||||
|
Otherwise, computes refraction vector, stores it in dest, and returns true.
|
||||||
|
|
||||||
|
This implementation does not explicitly preserve the 'w' component of the
|
||||||
|
incident vector 'I' in the output 'dest', users requiring the preservation of
|
||||||
|
the 'w' component should manually adjust 'dest' after calling this function.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **n** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction (incident/transmitted)
|
||||||
|
| *[out]* **dest** refraction vector if refraction occurs; zero vector otherwise
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
returns true if refraction occurs; false if total internal reflection occurs.
|
||||||
|
|||||||
@@ -10,9 +10,23 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "vec2.h"
|
#include "vec2.h"
|
||||||
#include "vec4.h"
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
/* DEPRECATED! use _diag */
|
||||||
|
#define glm_aabb2d_size(aabb) glm_aabb2d_diag(aabb)
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief make [aabb] zero
|
||||||
|
*
|
||||||
|
* @param[in, out] aabb aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_zero(vec2 aabb[2]) {
|
||||||
|
glm_vec2_zero(aabb[0]);
|
||||||
|
glm_vec2_zero(aabb[1]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief copy all members of [aabb] to [dest]
|
* @brief copy all members of [aabb] to [dest]
|
||||||
*
|
*
|
||||||
@@ -108,7 +122,7 @@ glm_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2]) {
|
|||||||
*
|
*
|
||||||
* @param[in] aabb bounding aabb
|
* @param[in] aabb bounding aabb
|
||||||
* @param[in] cropAabb crop aabb
|
* @param[in] cropAabb crop aabb
|
||||||
* @param[in] clampAabb miniumum aabb
|
* @param[in] clampAabb minimum aabb
|
||||||
* @param[out] dest cropped bounding aabb
|
* @param[out] dest cropped bounding aabb
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -152,10 +166,22 @@ glm_aabb2d_isvalid(vec2 aabb[2]) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_aabb2d_size(vec2 aabb[2]) {
|
glm_aabb2d_diag(vec2 aabb[2]) {
|
||||||
return glm_vec2_distance(aabb[0], aabb[1]);
|
return glm_vec2_distance(aabb[0], aabb[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief size of aabb
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[out] dest size
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_sizev(vec2 aabb[2], vec2 dest) {
|
||||||
|
glm_vec2_sub(aabb[1], aabb[0], dest);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief radius of sphere which surrounds AABB
|
* @brief radius of sphere which surrounds AABB
|
||||||
*
|
*
|
||||||
@@ -164,7 +190,7 @@ glm_aabb2d_size(vec2 aabb[2]) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_aabb2d_radius(vec2 aabb[2]) {
|
glm_aabb2d_radius(vec2 aabb[2]) {
|
||||||
return glm_aabb2d_size(aabb) * 0.5f;
|
return glm_aabb2d_diag(aabb) * 0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -34,9 +34,9 @@
|
|||||||
* @brief translate existing transform matrix by v vector
|
* @brief translate existing transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -51,9 +51,9 @@ glm_translated(mat4 m, vec3 v) {
|
|||||||
*
|
*
|
||||||
* source matrix will remain same
|
* source matrix will remain same
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
* @param[out] dest translated matrix
|
* @param[out] dest translated matrix
|
||||||
*/
|
*/
|
||||||
@@ -67,9 +67,9 @@ glm_translated_to(mat4 m, vec3 v, mat4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by x factor
|
* @brief translate existing transform matrix by x factor
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] x x factor
|
* @param[in] x x factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -81,9 +81,9 @@ glm_translated_x(mat4 m, float x) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by y factor
|
* @brief translate existing transform matrix by y factor
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] y y factor
|
* @param[in] y y factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -95,9 +95,9 @@ glm_translated_y(mat4 m, float y) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by z factor
|
* @brief translate existing transform matrix by z factor
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] z z factor
|
* @param[in] z z factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -110,9 +110,9 @@ glm_translated_z(mat4 m, float z) {
|
|||||||
* @brief rotate existing transform matrix around X axis by angle
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -137,9 +137,9 @@ glm_rotated_x(mat4 m, float angle, mat4 dest) {
|
|||||||
* @brief rotate existing transform matrix around Y axis by angle
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -164,9 +164,9 @@ glm_rotated_y(mat4 m, float angle, mat4 dest) {
|
|||||||
* @brief rotate existing transform matrix around Z axis by angle
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -190,9 +190,9 @@ glm_rotated_z(mat4 m, float angle, mat4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
*/
|
*/
|
||||||
@@ -208,9 +208,9 @@ glm_rotated(mat4 m, float angle, vec3 axis) {
|
|||||||
* @brief rotate existing transform
|
* @brief rotate existing transform
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] pivot rotation center
|
* @param[in] pivot rotation center
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
@@ -230,9 +230,9 @@ glm_rotated_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
*
|
*
|
||||||
* this is POST transform, applies to existing transform as last transfrom
|
* this is POST transform, applies to existing transform as last transform
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
* @brief translate existing transform matrix by v vector
|
* @brief translate existing transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -66,7 +66,7 @@ glm_translate(mat4 m, vec3 v) {
|
|||||||
*
|
*
|
||||||
* source matrix will remain same
|
* source matrix will remain same
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
* @param[out] dest translated matrix
|
* @param[out] dest translated matrix
|
||||||
*/
|
*/
|
||||||
@@ -80,7 +80,7 @@ glm_translate_to(mat4 m, vec3 v, mat4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by x factor
|
* @brief translate existing transform matrix by x factor
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] x x factor
|
* @param[in] x x factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -98,7 +98,7 @@ glm_translate_x(mat4 m, float x) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by y factor
|
* @brief translate existing transform matrix by y factor
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] y y factor
|
* @param[in] y y factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -116,7 +116,7 @@ glm_translate_y(mat4 m, float y) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by z factor
|
* @brief translate existing transform matrix by z factor
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] z z factor
|
* @param[in] z z factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -135,7 +135,7 @@ glm_translate_z(mat4 m, float z) {
|
|||||||
* @brief rotate existing transform matrix around X axis by angle
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -160,7 +160,7 @@ glm_rotate_x(mat4 m, float angle, mat4 dest) {
|
|||||||
* @brief rotate existing transform matrix around Y axis by angle
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -185,7 +185,7 @@ glm_rotate_y(mat4 m, float angle, mat4 dest) {
|
|||||||
* @brief rotate existing transform matrix around Z axis by angle
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest rotated matrix
|
* @param[out] dest rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -207,9 +207,27 @@ glm_rotate_z(mat4 m, float angle, mat4 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
* @brief rotate existing transform matrix
|
||||||
|
* around given axis by angle at ORIGIN (0,0,0)
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* **❗️IMPORTANT ❗️**
|
||||||
|
*
|
||||||
|
* If you need to rotate object around itself e.g. center of object or at
|
||||||
|
* some point [of object] then `glm_rotate_at()` would be better choice to do so.
|
||||||
|
*
|
||||||
|
* Even if object's model transform is identiy, rotation may not be around
|
||||||
|
* center of object if object does not lay out at ORIGIN perfectly.
|
||||||
|
*
|
||||||
|
* Using `glm_rotate_at()` with center of bounding shape ( AABB, Sphere ... )
|
||||||
|
* would be an easy option to rotate around object if object is not at origin.
|
||||||
|
*
|
||||||
|
* One another option to rotate around itself at any point is `glm_spin()`
|
||||||
|
* which is perfect if only rotating around model position is desired e.g. not
|
||||||
|
* specific point on model for instance center of geometry or center of mass,
|
||||||
|
* again if geometry is not perfectly centered at origin at identity transform,
|
||||||
|
* rotation may not be around geometry.
|
||||||
|
*
|
||||||
|
* @param[in, out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
*/
|
*/
|
||||||
@@ -225,7 +243,7 @@ glm_rotate(mat4 m, float angle, vec3 axis) {
|
|||||||
* @brief rotate existing transform
|
* @brief rotate existing transform
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] pivot rotation center
|
* @param[in] pivot rotation center
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
@@ -250,7 +268,7 @@ glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|||||||
* this should work faster than glm_rotate_at because it reduces
|
* this should work faster than glm_rotate_at because it reduces
|
||||||
* one glm_translate.
|
* one glm_translate.
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] pivot rotation center
|
* @param[in] pivot rotation center
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
@@ -268,9 +286,10 @@ glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
* @brief rotate existing transform matrix
|
||||||
|
* around given axis by angle around self (doesn't affected by position)
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
/*!
|
/*!
|
||||||
* @brief creates NEW translate transform matrix by v vector
|
* @brief creates NEW translate transform matrix by v vector
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -58,7 +58,7 @@ glm_translate_make(mat4 m, vec3 v) {
|
|||||||
* @brief scale existing transform matrix by v vector
|
* @brief scale existing transform matrix by v vector
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v scale vector [x, y, z]
|
* @param[in] v scale vector [x, y, z]
|
||||||
* @param[out] dest scaled matrix
|
* @param[out] dest scaled matrix
|
||||||
*/
|
*/
|
||||||
@@ -75,7 +75,7 @@ glm_scale_to(mat4 m, vec3 v, mat4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief creates NEW scale matrix by v vector
|
* @brief creates NEW scale matrix by v vector
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] v scale vector [x, y, z]
|
* @param[in] v scale vector [x, y, z]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -91,7 +91,7 @@ glm_scale_make(mat4 m, vec3 v) {
|
|||||||
* @brief scales existing transform matrix by v vector
|
* @brief scales existing transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] v scale vector [x, y, z]
|
* @param[in] v scale vector [x, y, z]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -104,7 +104,7 @@ glm_scale(mat4 m, vec3 v) {
|
|||||||
* @brief applies uniform scale to existing transform matrix v = [s, s, s]
|
* @brief applies uniform scale to existing transform matrix v = [s, s, s]
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] s scale factor
|
* @param[in] s scale factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -119,7 +119,7 @@ glm_scale_uni(mat4 m, float s) {
|
|||||||
*
|
*
|
||||||
* axis will be normalized so you don't need to normalize it
|
* axis will be normalized so you don't need to normalize it
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
*/
|
*/
|
||||||
@@ -220,7 +220,7 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
|||||||
* @brief decompose affine transform, TODO: extract shear factors.
|
* @brief decompose affine transform, TODO: extract shear factors.
|
||||||
* DON'T pass projected matrix here
|
* DON'T pass projected matrix here
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[out] t translation vector
|
* @param[out] t translation vector
|
||||||
* @param[out] r rotation matrix (mat4)
|
* @param[out] r rotation matrix (mat4)
|
||||||
* @param[out] s scaling vector [X, Y, Z]
|
* @param[out] s scaling vector [X, Y, Z]
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
* @brief translate existing 2d transform matrix by v vector
|
* @brief translate existing 2d transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] v translate vector [x, y]
|
* @param[in] v translate vector [x, y]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -50,7 +50,7 @@ glm_translate2d(mat3 m, vec2 v) {
|
|||||||
*
|
*
|
||||||
* source matrix will remain same
|
* source matrix will remain same
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v translate vector [x, y]
|
* @param[in] v translate vector [x, y]
|
||||||
* @param[out] dest translated matrix
|
* @param[out] dest translated matrix
|
||||||
*/
|
*/
|
||||||
@@ -64,7 +64,7 @@ glm_translate2d_to(mat3 m, vec2 v, mat3 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing 2d transform matrix by x factor
|
* @brief translate existing 2d transform matrix by x factor
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] x x factor
|
* @param[in] x x factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -78,7 +78,7 @@ glm_translate2d_x(mat3 m, float x) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing 2d transform matrix by y factor
|
* @brief translate existing 2d transform matrix by y factor
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] y y factor
|
* @param[in] y y factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -92,7 +92,7 @@ glm_translate2d_y(mat3 m, float y) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief creates NEW translate 2d transform matrix by v vector
|
* @brief creates NEW translate 2d transform matrix by v vector
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] v translate vector [x, y]
|
* @param[in] v translate vector [x, y]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -107,7 +107,7 @@ glm_translate2d_make(mat3 m, vec2 v) {
|
|||||||
* @brief scale existing 2d transform matrix by v vector
|
* @brief scale existing 2d transform matrix by v vector
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v scale vector [x, y]
|
* @param[in] v scale vector [x, y]
|
||||||
* @param[out] dest scaled matrix
|
* @param[out] dest scaled matrix
|
||||||
*/
|
*/
|
||||||
@@ -130,7 +130,7 @@ glm_scale2d_to(mat3 m, vec2 v, mat3 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief creates NEW 2d scale matrix by v vector
|
* @brief creates NEW 2d scale matrix by v vector
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] v scale vector [x, y]
|
* @param[in] v scale vector [x, y]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -145,7 +145,7 @@ glm_scale2d_make(mat3 m, vec2 v) {
|
|||||||
* @brief scales existing 2d transform matrix by v vector
|
* @brief scales existing 2d transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] v scale vector [x, y]
|
* @param[in] v scale vector [x, y]
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -164,7 +164,7 @@ glm_scale2d(mat3 m, vec2 v) {
|
|||||||
* @brief applies uniform scale to existing 2d transform matrix v = [s, s]
|
* @brief applies uniform scale to existing 2d transform matrix v = [s, s]
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] s scale factor
|
* @param[in] s scale factor
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -182,7 +182,7 @@ glm_scale2d_uni(mat3 m, float s) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief creates NEW rotation matrix by angle around Z axis
|
* @brief creates NEW rotation matrix by angle around Z axis
|
||||||
*
|
*
|
||||||
* @param[out] m affine transfrom
|
* @param[out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -210,7 +210,7 @@ glm_rotate2d_make(mat3 m, float angle) {
|
|||||||
* @brief rotate existing 2d transform matrix around Z axis by angle
|
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||||
* and store result in same matrix
|
* and store result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m affine transfrom
|
* @param[in, out] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -237,7 +237,7 @@ glm_rotate2d(mat3 m, float angle) {
|
|||||||
* @brief rotate existing 2d transform matrix around Z axis by angle
|
* @brief rotate existing 2d transform matrix around Z axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[out] dest destination
|
* @param[out] dest destination
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) {
|
|||||||
*
|
*
|
||||||
* @param[in] box bounding box
|
* @param[in] box bounding box
|
||||||
* @param[in] cropBox crop box
|
* @param[in] cropBox crop box
|
||||||
* @param[in] clampBox miniumum box
|
* @param[in] clampBox minimum box
|
||||||
* @param[out] dest cropped bounding box
|
* @param[out] dest cropped bounding box
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ extern "C" {
|
|||||||
|
|
||||||
#include "../cglm.h"
|
#include "../cglm.h"
|
||||||
|
|
||||||
|
/* DEPRECATED! use _diag */
|
||||||
|
#define glmc_aabb2d_size(aabb) glmc_aabb2d_diag(aabb)
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_zero(vec2 aabb[2]);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_aabb2d_copy(vec2 aabb[2], vec2 dest[2]);
|
glmc_aabb2d_copy(vec2 aabb[2], vec2 dest[2]);
|
||||||
@@ -46,7 +53,11 @@ glmc_aabb2d_isvalid(vec2 aabb[2]);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_aabb2d_size(vec2 aabb[2]);
|
glmc_aabb2d_diag(vec2 aabb[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_sizev(vec2 aabb[2], vec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
|
|||||||
@@ -29,6 +29,14 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_ivec2_one(ivec2 v);
|
glmc_ivec2_one(ivec2 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec2_dot(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec2_cross(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest);
|
glmc_ivec2_add(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
@@ -53,6 +61,18 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_ivec2_scale(ivec2 v, int s, ivec2 dest);
|
glmc_ivec2_scale(ivec2 v, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_div(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_divs(ivec2 v, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest);
|
glmc_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|||||||
@@ -29,6 +29,18 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_ivec3_one(ivec3 v);
|
glmc_ivec3_one(ivec3 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec3_dot(ivec3 a, ivec3 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec3_norm2(ivec3 v);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
int
|
||||||
|
glmc_ivec3_norm(ivec3 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest);
|
glmc_ivec3_add(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
@@ -53,6 +65,18 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_ivec3_scale(ivec3 v, int s, ivec3 dest);
|
glmc_ivec3_scale(ivec3 v, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_div(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_divs(ivec3 v, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest);
|
glmc_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ glmc_mat2_rmc(vec2 r, mat2 m, vec2 c);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2_make(float * __restrict src, mat2 dest);
|
glmc_mat2_make(const float * __restrict src, mat2 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ glmc_mat2x3_zero(mat2x3 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x3_make(float * __restrict src, mat2x3 dest);
|
glmc_mat2x3_make(const float * __restrict src, mat2x3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest);
|
glmc_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest);
|
glmc_mat2x3_mulv(mat2x3 m, vec2 v, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ glmc_mat2x4_zero(mat2x4 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x4_make(float * __restrict src, mat2x4 dest);
|
glmc_mat2x4_make(const float * __restrict src, mat2x4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest);
|
glmc_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest);
|
glmc_mat2x4_mulv(mat2x4 m, vec2 v, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ glmc_mat3_rmc(vec3 r, mat3 m, vec3 c);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3_make(float * __restrict src, mat3 dest);
|
glmc_mat3_make(const float * __restrict src, mat3 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ glmc_mat3x2_zero(mat3x2 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3x2_make(float * __restrict src, mat3x2 dest);
|
glmc_mat3x2_make(const float * __restrict src, mat3x2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest);
|
glmc_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest);
|
glmc_mat3x2_mulv(mat3x2 m, vec3 v, vec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ glmc_mat3x4_zero(mat3x4 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat3x4_make(float * __restrict src, mat3x4 dest);
|
glmc_mat3x4_make(const float * __restrict src, mat3x4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ glmc_mat4_rmc(vec4 r, mat4 m, vec4 c);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4_make(float * __restrict src, mat4 dest);
|
glmc_mat4_make(const float * __restrict src, mat4 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ glmc_mat4x2_zero(mat4x2 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4x2_make(float * __restrict src, mat4x2 dest);
|
glmc_mat4x2_make(const float * __restrict src, mat4x2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ glmc_mat4x3_zero(mat4x3 mat);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_mat4x3_make(float * __restrict src, mat4x3 dest);
|
glmc_mat4x3_make(const float * __restrict src, mat4x3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_quat_make(float * __restrict src, versor dest);
|
glmc_quat_make(const float * __restrict src, versor dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,18 @@ glmc_ray_triangle(vec3 origin,
|
|||||||
vec3 v2,
|
vec3 v2,
|
||||||
float *d);
|
float *d);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_ray_sphere(vec3 origin,
|
||||||
|
vec3 dir,
|
||||||
|
vec4 s,
|
||||||
|
float * __restrict t1,
|
||||||
|
float * __restrict t2);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ray_at(vec3 orig, vec3 dir, float t, vec3 point);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -195,7 +195,15 @@ glmc_vec2_complex_conjugate(vec2 a, vec2 dest);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec2_make(float * __restrict src, vec2 dest);
|
glmc_vec2_make(const float * __restrict src, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_reflect(vec2 v, vec2 n, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_vec2_refract(vec2 v, vec2 n, float eta, vec2 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -332,7 +332,19 @@ glmc_vec3_sqrt(vec3 v, vec3 dest);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_make(float * __restrict src, vec3 dest);
|
glmc_vec3_make(const float * __restrict src, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_faceforward(vec3 n, vec3 v, vec3 nref, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_reflect(vec3 v, vec3 n, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_vec3_refract(vec3 v, vec3 n, float eta, vec3 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -309,7 +309,15 @@ glmc_vec4_sqrt(vec4 v, vec4 dest);
|
|||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_make(float * __restrict src, vec4 dest);
|
glmc_vec4_make(const float * __restrict src, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_reflect(vec4 v, vec4 n, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_vec4_refract(vec4 v, vec4 n, float eta, vec4 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -474,7 +474,7 @@ glm_persp_decomp_x(mat4 proj,
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief decomposes top and bottom values of perspective projection.
|
* @brief decomposes top and bottom values of perspective projection.
|
||||||
* y stands for y axis (top / botom axis)
|
* y stands for y axis (top / bottom axis)
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] top top
|
* @param[out] top top
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ glm_persp_decomp_x_lh_no(mat4 proj,
|
|||||||
* @brief decomposes top and bottom values of perspective projection
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
* with a left-hand coordinate system and a
|
* with a left-hand coordinate system and a
|
||||||
* clip-space of [-1, 1].
|
* clip-space of [-1, 1].
|
||||||
* y stands for y axis (top / botom axis)
|
* y stands for y axis (top / bottom axis)
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] top top
|
* @param[out] top top
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ glm_persp_decomp_x_rh_no(mat4 proj,
|
|||||||
* @brief decomposes top and bottom values of perspective projection
|
* @brief decomposes top and bottom values of perspective projection
|
||||||
* with a right-hand coordinate system and a
|
* with a right-hand coordinate system and a
|
||||||
* clip-space of [-1, 1].
|
* clip-space of [-1, 1].
|
||||||
* y stands for y axis (top / botom axis)
|
* y stands for y axis (top / bottom axis)
|
||||||
*
|
*
|
||||||
* @param[in] proj perspective projection matrix
|
* @param[in] proj perspective projection matrix
|
||||||
* @param[out] top top
|
* @param[out] top top
|
||||||
|
|||||||
@@ -37,6 +37,18 @@
|
|||||||
# define CGLM_INLINE static inline __attribute((always_inline))
|
# define CGLM_INLINE static inline __attribute((always_inline))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
# define CGLM_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
|
||||||
|
# define CGLM_LIKELY(expr) __builtin_expect(!!(expr), 1)
|
||||||
|
#else
|
||||||
|
# define CGLM_UNLIKELY(expr) (expr)
|
||||||
|
# define CGLM_LIKELY(expr) (expr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_M_FP_FAST) || defined(__FAST_MATH__)
|
||||||
|
# define CGLM_FAST_MATH
|
||||||
|
#endif
|
||||||
|
|
||||||
#define GLM_SHUFFLE4(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w))
|
#define GLM_SHUFFLE4(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w))
|
||||||
#define GLM_SHUFFLE3(z, y, x) (((z) << 4) | ((y) << 2) | (x))
|
#define GLM_SHUFFLE3(z, y, x) (((z) << 4) | ((y) << 2) | (x))
|
||||||
|
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ glm_ease_back_inout(float t) {
|
|||||||
|
|
||||||
o = 1.70158f;
|
o = 1.70158f;
|
||||||
s = o * 1.525f;
|
s = o * 1.525f;
|
||||||
x = 0.5;
|
x = 0.5f;
|
||||||
n = t / 0.5f;
|
n = t / 0.5f;
|
||||||
|
|
||||||
if (n < 1.0f) {
|
if (n < 1.0f) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
NOTE:
|
NOTE:
|
||||||
angles must be passed as [X-Angle, Y-Angle, Z-angle] order
|
angles must be passed as [X-Angle, Y-Angle, Z-angle] order
|
||||||
For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to
|
For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to
|
||||||
glm_euler_zxy funciton, All RELATED functions accept angles same order
|
glm_euler_zxy function, All RELATED functions accept angles same order
|
||||||
which is [X, Y, Z].
|
which is [X, Y, Z].
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#ifndef cglm_io_h
|
#ifndef cglm_io_h
|
||||||
#define cglm_io_h
|
#define cglm_io_h
|
||||||
#if defined(DEBUG) || defined(_DEBUG) \
|
#if !defined(NDEBUG) \
|
||||||
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC) \
|
|| defined(CGLM_DEFINE_PRINTS) || defined(CGLM_LIB_SRC) \
|
||||||
|| defined(CGLM_NO_PRINTS_NOOP)
|
|| defined(CGLM_NO_PRINTS_NOOP)
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,17 @@
|
|||||||
CGLM_INLINE void glm_ivec2_copy(ivec2 a, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_copy(ivec2 a, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_zero(ivec2 v)
|
CGLM_INLINE void glm_ivec2_zero(ivec2 v)
|
||||||
CGLM_INLINE void glm_ivec2_one(ivec2 v)
|
CGLM_INLINE void glm_ivec2_one(ivec2 v)
|
||||||
|
CGLM_INLINE int glm_ivec2_dot(ivec2 a, ivec2 b)
|
||||||
|
CGLM_INLINE int glm_ivec2_cross(ivec2 a, ivec2 b)
|
||||||
CGLM_INLINE void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_add(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_adds(ivec2 v, int s, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_adds(ivec2 v, int s, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_sub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_subs(ivec2 v, int s, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_subs(ivec2 v, int s, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_mul(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_scale(ivec2 v, int s, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_scale(ivec2 v, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_divs(ivec2 v, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_addadds(ivec2 a, int s, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_addadds(ivec2 a, int s, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
@@ -110,6 +115,36 @@ glm_ivec2_one(ivec2 v) {
|
|||||||
v[0] = v[1] = 1;
|
v[0] = v[1] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief ivec2 dot product
|
||||||
|
*
|
||||||
|
* @param[in] a vector1
|
||||||
|
* @param[in] b vector2
|
||||||
|
*
|
||||||
|
* @return dot product
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec2_dot(ivec2 a, ivec2 b) {
|
||||||
|
return a[0] * b[0] + a[1] * b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief ivec2 cross product
|
||||||
|
*
|
||||||
|
* REF: http://allenchou.net/2013/07/cross-product-of-2d-vectors/
|
||||||
|
*
|
||||||
|
* @param[in] a vector1
|
||||||
|
* @param[in] b vector2
|
||||||
|
*
|
||||||
|
* @return Z component of cross product
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec2_cross(ivec2 a, ivec2 b) {
|
||||||
|
return a[0] * b[1] - a[1] * b[0];
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||||
*
|
*
|
||||||
@@ -169,7 +204,7 @@ glm_ivec2_subs(ivec2 v, int s, ivec2 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
*
|
*
|
||||||
* @param[in] a frist vector
|
* @param[in] a first vector
|
||||||
* @param[in] b second vector
|
* @param[in] b second vector
|
||||||
* @param[out] dest destination
|
* @param[out] dest destination
|
||||||
*/
|
*/
|
||||||
@@ -194,6 +229,48 @@ glm_ivec2_scale(ivec2 v, int s, ivec2 dest) {
|
|||||||
dest[1] = v[1] * s;
|
dest[1] = v[1] * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief div vector with another component-wise division: d = a / b
|
||||||
|
*
|
||||||
|
* @param[in] a vector 1
|
||||||
|
* @param[in] b vector 2
|
||||||
|
* @param[out] dest result = (a[0]/b[0], a[1]/b[1])
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_div(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] / b[0];
|
||||||
|
dest[1] = a[1] / b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief div vector with scalar: d = v / s
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest result = (a[0]/s, a[1]/s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_divs(ivec2 v, int s, ivec2 dest) {
|
||||||
|
dest[0] = v[0] / s;
|
||||||
|
dest[1] = v[1] / s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief mod vector with another component-wise modulo: d = a % b
|
||||||
|
*
|
||||||
|
* @param[in] a vector 1
|
||||||
|
* @param[in] b vector 2
|
||||||
|
* @param[out] dest result = (a[0]%b[0], a[1]%b[1])
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_mod(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] = a[0] % b[0];
|
||||||
|
dest[1] = a[1] % b[1];
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -17,12 +17,18 @@
|
|||||||
CGLM_INLINE void glm_ivec3_copy(ivec3 a, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_copy(ivec3 a, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_zero(ivec3 v)
|
CGLM_INLINE void glm_ivec3_zero(ivec3 v)
|
||||||
CGLM_INLINE void glm_ivec3_one(ivec3 v)
|
CGLM_INLINE void glm_ivec3_one(ivec3 v)
|
||||||
|
CGLM_INLINE int glm_ivec3_dot(ivec3 a, ivec3 b)
|
||||||
|
CGLM_INLINE int glm_ivec3_norm2(ivec3 v)
|
||||||
|
CGLM_INLINE int glm_ivec3_norm(ivec3 v)
|
||||||
CGLM_INLINE void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_adds(ivec3 v, int s, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_adds(ivec3 v, int s, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_subs(ivec3 v, int s, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_subs(ivec3 v, int s, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_scale(ivec3 v, int s, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_scale(ivec3 v, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_div(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_divs(ivec3 v, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_addadds(ivec3 a, int s, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_addadds(ivec3 a, int s, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_subadd(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_subadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
@@ -112,6 +118,51 @@ glm_ivec3_one(ivec3 v) {
|
|||||||
v[0] = v[1] = v[2] = 1;
|
v[0] = v[1] = v[2] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief ivec3 dot product
|
||||||
|
*
|
||||||
|
* @param[in] a vector1
|
||||||
|
* @param[in] b vector2
|
||||||
|
*
|
||||||
|
* @return dot product
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec3_dot(ivec3 a, ivec3 b) {
|
||||||
|
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief norm * norm (magnitude) of vec
|
||||||
|
*
|
||||||
|
* we can use this func instead of calling norm * norm, because it would call
|
||||||
|
* sqrtf function twice but with this func we can avoid func call, maybe this is
|
||||||
|
* not good name for this func
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
*
|
||||||
|
* @return norm * norm
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec3_norm2(ivec3 v) {
|
||||||
|
return glm_ivec3_dot(v, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief euclidean norm (magnitude), also called L2 norm
|
||||||
|
* this will give magnitude of vector in euclidean space
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
*
|
||||||
|
* @return norm
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
int
|
||||||
|
glm_ivec3_norm(ivec3 v) {
|
||||||
|
return (int)sqrtf((float)glm_ivec3_norm2(v));
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief add vector [a] to vector [b] and store result in [dest]
|
* @brief add vector [a] to vector [b] and store result in [dest]
|
||||||
*
|
*
|
||||||
@@ -175,7 +226,7 @@ glm_ivec3_subs(ivec3 v, int s, ivec3 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
*
|
*
|
||||||
* @param[in] a frist vector
|
* @param[in] a first vector
|
||||||
* @param[in] b second vector
|
* @param[in] b second vector
|
||||||
* @param[out] dest destination
|
* @param[out] dest destination
|
||||||
*/
|
*/
|
||||||
@@ -202,6 +253,53 @@ glm_ivec3_scale(ivec3 v, int s, ivec3 dest) {
|
|||||||
dest[2] = v[2] * s;
|
dest[2] = v[2] * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief div vector with another component-wise division: d = a / b
|
||||||
|
*
|
||||||
|
* @param[in] a vector 1
|
||||||
|
* @param[in] b vector 2
|
||||||
|
* @param[out] dest result = (a[0]/b[0], a[1]/b[1], a[2]/b[2])
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_div(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] / b[0];
|
||||||
|
dest[1] = a[1] / b[1];
|
||||||
|
dest[2] = a[2] / b[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief div vector with scalar: d = v / s
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest result = (a[0]/s, a[1]/s, a[2]/s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_divs(ivec3 v, int s, ivec3 dest) {
|
||||||
|
dest[0] = v[0] / s;
|
||||||
|
dest[1] = v[1] / s;
|
||||||
|
dest[2] = v[2] / s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Element-wise modulo operation on ivec3 vectors: dest = a % b
|
||||||
|
*
|
||||||
|
* Performs element-wise modulo on each component of vectors `a` and `b`.
|
||||||
|
*
|
||||||
|
* @param[in] a vector 1
|
||||||
|
* @param[in] b vector 2
|
||||||
|
* @param[out] dest result = (a[0]%b[0], a[1]%b[1], a[2]%b[2])
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] = a[0] % b[0];
|
||||||
|
dest[1] = a[1] % b[1];
|
||||||
|
dest[2] = a[2] % b[2];
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ glm_ivec4_subs(ivec4 v, int s, ivec4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
* @brief multiply vector [a] with vector [b] and store result in [dest]
|
||||||
*
|
*
|
||||||
* @param[in] a frist vector
|
* @param[in] a first vector
|
||||||
* @param[in] b second vector
|
* @param[in] b second vector
|
||||||
* @param[out] dest destination
|
* @param[out] dest destination
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ glm_mat2_transpose_to(mat2 m, mat2 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief tranpose mat2 and store result in same matrix
|
* @brief transpose mat2 and store result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m source and dest
|
* @param[in, out] m source and dest
|
||||||
*/
|
*/
|
||||||
@@ -354,7 +354,7 @@ glm_mat2_rmc(vec2 r, mat2 m, vec2 c) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2_make(float * __restrict src, mat2 dest) {
|
glm_mat2_make(const float * __restrict src, mat2 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[1][0] = src[2];
|
dest[1][0] = src[2];
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat2x3_copy(mat2x3 mat, mat2x3 dest);
|
CGLM_INLINE void glm_mat2x3_copy(mat2x3 mat, mat2x3 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_zero(mat2x3 mat);
|
CGLM_INLINE void glm_mat2x3_zero(mat2x3 mat);
|
||||||
CGLM_INLINE void glm_mat2x3_make(float * __restrict src, mat2x3 dest);
|
CGLM_INLINE void glm_mat2x3_make(const float * __restrict src, mat2x3 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest);
|
CGLM_INLINE void glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest);
|
CGLM_INLINE void glm_mat2x3_mulv(mat2x3 m, vec2 v, vec3 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest);
|
CGLM_INLINE void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_scale(mat2x3 m, float s);
|
CGLM_INLINE void glm_mat2x3_scale(mat2x3 m, float s);
|
||||||
*/
|
*/
|
||||||
@@ -68,7 +68,7 @@ glm_mat2x3_zero(mat2x3 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x3_make(float * __restrict src, mat2x3 dest) {
|
glm_mat2x3_make(const float * __restrict src, mat2x3 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[0][2] = src[2];
|
dest[0][2] = src[2];
|
||||||
@@ -82,7 +82,7 @@ glm_mat2x3_make(float * __restrict src, mat2x3 dest) {
|
|||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* @code
|
* @code
|
||||||
* glm_mat2x3_mul(mat2x3, mat3x2, mat2);
|
* glm_mat2x3_mul(mat2x3, mat3x2, mat3);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix (mat2x3)
|
* @param[in] m1 left matrix (mat2x3)
|
||||||
@@ -91,7 +91,7 @@ glm_mat2x3_make(float * __restrict src, mat2x3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest) {
|
glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat3 dest) {
|
||||||
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2],
|
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2],
|
||||||
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2],
|
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2],
|
||||||
|
|
||||||
@@ -99,11 +99,17 @@ glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest) {
|
|||||||
b10 = m2[1][0], b11 = m2[1][1],
|
b10 = m2[1][0], b11 = m2[1][1],
|
||||||
b20 = m2[2][0], b21 = m2[2][1];
|
b20 = m2[2][0], b21 = m2[2][1];
|
||||||
|
|
||||||
dest[0][0] = a00 * b00 + a01 * b10 + a02 * b20;
|
dest[0][0] = a00 * b00 + a10 * b01;
|
||||||
dest[0][1] = a00 * b01 + a01 * b11 + a02 * b21;
|
dest[0][1] = a01 * b00 + a11 * b01;
|
||||||
|
dest[0][2] = a02 * b00 + a12 * b01;
|
||||||
|
|
||||||
dest[1][0] = a10 * b00 + a11 * b10 + a12 * b20;
|
dest[1][0] = a00 * b10 + a10 * b11;
|
||||||
dest[1][1] = a10 * b01 + a11 * b11 + a12 * b21;
|
dest[1][1] = a01 * b10 + a11 * b11;
|
||||||
|
dest[1][2] = a02 * b10 + a12 * b11;
|
||||||
|
|
||||||
|
dest[2][0] = a00 * b20 + a10 * b21;
|
||||||
|
dest[2][1] = a01 * b20 + a11 * b21;
|
||||||
|
dest[2][2] = a02 * b20 + a12 * b21;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -115,11 +121,12 @@ glm_mat2x3_mul(mat2x3 m1, mat3x2 m2, mat2 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest) {
|
glm_mat2x3_mulv(mat2x3 m, vec2 v, vec3 dest) {
|
||||||
float v0 = v[0], v1 = v[1], v2 = v[2];
|
float v0 = v[0], v1 = v[1];
|
||||||
|
|
||||||
dest[0] = m[0][0] * v0 + m[0][1] * v1 + m[0][2] * v2;
|
dest[0] = m[0][0] * v0 + m[1][0] * v1;
|
||||||
dest[1] = m[1][0] * v0 + m[1][1] * v1 + m[1][2] * v2;
|
dest[1] = m[0][1] * v0 + m[1][1] * v1;
|
||||||
|
dest[2] = m[0][2] * v0 + m[1][2] * v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat2x4_copy(mat2x4 mat, mat2x4 dest);
|
CGLM_INLINE void glm_mat2x4_copy(mat2x4 mat, mat2x4 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_zero(mat2x4 mat);
|
CGLM_INLINE void glm_mat2x4_zero(mat2x4 mat);
|
||||||
CGLM_INLINE void glm_mat2x4_make(float * __restrict src, mat2x4 dest);
|
CGLM_INLINE void glm_mat2x4_make(const float * __restrict src, mat2x4 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest);
|
CGLM_INLINE void glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat4 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest);
|
CGLM_INLINE void glm_mat2x4_mulv(mat2x4 m, vec2 v, vec4 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest);
|
CGLM_INLINE void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_scale(mat2x4 m, float s);
|
CGLM_INLINE void glm_mat2x4_scale(mat2x4 m, float s);
|
||||||
*/
|
*/
|
||||||
@@ -64,7 +64,7 @@ glm_mat2x4_zero(mat2x4 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x4_make(float * __restrict src, mat2x4 dest) {
|
glm_mat2x4_make(const float * __restrict src, mat2x4 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[0][2] = src[2];
|
dest[0][2] = src[2];
|
||||||
@@ -80,16 +80,16 @@ glm_mat2x4_make(float * __restrict src, mat2x4 dest) {
|
|||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* @code
|
* @code
|
||||||
* glm_mat2x4_mul(mat2x4, mat4x2, mat2);
|
* glm_mat2x4_mul(mat2x4, mat4x2, mat4);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix (mat2x4)
|
* @param[in] m1 left matrix (mat2x4)
|
||||||
* @param[in] m2 right matrix (mat4x2)
|
* @param[in] m2 right matrix (mat4x2)
|
||||||
* @param[out] dest destination matrix (mat2)
|
* @param[out] dest destination matrix (mat4)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest) {
|
glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat4 dest) {
|
||||||
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2], a03 = m1[0][3],
|
float a00 = m1[0][0], a01 = m1[0][1], a02 = m1[0][2], a03 = m1[0][3],
|
||||||
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2], a13 = m1[1][3],
|
a10 = m1[1][0], a11 = m1[1][1], a12 = m1[1][2], a13 = m1[1][3],
|
||||||
|
|
||||||
@@ -98,15 +98,29 @@ glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest) {
|
|||||||
b20 = m2[2][0], b21 = m2[2][1],
|
b20 = m2[2][0], b21 = m2[2][1],
|
||||||
b30 = m2[3][0], b31 = m2[3][1];
|
b30 = m2[3][0], b31 = m2[3][1];
|
||||||
|
|
||||||
dest[0][0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30;
|
dest[0][0] = a00 * b00 + a10 * b01;
|
||||||
dest[0][1] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31;
|
dest[0][1] = a01 * b00 + a11 * b01;
|
||||||
|
dest[0][2] = a02 * b00 + a12 * b01;
|
||||||
|
dest[0][3] = a03 * b00 + a13 * b01;
|
||||||
|
|
||||||
dest[1][0] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30;
|
dest[1][0] = a00 * b10 + a10 * b11;
|
||||||
dest[1][1] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31;
|
dest[1][1] = a01 * b10 + a11 * b11;
|
||||||
|
dest[1][2] = a02 * b10 + a12 * b11;
|
||||||
|
dest[1][3] = a03 * b10 + a13 * b11;
|
||||||
|
|
||||||
|
dest[2][0] = a00 * b20 + a10 * b21;
|
||||||
|
dest[2][1] = a01 * b20 + a11 * b21;
|
||||||
|
dest[2][2] = a02 * b20 + a12 * b21;
|
||||||
|
dest[2][3] = a03 * b20 + a13 * b21;
|
||||||
|
|
||||||
|
dest[3][0] = a00 * b30 + a10 * b31;
|
||||||
|
dest[3][1] = a01 * b30 + a11 * b31;
|
||||||
|
dest[3][2] = a02 * b30 + a12 * b31;
|
||||||
|
dest[3][3] = a03 * b30 + a13 * b31;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief multiply matrix with column vector and store in dest vector
|
* @brief multiply matrix with column vector and store in dest column vector
|
||||||
*
|
*
|
||||||
* @param[in] m matrix (left)
|
* @param[in] m matrix (left)
|
||||||
* @param[in] v vector (right, column vector)
|
* @param[in] v vector (right, column vector)
|
||||||
@@ -114,11 +128,13 @@ glm_mat2x4_mul(mat2x4 m1, mat4x2 m2, mat2 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest) {
|
glm_mat2x4_mulv(mat2x4 m, vec2 v, vec4 dest) {
|
||||||
float v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3];
|
float v0 = v[0], v1 = v[1];
|
||||||
|
|
||||||
dest[0] = m[0][0] * v0 + m[0][1] * v1 + m[0][2] * v2 + m[0][3] * v3;
|
dest[0] = m[0][0] * v0 + m[1][0] * v1;
|
||||||
dest[1] = m[1][0] * v0 + m[1][1] * v1 + m[1][2] * v2 + m[1][3] * v3;
|
dest[1] = m[0][1] * v0 + m[1][1] * v1;
|
||||||
|
dest[2] = m[0][2] * v0 + m[1][2] * v1;
|
||||||
|
dest[3] = m[0][3] * v0 + m[1][3] * v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ glm_mat3_transpose_to(mat3 m, mat3 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief tranpose mat3 and store result in same matrix
|
* @brief transpose mat3 and store result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m source and dest
|
* @param[in, out] m source and dest
|
||||||
*/
|
*/
|
||||||
@@ -436,7 +436,7 @@ glm_mat3_rmc(vec3 r, mat3 m, vec3 c) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3_make(float * __restrict src, mat3 dest) {
|
glm_mat3_make(const float * __restrict src, mat3 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[0][2] = src[2];
|
dest[0][2] = src[2];
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat3x2_copy(mat3x2 mat, mat3x2 dest);
|
CGLM_INLINE void glm_mat3x2_copy(mat3x2 mat, mat3x2 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_zero(mat3x2 mat);
|
CGLM_INLINE void glm_mat3x2_zero(mat3x2 mat);
|
||||||
CGLM_INLINE void glm_mat3x2_make(float * __restrict src, mat3x2 dest);
|
CGLM_INLINE void glm_mat3x2_make(const float * __restrict src, mat3x2 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest);
|
CGLM_INLINE void glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat2 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest);
|
CGLM_INLINE void glm_mat3x2_mulv(mat3x2 m, vec3 v, vec2 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest);
|
CGLM_INLINE void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_scale(mat3x2 m, float s);
|
CGLM_INLINE void glm_mat3x2_scale(mat3x2 m, float s);
|
||||||
*/
|
*/
|
||||||
@@ -69,7 +69,7 @@ glm_mat3x2_zero(mat3x2 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3x2_make(float * __restrict src, mat3x2 dest) {
|
glm_mat3x2_make(const float * __restrict src, mat3x2 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
|
|
||||||
@@ -84,16 +84,16 @@ glm_mat3x2_make(float * __restrict src, mat3x2 dest) {
|
|||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* @code
|
* @code
|
||||||
* glm_mat3x2_mul(mat3x2, mat2x3, mat3);
|
* glm_mat3x2_mul(mat3x2, mat2x3, mat2);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix (mat3x2)
|
* @param[in] m1 left matrix (mat3x2)
|
||||||
* @param[in] m2 right matrix (mat2x3)
|
* @param[in] m2 right matrix (mat2x3)
|
||||||
* @param[out] dest destination matrix (mat3)
|
* @param[out] dest destination matrix (mat2)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest) {
|
glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat2 dest) {
|
||||||
float a00 = m1[0][0], a01 = m1[0][1],
|
float a00 = m1[0][0], a01 = m1[0][1],
|
||||||
a10 = m1[1][0], a11 = m1[1][1],
|
a10 = m1[1][0], a11 = m1[1][1],
|
||||||
a20 = m1[2][0], a21 = m1[2][1],
|
a20 = m1[2][0], a21 = m1[2][1],
|
||||||
@@ -101,21 +101,15 @@ glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest) {
|
|||||||
b00 = m2[0][0], b01 = m2[0][1], b02 = m2[0][2],
|
b00 = m2[0][0], b01 = m2[0][1], b02 = m2[0][2],
|
||||||
b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2];
|
b10 = m2[1][0], b11 = m2[1][1], b12 = m2[1][2];
|
||||||
|
|
||||||
dest[0][0] = a00 * b00 + a01 * b10;
|
dest[0][0] = a00 * b00 + a10 * b01 + a20 * b02;
|
||||||
dest[0][1] = a00 * b01 + a01 * b11;
|
dest[0][1] = a01 * b00 + a11 * b01 + a21 * b02;
|
||||||
dest[0][2] = a00 * b02 + a01 * b12;
|
|
||||||
|
|
||||||
dest[1][0] = a10 * b00 + a11 * b10;
|
dest[1][0] = a00 * b10 + a10 * b11 + a20 * b12;
|
||||||
dest[1][1] = a10 * b01 + a11 * b11;
|
dest[1][1] = a01 * b10 + a11 * b11 + a21 * b12;
|
||||||
dest[1][2] = a10 * b02 + a11 * b12;
|
|
||||||
|
|
||||||
dest[2][0] = a20 * b00 + a21 * b10;
|
|
||||||
dest[2][1] = a20 * b01 + a21 * b11;
|
|
||||||
dest[2][2] = a20 * b02 + a21 * b12;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief multiply matrix with column vector and store in dest vector
|
* @brief multiply matrix with column vector and store in dest column vector
|
||||||
*
|
*
|
||||||
* @param[in] m matrix (left)
|
* @param[in] m matrix (left)
|
||||||
* @param[in] v vector (right, column vector)
|
* @param[in] v vector (right, column vector)
|
||||||
@@ -123,12 +117,11 @@ glm_mat3x2_mul(mat3x2 m1, mat2x3 m2, mat3 dest) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest) {
|
glm_mat3x2_mulv(mat3x2 m, vec3 v, vec2 dest) {
|
||||||
float v0 = v[0], v1 = v[1];
|
float v0 = v[0], v1 = v[1], v2 = v[2];
|
||||||
|
|
||||||
dest[0] = m[0][0] * v0 + m[0][1] * v1;
|
dest[0] = m[0][0] * v0 + m[1][0] * v1 + m[2][0] * v2;
|
||||||
dest[1] = m[1][0] * v0 + m[1][1] * v1;
|
dest[1] = m[0][1] * v0 + m[1][1] * v1 + m[2][1] * v2;
|
||||||
dest[2] = m[2][0] * v0 + m[2][1] * v1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat3x4_copy(mat3x4 mat, mat3x4 dest);
|
CGLM_INLINE void glm_mat3x4_copy(mat3x4 mat, mat3x4 dest);
|
||||||
CGLM_INLINE void glm_mat3x4_zero(mat3x4 mat);
|
CGLM_INLINE void glm_mat3x4_zero(mat3x4 mat);
|
||||||
CGLM_INLINE void glm_mat3x4_make(float * __restrict src, mat3x4 dest);
|
CGLM_INLINE void glm_mat3x4_make(const float * __restrict src, mat3x4 dest);
|
||||||
CGLM_INLINE void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest);
|
CGLM_INLINE void glm_mat3x4_mul(mat3x4 m1, mat4x3 m2, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest);
|
CGLM_INLINE void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest);
|
||||||
CGLM_INLINE void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest);
|
CGLM_INLINE void glm_mat3x4_transpose(mat3x4 m, mat4x3 dest);
|
||||||
@@ -66,7 +66,7 @@ glm_mat3x4_zero(mat3x4 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat3x4_make(float * __restrict src, mat3x4 dest) {
|
glm_mat3x4_make(const float * __restrict src, mat3x4 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[0][2] = src[2];
|
dest[0][2] = src[2];
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
# include "simd/wasm/mat4.h"
|
# include "simd/wasm/mat4.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifndef NDEBUG
|
||||||
# include <assert.h>
|
# include <assert.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ void
|
|||||||
glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) {
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifndef NDEBUG
|
||||||
assert(len > 1 && "there must be least 2 matrices to go!");
|
assert(len > 1 && "there must be least 2 matrices to go!");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -537,7 +537,7 @@ glm_mat4_transpose_to(mat4 m, mat4 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief tranpose mat4 and store result in same matrix
|
* @brief transpose mat4 and store result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in, out] m source and dest
|
* @param[in, out] m source and dest
|
||||||
*/
|
*/
|
||||||
@@ -790,7 +790,7 @@ glm_mat4_rmc(vec4 r, mat4 m, vec4 c) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4_make(float * __restrict src, mat4 dest) {
|
glm_mat4_make(const float * __restrict src, mat4 dest) {
|
||||||
dest[0][0] = src[0]; dest[1][0] = src[4];
|
dest[0][0] = src[0]; dest[1][0] = src[4];
|
||||||
dest[0][1] = src[1]; dest[1][1] = src[5];
|
dest[0][1] = src[1]; dest[1][1] = src[5];
|
||||||
dest[0][2] = src[2]; dest[1][2] = src[6];
|
dest[0][2] = src[2]; dest[1][2] = src[6];
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat4x2_copy(mat4x2 mat, mat4x2 dest);
|
CGLM_INLINE void glm_mat4x2_copy(mat4x2 mat, mat4x2 dest);
|
||||||
CGLM_INLINE void glm_mat4x2_zero(mat4x2 mat);
|
CGLM_INLINE void glm_mat4x2_zero(mat4x2 mat);
|
||||||
CGLM_INLINE void glm_mat4x2_make(float * __restrict src, mat4x2 dest);
|
CGLM_INLINE void glm_mat4x2_make(const float * __restrict src, mat4x2 dest);
|
||||||
CGLM_INLINE void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest);
|
CGLM_INLINE void glm_mat4x2_mul(mat4x2 m1, mat2x4 m2, mat4 dest);
|
||||||
CGLM_INLINE void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest);
|
CGLM_INLINE void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest);
|
||||||
CGLM_INLINE void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest);
|
CGLM_INLINE void glm_mat4x2_transpose(mat4x2 m, mat2x4 dest);
|
||||||
@@ -72,7 +72,7 @@ glm_mat4x2_zero(mat4x2 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4x2_make(float * __restrict src, mat4x2 dest) {
|
glm_mat4x2_make(const float * __restrict src, mat4x2 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE void glm_mat4x3_copy(mat4x3 mat, mat4x3 dest);
|
CGLM_INLINE void glm_mat4x3_copy(mat4x3 mat, mat4x3 dest);
|
||||||
CGLM_INLINE void glm_mat4x3_zero(mat4x3 mat);
|
CGLM_INLINE void glm_mat4x3_zero(mat4x3 mat);
|
||||||
CGLM_INLINE void glm_mat4x3_make(float * __restrict src, mat4x3 dest);
|
CGLM_INLINE void glm_mat4x3_make(const float * __restrict src, mat4x3 dest);
|
||||||
CGLM_INLINE void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest);
|
CGLM_INLINE void glm_mat4x3_mul(mat4x3 m1, mat3x4 m2, mat4 dest);
|
||||||
CGLM_INLINE void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest);
|
CGLM_INLINE void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest);
|
||||||
CGLM_INLINE void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest);
|
CGLM_INLINE void glm_mat4x3_transpose(mat4x3 m, mat3x4 dest);
|
||||||
@@ -77,7 +77,7 @@ glm_mat4x3_zero(mat4x3 mat) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_mat4x3_make(float * __restrict src, mat4x3 dest) {
|
glm_mat4x3_make(const float * __restrict src, mat4x3 dest) {
|
||||||
dest[0][0] = src[0];
|
dest[0][0] = src[0];
|
||||||
dest[0][1] = src[1];
|
dest[0][1] = src[1];
|
||||||
dest[0][2] = src[2];
|
dest[0][2] = src[2];
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ void
|
|||||||
glm_plane_normalize(vec4 plane) {
|
glm_plane_normalize(vec4 plane) {
|
||||||
float norm;
|
float norm;
|
||||||
|
|
||||||
if ((norm = glm_vec3_norm(plane)) == 0.0f) {
|
if (CGLM_UNLIKELY((norm = glm_vec3_norm(plane)) < FLT_EPSILON)) {
|
||||||
glm_vec4_zero(plane);
|
glm_vec4_zero(plane);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -703,7 +703,7 @@ glm_quat_nlerp(versor from, versor to, float t, versor dest) {
|
|||||||
*
|
*
|
||||||
* @param[in] from from
|
* @param[in] from from
|
||||||
* @param[in] to to
|
* @param[in] to to
|
||||||
* @param[in] t amout
|
* @param[in] t amount
|
||||||
* @param[out] dest result quaternion
|
* @param[out] dest result quaternion
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
@@ -894,7 +894,7 @@ glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) {
|
|||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_make(float * __restrict src, versor dest) {
|
glm_quat_make(const float * __restrict src, versor dest) {
|
||||||
dest[0] = src[0]; dest[1] = src[1];
|
dest[0] = src[0]; dest[1] = src[1];
|
||||||
dest[2] = src[2]; dest[3] = src[3];
|
dest[2] = src[2]; dest[3] = src[3];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,18 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Functions:
|
Functions:
|
||||||
CGLM_INLINE bool glm_line_triangle_intersect(vec3 origin,
|
CGLM_INLINE bool glm_ray_triangle(vec3 origin,
|
||||||
vec3 direction,
|
vec3 direction,
|
||||||
vec3 v0,
|
vec3 v0,
|
||||||
vec3 v1,
|
vec3 v1,
|
||||||
vec3 v2,
|
vec3 v2,
|
||||||
float *d);
|
float *d);
|
||||||
|
CGLM_INLINE bool glm_ray_sphere(vec3 origin,
|
||||||
|
vec3 dir,
|
||||||
|
vec4 s,
|
||||||
|
float * __restrict t1,
|
||||||
|
float * __restrict t2)
|
||||||
|
CGLM_INLINE void glm_ray_at(vec3 orig, vec3 dir, float t, vec3 point);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_ray_h
|
#ifndef cglm_ray_h
|
||||||
@@ -31,7 +37,6 @@
|
|||||||
* @param[in, out] d distance to intersection
|
* @param[in, out] d distance to intersection
|
||||||
* @return whether there is intersection
|
* @return whether there is intersection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
glm_ray_triangle(vec3 origin,
|
glm_ray_triangle(vec3 origin,
|
||||||
@@ -74,4 +79,96 @@ glm_ray_triangle(vec3 origin,
|
|||||||
return dist > epsilon;
|
return dist > epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief ray sphere intersection
|
||||||
|
*
|
||||||
|
* returns false if there is no intersection if true:
|
||||||
|
*
|
||||||
|
* - t1 > 0, t2 > 0: ray intersects the sphere at t1 and t2 both ahead of the origin
|
||||||
|
* - t1 < 0, t2 > 0: ray starts inside the sphere, exits at t2
|
||||||
|
* - t1 < 0, t2 < 0: no intersection ahead of the ray ( returns false )
|
||||||
|
* - the caller can check if the intersection points (t1 and t2) fall within a
|
||||||
|
* specific range (for example, tmin < t1, t2 < tmax) to determine if the
|
||||||
|
* intersections are within a desired segment of the ray
|
||||||
|
*
|
||||||
|
* @param[in] origin ray origin
|
||||||
|
* @param[out] dir normalized ray direction
|
||||||
|
* @param[in] s sphere [center.x, center.y, center.z, radii]
|
||||||
|
* @param[in] t1 near point1 (closer to origin)
|
||||||
|
* @param[in] t2 far point2 (farther from origin)
|
||||||
|
*
|
||||||
|
* @returns whether there is intersection
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_ray_sphere(vec3 origin,
|
||||||
|
vec3 dir,
|
||||||
|
vec4 s,
|
||||||
|
float * __restrict t1,
|
||||||
|
float * __restrict t2) {
|
||||||
|
vec3 dp;
|
||||||
|
float r2, ddp, dpp, dscr, q, tmp, _t1, _t2;
|
||||||
|
|
||||||
|
glm_vec3_sub(s, origin, dp);
|
||||||
|
|
||||||
|
ddp = glm_vec3_dot(dir, dp);
|
||||||
|
dpp = glm_vec3_norm2(dp);
|
||||||
|
|
||||||
|
/* compute the remedy term for numerical stability */
|
||||||
|
glm_vec3_mulsubs(dir, ddp, dp); /* dp: remedy term */
|
||||||
|
|
||||||
|
r2 = s[3] * s[3];
|
||||||
|
dscr = r2 - glm_vec3_norm2(dp);
|
||||||
|
|
||||||
|
if (dscr < 0.0f) {
|
||||||
|
/* no intersection */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
dscr = sqrtf(dscr);
|
||||||
|
q = (ddp >= 0.0f) ? (ddp + dscr) : (ddp - dscr);
|
||||||
|
|
||||||
|
/*
|
||||||
|
include Press, William H., Saul A. Teukolsky,
|
||||||
|
William T. Vetterling, and Brian P. Flannery,
|
||||||
|
"Numerical Recipes in C," Cambridge University Press, 1992.
|
||||||
|
*/
|
||||||
|
_t1 = q;
|
||||||
|
_t2 = (dpp - r2) / q;
|
||||||
|
|
||||||
|
/* adjust t1 and t2 to ensure t1 is the closer intersection */
|
||||||
|
if (_t1 > _t2) {
|
||||||
|
tmp = _t1;
|
||||||
|
_t1 = _t2;
|
||||||
|
_t2 = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
*t1 = _t1;
|
||||||
|
*t2 = _t2;
|
||||||
|
|
||||||
|
/* check if the closest intersection (t1) is behind the ray's origin */
|
||||||
|
if (_t1 < 0.0f && _t2 < 0.0f) {
|
||||||
|
/* both intersections are behind the ray, no visible intersection */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief point using t by 𝐏(𝑡)=𝐀+𝑡𝐛
|
||||||
|
*
|
||||||
|
* @param[in] orig origin of ray
|
||||||
|
* @param[in] dir direction of ray
|
||||||
|
* @param[in] t parameter
|
||||||
|
* @param[out] point point at t
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ray_at(vec3 orig, vec3 dir, float t, vec3 point) {
|
||||||
|
vec3 dst;
|
||||||
|
glm_vec3_scale(dir, t, dst);
|
||||||
|
glm_vec3_add(orig, dst, point);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
#if defined( _MSC_VER )
|
#if defined( _MSC_VER )
|
||||||
# if (defined(_M_AMD64) || defined(_M_X64)) || _M_IX86_FP == 2
|
# if (defined(_M_AMD64) || defined(_M_X64)) || _M_IX86_FP == 2
|
||||||
|
# ifndef __SSE__
|
||||||
|
# define __SSE__
|
||||||
|
# endif
|
||||||
# ifndef __SSE2__
|
# ifndef __SSE2__
|
||||||
# define __SSE2__
|
# define __SSE2__
|
||||||
# endif
|
# endif
|
||||||
@@ -24,15 +27,22 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined(__SSE__)
|
||||||
# include <xmmintrin.h>
|
# include <xmmintrin.h>
|
||||||
# include <emmintrin.h>
|
|
||||||
# define CGLM_SSE_FP 1
|
# define CGLM_SSE_FP 1
|
||||||
# ifndef CGLM_SIMD_x86
|
# ifndef CGLM_SIMD_x86
|
||||||
# define CGLM_SIMD_x86
|
# define CGLM_SIMD_x86
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SSE2__)
|
||||||
|
# include <emmintrin.h>
|
||||||
|
# define CGLM_SSE2_FP 1
|
||||||
|
# ifndef CGLM_SIMD_x86
|
||||||
|
# define CGLM_SIMD_x86
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__SSE3__)
|
#if defined(__SSE3__)
|
||||||
# include <pmmintrin.h>
|
# include <pmmintrin.h>
|
||||||
# ifndef CGLM_SIMD_x86
|
# ifndef CGLM_SIMD_x86
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
#define glmm_set1(x) _mm_set1_ps(x)
|
#define glmm_set1(x) _mm_set1_ps(x)
|
||||||
#define glmm_128 __m128
|
#define glmm_128 __m128
|
||||||
|
|
||||||
#ifdef CGLM_USE_INT_DOMAIN
|
#if defined(CGLM_USE_INT_DOMAIN) && defined(__SSE2__)
|
||||||
# define glmm_shuff1(xmm, z, y, x, w) \
|
# define glmm_shuff1(xmm, z, y, x, w) \
|
||||||
_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \
|
_mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \
|
||||||
_MM_SHUFFLE(z, y, x, w)))
|
_MM_SHUFFLE(z, y, x, w)))
|
||||||
@@ -55,17 +55,40 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note that `0x80000000` corresponds to `INT_MIN` for a 32-bit int. */
|
/* Note that `0x80000000` corresponds to `INT_MIN` for a 32-bit int. */
|
||||||
#define GLMM_NEGZEROf ((int)0x80000000) /* 0x80000000 ---> -0.0f */
|
|
||||||
|
|
||||||
#define GLMM__SIGNMASKf(X, Y, Z, W) \
|
#if defined(__SSE2__)
|
||||||
|
# define GLMM_NEGZEROf ((int)0x80000000) /* 0x80000000 ---> -0.0f */
|
||||||
|
# define GLMM_POSZEROf ((int)0x00000000) /* 0x00000000 ---> +0.0f */
|
||||||
|
#else
|
||||||
|
# ifdef CGLM_FAST_MATH
|
||||||
|
union { int i; float f; } static GLMM_NEGZEROf_TU = { .i = (int)0x80000000 };
|
||||||
|
# define GLMM_NEGZEROf GLMM_NEGZEROf_TU.f
|
||||||
|
# define GLMM_POSZEROf 0.0f
|
||||||
|
# else
|
||||||
|
# define GLMM_NEGZEROf -0.0f
|
||||||
|
# define GLMM_POSZEROf 0.0f
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SSE2__)
|
||||||
|
# define GLMM__SIGNMASKf(X, Y, Z, W) \
|
||||||
_mm_castsi128_ps(_mm_set_epi32(X, Y, Z, W))
|
_mm_castsi128_ps(_mm_set_epi32(X, Y, Z, W))
|
||||||
/* _mm_set_ps(X, Y, Z, W); */
|
/* _mm_set_ps(X, Y, Z, W); */
|
||||||
|
#else
|
||||||
|
# define GLMM__SIGNMASKf(X, Y, Z, W) _mm_set_ps(X, Y, Z, W)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define glmm_float32x4_SIGNMASK_PNPN GLMM__SIGNMASKf(0, GLMM_NEGZEROf, 0, GLMM_NEGZEROf)
|
#define glmm_float32x4_SIGNMASK_PNPN GLMM__SIGNMASKf(GLMM_POSZEROf, GLMM_NEGZEROf, GLMM_POSZEROf, GLMM_NEGZEROf)
|
||||||
#define glmm_float32x4_SIGNMASK_NPNP GLMM__SIGNMASKf(GLMM_NEGZEROf, 0, GLMM_NEGZEROf, 0)
|
#define glmm_float32x4_SIGNMASK_NPNP GLMM__SIGNMASKf(GLMM_NEGZEROf, GLMM_POSZEROf, GLMM_NEGZEROf, GLMM_POSZEROf)
|
||||||
#define glmm_float32x4_SIGNMASK_NPPN GLMM__SIGNMASKf(GLMM_NEGZEROf, 0, 0, GLMM_NEGZEROf)
|
#define glmm_float32x4_SIGNMASK_NPPN GLMM__SIGNMASKf(GLMM_NEGZEROf, GLMM_POSZEROf, GLMM_POSZEROf, GLMM_NEGZEROf)
|
||||||
|
|
||||||
|
/* fasth math prevents -0.0f to work */
|
||||||
|
#if defined(__SSE2__)
|
||||||
|
# define glmm_float32x4_SIGNMASK_NEG _mm_castsi128_ps(_mm_set1_epi32(GLMM_NEGZEROf)) /* _mm_set1_ps(-0.0f) */
|
||||||
|
#else
|
||||||
|
# define glmm_float32x4_SIGNMASK_NEG _mm_set1_ps(GLMM_NEGZEROf)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define glmm_float32x4_SIGNMASK_NEG _mm_castsi128_ps(_mm_set1_epi32(GLMM_NEGZEROf)) /* _mm_set1_ps(-0.0f) */
|
|
||||||
#define glmm_float32x8_SIGNMASK_NEG _mm256_castsi256_ps(_mm256_set1_epi32(GLMM_NEGZEROf))
|
#define glmm_float32x8_SIGNMASK_NEG _mm256_castsi256_ps(_mm256_set1_epi32(GLMM_NEGZEROf))
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
@@ -207,6 +230,7 @@ glmm_norm_inf(__m128 a) {
|
|||||||
return _mm_cvtss_f32(glmm_vhmax(glmm_abs(a)));
|
return _mm_cvtss_f32(glmm_vhmax(glmm_abs(a)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__SSE2__)
|
||||||
static inline
|
static inline
|
||||||
__m128
|
__m128
|
||||||
glmm_load3(float v[3]) {
|
glmm_load3(float v[3]) {
|
||||||
@@ -225,6 +249,7 @@ glmm_store3(float v[3], __m128 vx) {
|
|||||||
_mm_storel_pi(CGLM_CASTPTR_ASSUME_ALIGNED(v, __m64), vx);
|
_mm_storel_pi(CGLM_CASTPTR_ASSUME_ALIGNED(v, __m64), vx);
|
||||||
_mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2));
|
_mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
__m128
|
__m128
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ extern "C" {
|
|||||||
#include "struct/vec2.h"
|
#include "struct/vec2.h"
|
||||||
#include "struct/vec3.h"
|
#include "struct/vec3.h"
|
||||||
#include "struct/vec4.h"
|
#include "struct/vec4.h"
|
||||||
|
#include "struct/ivec2.h"
|
||||||
|
#include "struct/ivec3.h"
|
||||||
|
#include "struct/ivec4.h"
|
||||||
#include "struct/mat2.h"
|
#include "struct/mat2.h"
|
||||||
#include "struct/mat2x3.h"
|
#include "struct/mat2x3.h"
|
||||||
#include "struct/mat2x4.h"
|
#include "struct/mat2x4.h"
|
||||||
@@ -38,6 +41,7 @@ extern "C" {
|
|||||||
#include "struct/sphere.h"
|
#include "struct/sphere.h"
|
||||||
#include "struct/curve.h"
|
#include "struct/curve.h"
|
||||||
#include "struct/affine2d.h"
|
#include "struct/affine2d.h"
|
||||||
|
#include "struct/ray.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include "mat4.h"
|
#include "mat4.h"
|
||||||
|
|
||||||
/* api definition */
|
/* api definition */
|
||||||
#define glms_aabb2d_(NAME) CGLM_STRUCTAPI(aabb, NAME)
|
#define glms_aabb2d_(NAME) CGLM_STRUCTAPI(aabb2d, NAME)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief apply transform to Axis-Aligned Bounding Box
|
* @brief apply transform to Axis-Aligned Bounding Box
|
||||||
@@ -92,7 +92,7 @@ glms_aabb2d_(crop)(vec2s aabb[2], vec2s cropAabb[2], vec2s dest[2]) {
|
|||||||
*
|
*
|
||||||
* @param[in] aabb bounding box
|
* @param[in] aabb bounding box
|
||||||
* @param[in] cropAabb crop box
|
* @param[in] cropAabb crop box
|
||||||
* @param[in] clampAabb miniumum box
|
* @param[in] clampAabb minimum box
|
||||||
* @param[out] dest cropped bounding box
|
* @param[out] dest cropped bounding box
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
|
|||||||
@@ -33,9 +33,9 @@
|
|||||||
* @brief translate existing transform matrix by v vector
|
* @brief translate existing transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -47,9 +47,9 @@ glms_translated(mat4s m, vec3s v) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by x factor
|
* @brief translate existing transform matrix by x factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] x x factor
|
* @param[in] x x factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -61,9 +61,9 @@ glms_translated_x(mat4s m, float x) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by y factor
|
* @brief translate existing transform matrix by y factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] y y factor
|
* @param[in] y y factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -75,9 +75,9 @@ glms_translated_y(mat4s m, float y) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by z factor
|
* @brief translate existing transform matrix by z factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] z z factor
|
* @param[in] z z factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -90,7 +90,7 @@ glms_translated_z(mat4s m, float z) {
|
|||||||
* @brief rotate existing transform matrix around X axis by angle
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -106,7 +106,7 @@ glms_rotated_x(mat4s m, float angle) {
|
|||||||
* @brief rotate existing transform matrix around Y axis by angle
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -122,7 +122,7 @@ glms_rotated_y(mat4s m, float angle) {
|
|||||||
* @brief rotate existing transform matrix around Z axis by angle
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -137,10 +137,10 @@ glms_rotated_z(mat4s m, float angle) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -153,11 +153,11 @@ glms_rotated(mat4s m, float angle, vec3s axis) {
|
|||||||
* @brief rotate existing transform
|
* @brief rotate existing transform
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] pivot rotation center
|
* @param[in] pivot rotation center
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -169,10 +169,10 @@ glms_rotated_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
|
|||||||
@@ -33,9 +33,9 @@
|
|||||||
* @brief translate existing transform matrix by v vector
|
* @brief translate existing transform matrix by v vector
|
||||||
* and stores result in same matrix
|
* and stores result in same matrix
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] v translate vector [x, y, z]
|
* @param[in] v translate vector [x, y, z]
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -47,9 +47,9 @@ glms_translate(mat4s m, vec3s v) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by x factor
|
* @brief translate existing transform matrix by x factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] x x factor
|
* @param[in] x x factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -61,9 +61,9 @@ glms_translate_x(mat4s m, float x) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by y factor
|
* @brief translate existing transform matrix by y factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] y y factor
|
* @param[in] y y factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -75,9 +75,9 @@ glms_translate_y(mat4s m, float y) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief translate existing transform matrix by z factor
|
* @brief translate existing transform matrix by z factor
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] z z factor
|
* @param[in] z z factor
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -90,7 +90,7 @@ glms_translate_z(mat4s m, float z) {
|
|||||||
* @brief rotate existing transform matrix around X axis by angle
|
* @brief rotate existing transform matrix around X axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -106,7 +106,7 @@ glms_rotate_x(mat4s m, float angle) {
|
|||||||
* @brief rotate existing transform matrix around Y axis by angle
|
* @brief rotate existing transform matrix around Y axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -122,7 +122,7 @@ glms_rotate_y(mat4s m, float angle) {
|
|||||||
* @brief rotate existing transform matrix around Z axis by angle
|
* @brief rotate existing transform matrix around Z axis by angle
|
||||||
* and store result in dest
|
* and store result in dest
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @returns rotated matrix
|
* @returns rotated matrix
|
||||||
*/
|
*/
|
||||||
@@ -137,10 +137,10 @@ glms_rotate_z(mat4s m, float angle) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle
|
* @brief rotate existing transform matrix around given axis by angle
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -153,11 +153,11 @@ glms_rotate(mat4s m, float angle, vec3s axis) {
|
|||||||
* @brief rotate existing transform
|
* @brief rotate existing transform
|
||||||
* around given axis by angle at given pivot point (rotation center)
|
* around given axis by angle at given pivot point (rotation center)
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] pivot rotation center
|
* @param[in] pivot rotation center
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
@@ -169,10 +169,10 @@ glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
* @brief rotate existing transform matrix around given axis by angle around self (doesn't affected by position)
|
||||||
*
|
*
|
||||||
* @param[in] m affine transfrom
|
* @param[in] m affine transform
|
||||||
* @param[in] angle angle (radians)
|
* @param[in] angle angle (radians)
|
||||||
* @param[in] axis axis
|
* @param[in] axis axis
|
||||||
* @returns affine transfrom
|
* @returns affine transform
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
mat4s
|
mat4s
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user