mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
165 Commits
non-square
...
ray
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
6d8dd42ac2 | ||
|
|
dab86796a4 | ||
|
|
4b93cb3e05 | ||
|
|
a682b9e6cf | ||
|
|
bca93a379d | ||
|
|
34f0d59f5a | ||
|
|
c878161518 | ||
|
|
3b1d4fc546 | ||
|
|
5be1c2f059 | ||
|
|
67ce1519c5 | ||
|
|
86743c98e5 | ||
|
|
015e859075 | ||
|
|
3a2a26e5a4 | ||
|
|
1ccd9af866 | ||
|
|
aa20b8ae7f | ||
|
|
fa6244c42b | ||
|
|
c998d0186a | ||
|
|
a94861dd5d | ||
|
|
040926999a | ||
|
|
40cfbe9717 | ||
|
|
d820410435 | ||
|
|
39c0c1e784 | ||
|
|
4c9b32324d | ||
|
|
921ab6640b | ||
|
|
7701a1a789 | ||
|
|
46aaf250fa | ||
|
|
42b5e834d1 | ||
|
|
732a403112 | ||
|
|
559a6588c8 | ||
|
|
8277473202 | ||
|
|
97575bdcd6 | ||
|
|
bc2a918ad0 | ||
|
|
8ebcc3aceb | ||
|
|
d341478342 | ||
|
|
7e4383cb3d | ||
|
|
b45657f673 | ||
|
|
e24675c6e0 | ||
|
|
2e6e4a9a44 | ||
|
|
4f88a027bc | ||
|
|
673263265b | ||
|
|
dd9235dfee | ||
|
|
4c4a69ddfe | ||
|
|
d6139559b6 | ||
|
|
2eb9a67a3a | ||
|
|
8a1d1cf35d | ||
|
|
fee2b7d344 | ||
|
|
865faad116 | ||
|
|
7ccf199066 | ||
|
|
047138321c | ||
|
|
75b99ef87d | ||
|
|
036fd4848b | ||
|
|
666d692dfb | ||
|
|
ec3796973e | ||
|
|
45f2fff22f | ||
|
|
4ee6aea037 | ||
|
|
2f7dbad6a8 | ||
|
|
5ae0cd4618 | ||
|
|
23d03ffe6c | ||
|
|
c5694c5c17 | ||
|
|
d67ac97323 | ||
|
|
05ea35ffec | ||
|
|
05d45872a3 | ||
|
|
c431bbf190 | ||
|
|
340292c0fb | ||
|
|
2106f9ebcb | ||
|
|
c1d78d835b | ||
|
|
de80b8325f | ||
|
|
7061df0066 | ||
|
|
eb73e4123b | ||
|
|
22140d8e1b | ||
|
|
39602ef4d7 | ||
|
|
abb71a8e32 | ||
|
|
f8b6573de8 | ||
|
|
15f29e05eb | ||
|
|
7696374f1e | ||
|
|
44d103fa00 | ||
|
|
c29f077bed | ||
|
|
2a975a7d0a | ||
|
|
049db64a0f | ||
|
|
e71694bb57 | ||
|
|
8754158fbe | ||
|
|
e1a0892097 | ||
|
|
9b26aff466 | ||
|
|
24e417107b | ||
|
|
009405adcd | ||
|
|
0b2006dd47 | ||
|
|
1fdc1c8675 | ||
|
|
6e1d6d505b | ||
|
|
45cf4710c4 | ||
|
|
056b28e4da | ||
|
|
c6e58bd44a | ||
|
|
a81c0f076a | ||
|
|
ab684b7c66 | ||
|
|
53bde05bd9 | ||
|
|
58a4b47830 | ||
|
|
1bfa53f44c | ||
|
|
d93b46bab7 | ||
|
|
9efc255451 | ||
|
|
9484155c98 | ||
|
|
509078817c | ||
|
|
126f809dae | ||
|
|
e0e7e380e5 | ||
|
|
d3169b12a7 | ||
|
|
9d0c9fdb87 | ||
|
|
f496146bce | ||
|
|
54632ecce5 | ||
|
|
61478d2563 | ||
|
|
cdd4d0e83e |
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
|
||||||
4
.github/workflows/cmake-wasm.yml
vendored
4
.github/workflows/cmake-wasm.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Downloading wasi-sdk
|
- name: Downloading wasi-sdk
|
||||||
run: |
|
run: |
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
C_FLAGS: ['', '-msimd128', '-msse -msse2 -msimd128', '-msse -msse2 -msse3 -msse4 -msimd128']
|
C_FLAGS: ['', '-msimd128', '-msse -msse2 -msimd128', '-msse -msse2 -msse3 -msse4 -msimd128']
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Setup emsdk
|
- name: Setup emsdk
|
||||||
uses: mymindstorm/setup-emsdk@v12
|
uses: mymindstorm/setup-emsdk@v12
|
||||||
|
|
||||||
|
|||||||
79
.github/workflows/meson-wasm.yml
vendored
Normal file
79
.github/workflows/meson-wasm.yml
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
name: Meson WebAssembly
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "master" ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
wasmtime_version: v7.0.0
|
||||||
|
wasmer_version: v3.1.1
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_emsdk:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
BUILD_TYPE: [debug, debugoptimized, release, minsize]
|
||||||
|
C_FLAGS: ['', '-msimd128', '-msse -msse2 -msimd128', '-msse -msse2 -msse3 -msse4 -msimd128']
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Setup emsdk
|
||||||
|
uses: mymindstorm/setup-emsdk@v13
|
||||||
|
|
||||||
|
- name: Verify emsdk
|
||||||
|
run: emcc -v
|
||||||
|
|
||||||
|
- name: Creating cross file
|
||||||
|
run: |
|
||||||
|
cat << EOF > ${{github.workspace}}/meson_cross_emsdk.txt
|
||||||
|
[binaries]
|
||||||
|
c = '`which emcc`'
|
||||||
|
cpp = '`which em++`'
|
||||||
|
ar = '`which emar`'
|
||||||
|
|
||||||
|
[built-in options]
|
||||||
|
|
||||||
|
c_args = ['-Wno-unused-parameter']
|
||||||
|
c_link_args = ['-s', 'STANDALONE_WASM']
|
||||||
|
cpp_args = ['-Wno-unused-parameter']
|
||||||
|
cpp_link_args = ['-s', 'STANDALONE_WASM']
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
|
||||||
|
system = 'emscripten'
|
||||||
|
cpu_family = 'wasm32'
|
||||||
|
cpu = 'wasm32'
|
||||||
|
endian = 'little'
|
||||||
|
|
||||||
|
EOF
|
||||||
|
cat ${{github.workspace}}/meson_cross_emsdk.txt
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
|
||||||
|
- name: Install meson
|
||||||
|
run: |
|
||||||
|
sudo python3 -m pip install meson ninja
|
||||||
|
|
||||||
|
- name: Build with meson
|
||||||
|
run: |
|
||||||
|
meson setup build -Dbuildtype=${{matrix.BUILD_TYPE}} --cross-file ${{github.workspace}}/meson_cross_emsdk.txt --default-library=static -Dbuild_tests=true
|
||||||
|
meson test -C build
|
||||||
|
|
||||||
|
- name: Test with wasmtime
|
||||||
|
run: |
|
||||||
|
cd ${{github.workspace}}
|
||||||
|
ls -lh ${{github.workspace}}/build/
|
||||||
|
wget --no-verbose https://github.com/bytecodealliance/wasmtime/releases/download/${{env.wasmtime_version}}/wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
|
||||||
|
tar xf wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
|
||||||
|
./wasmtime-${{env.wasmtime_version}}-x86_64-linux/wasmtime run --wasm-features simd ${{github.workspace}}/build/tests.wasm
|
||||||
|
|
||||||
|
- name: Test with wasmer
|
||||||
|
run: |
|
||||||
|
cd ${{github.workspace}}
|
||||||
|
mkdir wasmer
|
||||||
|
cd wasmer
|
||||||
|
wget --no-verbose https://github.com/wasmerio/wasmer/releases/download/${{env.wasmer_version}}/wasmer-linux-amd64.tar.gz
|
||||||
|
tar xf wasmer-linux-amd64.tar.gz
|
||||||
|
./bin/wasmer run --enable-simd ${{github.workspace}}/build/tests.wasm
|
||||||
39
.readthedocs.yaml
Normal file
39
.readthedocs.yaml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Read the Docs configuration file for Sphinx projects
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Set the OS, Python version and other tools you might need
|
||||||
|
build:
|
||||||
|
os: ubuntu-22.04
|
||||||
|
tools:
|
||||||
|
python: "3.12"
|
||||||
|
# You can also specify other tool versions:
|
||||||
|
# nodejs: "20"
|
||||||
|
# rust: "1.70"
|
||||||
|
# golang: "1.20"
|
||||||
|
|
||||||
|
# Build documentation in the "docs/" directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
configuration: docs/source/conf.py
|
||||||
|
# You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
|
||||||
|
# builder: "dirhtml"
|
||||||
|
# Fail on all warnings to avoid broken references
|
||||||
|
# fail_on_warning: true
|
||||||
|
|
||||||
|
# Optionally build your docs in additional formats such as PDF and ePub
|
||||||
|
# formats:
|
||||||
|
# - pdf
|
||||||
|
# - epub
|
||||||
|
|
||||||
|
# Optional but recommended, declare the Python requirements required
|
||||||
|
# to build your documentation
|
||||||
|
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
|
||||||
|
# python:
|
||||||
|
# install:
|
||||||
|
# - requirements: docs/requirements.txt
|
||||||
|
|
||||||
|
python:
|
||||||
|
install:
|
||||||
|
- requirements: docs/requirements.txt
|
||||||
@@ -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.1
|
VERSION 0.9.3
|
||||||
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
|
||||||
|
|||||||
26
Makefile.am
26
Makefile.am
@@ -69,6 +69,7 @@ cglm_HEADERS = include/cglm/version.h \
|
|||||||
include/cglm/plane.h \
|
include/cglm/plane.h \
|
||||||
include/cglm/frustum.h \
|
include/cglm/frustum.h \
|
||||||
include/cglm/box.h \
|
include/cglm/box.h \
|
||||||
|
include/cglm/aabb2d.h \
|
||||||
include/cglm/color.h \
|
include/cglm/color.h \
|
||||||
include/cglm/project.h \
|
include/cglm/project.h \
|
||||||
include/cglm/sphere.h \
|
include/cglm/sphere.h \
|
||||||
@@ -149,7 +150,8 @@ cglm_call_clipspace_HEADERS = include/cglm/call/clipspace/persp_lh_no.h \
|
|||||||
cglm_simddir=$(includedir)/cglm/simd
|
cglm_simddir=$(includedir)/cglm/simd
|
||||||
cglm_simd_HEADERS = include/cglm/simd/intrin.h \
|
cglm_simd_HEADERS = include/cglm/simd/intrin.h \
|
||||||
include/cglm/simd/x86.h \
|
include/cglm/simd/x86.h \
|
||||||
include/cglm/simd/arm.h
|
include/cglm/simd/arm.h \
|
||||||
|
include/cglm/simd/wasm.h
|
||||||
|
|
||||||
cglm_simd_sse2dir=$(includedir)/cglm/simd/sse2
|
cglm_simd_sse2dir=$(includedir)/cglm/simd/sse2
|
||||||
cglm_simd_sse2_HEADERS = include/cglm/simd/sse2/affine.h \
|
cglm_simd_sse2_HEADERS = include/cglm/simd/sse2/affine.h \
|
||||||
@@ -168,6 +170,17 @@ cglm_simd_neon_HEADERS = include/cglm/simd/neon/affine.h \
|
|||||||
include/cglm/simd/neon/mat4.h \
|
include/cglm/simd/neon/mat4.h \
|
||||||
include/cglm/simd/neon/quat.h
|
include/cglm/simd/neon/quat.h
|
||||||
|
|
||||||
|
cglm_simd_wasmdir=$(includedir)/cglm/simd/wasm
|
||||||
|
cglm_simd_wasm_HEADERS = include/cglm/simd/wasm/affine.h \
|
||||||
|
include/cglm/simd/wasm/mat2.h \
|
||||||
|
include/cglm/simd/wasm/mat3.h \
|
||||||
|
include/cglm/simd/wasm/mat4.h \
|
||||||
|
include/cglm/simd/wasm/quat.h
|
||||||
|
|
||||||
|
cglm_handeddir=$(includedir)/cglm/handed
|
||||||
|
cglm_handed_HEADERS = include/cglm/handed/euler_to_quat_lh.h \
|
||||||
|
include/cglm/handed/euler_to_quat_rh.h
|
||||||
|
|
||||||
cglm_structdir=$(includedir)/cglm/struct
|
cglm_structdir=$(includedir)/cglm/struct
|
||||||
cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
||||||
include/cglm/struct/mat4x2.h \
|
include/cglm/struct/mat4x2.h \
|
||||||
@@ -185,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 \
|
||||||
@@ -196,10 +212,12 @@ cglm_struct_HEADERS = include/cglm/struct/mat4.h \
|
|||||||
include/cglm/struct/plane.h \
|
include/cglm/struct/plane.h \
|
||||||
include/cglm/struct/frustum.h \
|
include/cglm/struct/frustum.h \
|
||||||
include/cglm/struct/box.h \
|
include/cglm/struct/box.h \
|
||||||
|
include/cglm/struct/aabb2d.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 \
|
||||||
@@ -217,6 +235,10 @@ cglm_struct_clipspace_HEADERS = include/cglm/struct/clipspace/persp_lh_no.h \
|
|||||||
include/cglm/struct/clipspace/project_no.h \
|
include/cglm/struct/clipspace/project_no.h \
|
||||||
include/cglm/struct/clipspace/project_zo.h
|
include/cglm/struct/clipspace/project_zo.h
|
||||||
|
|
||||||
|
cglm_struct_handeddir=$(includedir)/cglm/struct/handed
|
||||||
|
cglm_struct_handed_HEADERS = include/cglm/struct/handed/euler_to_quat_lh.h \
|
||||||
|
include/cglm/struct/handed/euler_to_quat_rh.h
|
||||||
|
|
||||||
libcglm_la_SOURCES=\
|
libcglm_la_SOURCES=\
|
||||||
src/euler.c \
|
src/euler.c \
|
||||||
src/affine.c \
|
src/affine.c \
|
||||||
|
|||||||
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.0"
|
s.version = "0.9.2"
|
||||||
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.1], [info@recp.me])
|
AC_INIT([cglm], [0.9.3], [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
4
docs/requirements.txt
Normal file
4
docs/requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Defining the exact version will make sure things don't break
|
||||||
|
sphinx==7.2.6
|
||||||
|
sphinx_rtd_theme==2.0.0
|
||||||
|
readthedocs-sphinx-search==0.3.2
|
||||||
198
docs/source/aabb2d.rst
Normal file
198
docs/source/aabb2d.rst
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
.. default-domain:: C
|
||||||
|
|
||||||
|
2d axis aligned bounding box (AABB)
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Header: cglm/aabb2d.h
|
||||||
|
|
||||||
|
Some convenient functions provided for AABB.
|
||||||
|
|
||||||
|
**Definition of aabb:**
|
||||||
|
|
||||||
|
cglm defines an aabb as a two dimensional array of vec2's.
|
||||||
|
The first element is the **min** point and the second one is the **max** point.
|
||||||
|
If you have another type e.g. struct or even another representation then you must
|
||||||
|
convert it before and after calling a cglm aabb2d function.
|
||||||
|
|
||||||
|
Table of contents (click to go):
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Macros:
|
||||||
|
|
||||||
|
1. :c:func:`glm_aabb2d_size`
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
1. :c:func:`glm_aabb2d_copy`
|
||||||
|
#. :c:func:`glm_aabb2d_zero`
|
||||||
|
#. :c:func:`glm_aabb2d_transform`
|
||||||
|
#. :c:func:`glm_aabb2d_merge`
|
||||||
|
#. :c:func:`glm_aabb2d_crop`
|
||||||
|
#. :c:func:`glm_aabb2d_crop_until`
|
||||||
|
#. :c:func:`glm_aabb2d_invalidate`
|
||||||
|
#. :c:func:`glm_aabb2d_isvalid`
|
||||||
|
#. :c:func:`glm_aabb2d_diag`
|
||||||
|
#. :c:func:`glm_aabb2d_sizev`
|
||||||
|
#. :c:func:`glm_aabb2d_radius`
|
||||||
|
#. :c:func:`glm_aabb2d_center`
|
||||||
|
#. :c:func:`glm_aabb2d_aabb`
|
||||||
|
#. :c:func:`glm_aabb2d_circle`
|
||||||
|
#. :c:func:`glm_aabb2d_point`
|
||||||
|
#. :c:func:`glm_aabb2d_contains`
|
||||||
|
|
||||||
|
Functions documentation
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_copy(vec2 aabb[2], vec2 dest[2])
|
||||||
|
|
||||||
|
| copy all members of [aabb] to [dest]
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[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])
|
||||||
|
|
||||||
|
| apply transform to Axis-Aligned Bounding Box
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[in]* **m** transform matrix
|
||||||
|
| *[out]* **dest** transformed bounding box
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_merge(vec2 aabb1[2], vec2 aabb2[2], vec2 dest[2])
|
||||||
|
|
||||||
|
| merges two AABB bounding box and creates new one
|
||||||
|
|
||||||
|
two aabb must be in the same space
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb1** bounding box 1
|
||||||
|
| *[in]* **aabb2** bounding box 2
|
||||||
|
| *[out]* **dest** merged bounding box
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2])
|
||||||
|
|
||||||
|
| crops a bounding box with another one.
|
||||||
|
|
||||||
|
this could be useful for gettng a bbox which fits with view frustum and
|
||||||
|
object bounding boxes. In this case you crop view frustum box with objects
|
||||||
|
box
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box 1
|
||||||
|
| *[in]* **cropAabb** crop box
|
||||||
|
| *[out]* **dest** cropped bounding box
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_crop_until(vec2 aabb[2], vec2 cropAabb[2], vec2 clampAabb[2], vec2 dest[2])
|
||||||
|
|
||||||
|
| crops a bounding box with another one.
|
||||||
|
|
||||||
|
this could be useful for gettng a bbox which fits with view frustum and
|
||||||
|
object bounding boxes. In this case you crop view frustum box with objects
|
||||||
|
box
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[in]* **cropAabb** crop box
|
||||||
|
| *[in]* **clampAabb** minimum box
|
||||||
|
| *[out]* **dest** cropped bounding box
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_invalidate(vec2 aabb[2])
|
||||||
|
|
||||||
|
| invalidate AABB min and max values
|
||||||
|
|
||||||
|
| It fills *max* values with -FLT_MAX and *min* values with +FLT_MAX
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in, out]* **aabb** bounding box
|
||||||
|
|
||||||
|
.. c:function:: bool glm_aabb2d_isvalid(vec2 aabb[2])
|
||||||
|
|
||||||
|
| check if AABB is valid or not
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
returns true if aabb is valid otherwise false
|
||||||
|
|
||||||
|
.. c:function:: float glm_aabb2d_diag(vec2 aabb[2])
|
||||||
|
|
||||||
|
| distance between min and max
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
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])
|
||||||
|
|
||||||
|
| radius of sphere which surrounds AABB
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
|
||||||
|
.. c:function:: void glm_aabb2d_center(vec2 aabb[2], vec2 dest)
|
||||||
|
|
||||||
|
| computes center point of AABB
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[out]* **dest** center of bounding box
|
||||||
|
|
||||||
|
.. c:function:: bool glm_aabb2d_aabb(vec2 aabb[2], vec2 other[2])
|
||||||
|
|
||||||
|
| check if two AABB intersects
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[out]* **other** other bounding box
|
||||||
|
|
||||||
|
.. c:function:: bool glm_aabb2d_circle(vec2 aabb[2], vec3 c)
|
||||||
|
|
||||||
|
| check if AABB intersects with sphere
|
||||||
|
|
||||||
|
| https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
|
||||||
|
| Solid Box - Solid Sphere test.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** solid bounding box
|
||||||
|
| *[out]* **c** solid circle
|
||||||
|
|
||||||
|
.. c:function:: bool glm_aabb2d_point(vec2 aabb[2], vec2 point)
|
||||||
|
|
||||||
|
| check if point is inside of AABB
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[out]* **point** point
|
||||||
|
|
||||||
|
.. c:function:: bool glm_aabb2d_contains(vec2 aabb[2], vec2 other[2])
|
||||||
|
|
||||||
|
| check if AABB contains other AABB
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **aabb** bounding box
|
||||||
|
| *[out]* **other** other bounding box
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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,7 +3,7 @@ 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
|
||||||
|
|
||||||
|
|||||||
@@ -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.1'
|
version = u'0.9.2'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = u'0.9.1'
|
release = u'0.9.2'
|
||||||
|
|
||||||
# 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)
|
||||||
@@ -18,6 +18,7 @@ Features
|
|||||||
* inline or pre-compiled function call
|
* inline or pre-compiled function call
|
||||||
* frustum (extract view frustum planes, corners...)
|
* frustum (extract view frustum planes, corners...)
|
||||||
* bounding box (AABB in Frustum (culling), crop, merge...)
|
* bounding box (AABB in Frustum (culling), crop, merge...)
|
||||||
|
* 2d bounding box (crop, merge...)
|
||||||
* bounding sphere
|
* bounding sphere
|
||||||
* project, unproject
|
* project, unproject
|
||||||
* easing functions
|
* easing functions
|
||||||
|
|||||||
@@ -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,14 +35,14 @@ 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**
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
@@ -53,8 +53,11 @@ Functions:
|
|||||||
1. :c:func:`glm_mat4_print`
|
1. :c:func:`glm_mat4_print`
|
||||||
#. :c:func:`glm_mat3_print`
|
#. :c:func:`glm_mat3_print`
|
||||||
#. :c:func:`glm_vec4_print`
|
#. :c:func:`glm_vec4_print`
|
||||||
|
#. :c:func:`glm_ivec4_print`
|
||||||
#. :c:func:`glm_vec3_print`
|
#. :c:func:`glm_vec3_print`
|
||||||
#. :c:func:`glm_ivec3_print`
|
#. :c:func:`glm_ivec3_print`
|
||||||
|
#. :c:func:`glm_vec2_print`
|
||||||
|
#. :c:func:`glm_ivec2_print`
|
||||||
#. :c:func:`glm_versor_print`
|
#. :c:func:`glm_versor_print`
|
||||||
#. :c:func:`glm_aabb_print`
|
#. :c:func:`glm_aabb_print`
|
||||||
|
|
||||||
@@ -63,7 +66,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat4_print(mat4 matrix, FILE * __restrict ostream)
|
.. c:function:: void glm_mat4_print(mat4 matrix, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print mat4 to given stream
|
| print matrix to given stream
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **matrix** matrix
|
| *[in]* **matrix** matrix
|
||||||
@@ -71,7 +74,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_mat3_print(mat3 matrix, FILE * __restrict ostream)
|
.. c:function:: void glm_mat3_print(mat3 matrix, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print mat3 to given stream
|
| print matrix to given stream
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **matrix** matrix
|
| *[in]* **matrix** matrix
|
||||||
@@ -79,7 +82,15 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec4_print(vec4 vec, FILE * __restrict ostream)
|
.. c:function:: void glm_vec4_print(vec4 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print vec4 to given stream
|
| print vector to given stream
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector
|
||||||
|
| *[in]* **ostream** FILE to write
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec4_print(ivec4 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
|
| print vector to given stream
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **vec** vector
|
| *[in]* **vec** vector
|
||||||
@@ -87,7 +98,7 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_vec3_print(vec3 vec, FILE * __restrict ostream)
|
.. c:function:: void glm_vec3_print(vec3 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print vec3 to given stream
|
| print vector to given stream
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **vec** vector
|
| *[in]* **vec** vector
|
||||||
@@ -95,12 +106,29 @@ Functions documentation
|
|||||||
|
|
||||||
.. c:function:: void glm_ivec3_print(ivec3 vec, FILE * __restrict ostream)
|
.. c:function:: void glm_ivec3_print(ivec3 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print ivec3 to given stream
|
| print vector to given stream
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **vec** vector
|
| *[in]* **vec** vector
|
||||||
| *[in]* **ostream** FILE to write
|
| *[in]* **ostream** FILE to write
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec2_print(vec2 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
|
| print vector to given stream
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector
|
||||||
|
| *[in]* **ostream** FILE to write
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_print(ivec2 vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
|
| print vector to given stream
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector
|
||||||
|
| *[in]* **ostream** FILE to write
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: void glm_versor_print(versor vec, FILE * __restrict ostream)
|
.. c:function:: void glm_versor_print(versor vec, FILE * __restrict ostream)
|
||||||
|
|
||||||
| print quaternion to given stream
|
| print quaternion to given stream
|
||||||
@@ -115,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
|
||||||
@@ -143,6 +199,31 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
distance
|
distance
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec2_fill(ivec2 v, int val)
|
||||||
|
|
||||||
|
fill a vector with specified value
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
| *[in]* **val** value
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ivec2_eq(ivec2 v, int val)
|
||||||
|
|
||||||
|
check if vector is equal to value
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **val** value
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ivec2_eqv(ivec2 v1, ivec2 v2)
|
||||||
|
|
||||||
|
check if vector is equal to another vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector 1
|
||||||
|
| *[in]* **vec** vector 2
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
.. c:function:: void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
|
||||||
set each member of dest to greater of vector a and b
|
set each member of dest to greater of vector a and b
|
||||||
|
|||||||
@@ -21,14 +21,23 @@ 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_eq`
|
||||||
|
#. :c:func:`glm_ivec3_eqv`
|
||||||
#. :c:func:`glm_ivec3_maxv`
|
#. :c:func:`glm_ivec3_maxv`
|
||||||
#. :c:func:`glm_ivec3_minv`
|
#. :c:func:`glm_ivec3_minv`
|
||||||
#. :c:func:`glm_ivec3_clamp`
|
#. :c:func:`glm_ivec3_clamp`
|
||||||
@@ -67,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]
|
||||||
@@ -121,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
|
||||||
@@ -143,6 +212,30 @@ Functions documentation
|
|||||||
Returns:
|
Returns:
|
||||||
distance
|
distance
|
||||||
|
|
||||||
|
.. c:function:: void glm_ivec3_fill(ivec3 v, int val)
|
||||||
|
|
||||||
|
fill a vector with specified value
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
| *[in]* **val** value
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ivec3_eq(ivec3 v, int val)
|
||||||
|
|
||||||
|
check if vector is equal to value
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v** vector
|
||||||
|
| *[in]* **val** value
|
||||||
|
|
||||||
|
.. c:function:: bool glm_ivec3_eqv(ivec3 v1, ivec3 v2)
|
||||||
|
|
||||||
|
check if vector is equal to another vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **vec** vector 1
|
||||||
|
| *[in]* **vec** vector 2
|
||||||
|
|
||||||
.. c:function:: void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
.. c:function:: void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
|
||||||
set each member of dest to greater of vector a and b
|
set each member of dest to greater of vector a and b
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ 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
|
||||||
@@ -55,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat2x3_mul(m, m, m);
|
glm_mat2x3_mul(mat2x3, mat3x2, mat2);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat2x3)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat3x2)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat2)
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest)
|
.. c:function:: void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest)
|
||||||
|
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ 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
|
||||||
@@ -55,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat2x4_mul(m, m, m);
|
glm_mat2x4_mul(mat2x4, mat4x2, mat2);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat2x4)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat4x2)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat2)
|
||||||
|
|
||||||
.. c:function:: void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest)
|
.. c:function:: void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 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
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ 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
|
||||||
@@ -54,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat3x2_mul(m, m, m);
|
glm_mat3x2_mul(mat3x2, mat2x3, mat3);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat3x2)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat2x3)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat3)
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest)
|
.. c:function:: void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 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
|
||||||
@@ -54,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat3x4_mul(m, m, m);
|
glm_mat3x4_mul(mat3x4, mat4x3, mat3);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat3x4)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat4x3)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat3)
|
||||||
|
|
||||||
.. c:function:: void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest)
|
.. c:function:: void glm_mat3x4_mulv(mat3x4 m, vec4 v, vec3 dest)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -54,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat4x2_mul(m, m, m);
|
glm_mat4x2_mul(mat4x2, mat2x4, mat4);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat4x2)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat2x4)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat4)
|
||||||
|
|
||||||
.. c:function:: void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest)
|
.. c:function:: void glm_mat4x2_mulv(mat4x2 m, vec2 v, vec4 dest)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -54,16 +55,14 @@ Functions documentation
|
|||||||
|
|
||||||
multiply m1 and m2 to dest
|
multiply m1 and m2 to dest
|
||||||
|
|
||||||
m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
glm_mat4x3_mul(m, m, m);
|
glm_mat4x3_mul(mat4x3, mat3x4, mat4);
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
| *[in]* **m1** left matrix
|
| *[in]* **m1** left matrix (mat4x3)
|
||||||
| *[in]* **m2** right matrix
|
| *[in]* **m2** right matrix (mat3x4)
|
||||||
| *[out]* **dest** destination matrix
|
| *[out]* **dest** destination matrix (mat4)
|
||||||
|
|
||||||
.. c:function:: void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest)
|
.. c:function:: void glm_mat4x3_mulv(mat4x3 m, vec3 v, vec4 dest)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ have to compile cglm with **CGLM_ALL_UNALIGNED** macro.
|
|||||||
if you do not know what you are doing. Because a cglm header included
|
if you do not know what you are doing. Because a cglm header included
|
||||||
via 'project A' may force types to be aligned and another cglm header
|
via 'project A' may force types to be aligned and another cglm header
|
||||||
included via 'project B' may not require alignment. In this case
|
included via 'project B' may not require alignment. In this case
|
||||||
cglm functions will read from and write to **INVALID MEMORY LOCATIONs**.
|
cglm functions will read from and write to **INVALID MEMORY LOCATIONSNs**.
|
||||||
|
|
||||||
ALWAYS USE SAME CONFIGURATION / OPTION for **cglm** if you have multiple projects.
|
ALWAYS USE SAME CONFIGURATION / OPTION for **cglm** if you have multiple projects.
|
||||||
|
|
||||||
@@ -43,7 +43,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,37 @@ 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
|
||||||
|
|
||||||
|
- 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
|
||||||
|
- 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):
|
||||||
|
|||||||
@@ -3,30 +3,30 @@
|
|||||||
Troubleshooting
|
Troubleshooting
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
It is possible that sometimes you may get crashes or wrong results.
|
It is possible that you may sometimes get crashes or wrong results.
|
||||||
Follow these topics
|
Follow these topics
|
||||||
|
|
||||||
Memory Allocation:
|
Memory Allocation:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Again, **cglm** doesn't alloc any memory on heap.
|
Recall that **cglm** does not alloc any memory on the heap.
|
||||||
cglm functions works like memcpy; it copies data from src,
|
cglm functions work like memcpy; they copy data from src,
|
||||||
makes calculations then copy the result to dest.
|
make calculations, then copy the result to dest.
|
||||||
|
|
||||||
You are responsible for allocation of **src** and **dest** parameters.
|
You are responsible for allocation of **src** and **dest** parameters.
|
||||||
|
|
||||||
Alignment:
|
Alignment:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
**vec4** and **mat4** types requires 16 byte alignment.
|
**vec4** and **mat4** types require 16 byte alignment.
|
||||||
These types are marked with align attribute to let compiler know about this
|
These types are marked with the align attribute to let the compiler know about this
|
||||||
requirement.
|
requirement.
|
||||||
|
|
||||||
But since MSVC (Windows) throws the error:
|
Since MSVC (Windows) throws this error:
|
||||||
|
|
||||||
**"formal parameter with requested alignment of 16 won't be aligned"**
|
**"formal parameter with requested alignment of 16 won't be aligned"**
|
||||||
|
|
||||||
The alignment attribute has been commented for MSVC
|
The alignment attribute has been commented out for MSVC
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
@@ -37,61 +37,61 @@ The alignment attribute has been commented for MSVC
|
|||||||
#endif.
|
#endif.
|
||||||
|
|
||||||
So MSVC may not know about alignment requirements when creating variables.
|
So MSVC may not know about alignment requirements when creating variables.
|
||||||
The interesting thing is that, if I remember correctly Visual Studio 2017
|
The interesting thing is that, if I remember correctly, Visual Studio 2017
|
||||||
doesn't throw the above error. So we may uncomment that line for Visual Studio 2017,
|
doesn't throw the above error. So we may uncomment that line for Visual Studio 2017,
|
||||||
you may do it yourself.
|
you may do it yourself.
|
||||||
|
|
||||||
**This MSVC issue is still in TODOs.**
|
**This MSVC issue is still in TODOs.**
|
||||||
|
|
||||||
**UPDATE:** By starting v0.4.5 cglm provides an option to disable alignment requirement.
|
**UPDATE:** Starting with v0.4.5, cglm provides an option to disable the alignment requirement.
|
||||||
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 by default. Now alignment is only required in Visual Studio 2017 version 15.6+ if the CGLM_ALL_UNALIGNED macro is not defined.
|
||||||
|
|
||||||
Crashes, Invalid Memory Access:
|
Crashes, Invalid Memory Access:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Probably you are trying to write to invalid memory location.
|
Most likely, you are trying to write to an invalid memory location.
|
||||||
|
|
||||||
You may used wrong function for what you want to do.
|
You may have used a wrong function for what you want to do.
|
||||||
|
|
||||||
For instance you may called **glm_vec4_** functions for **vec3** data type.
|
For example, you may have called a **glm_vec4_** function for a **vec3** data type.
|
||||||
It will try to write 32 byte but since **vec3** is 24 byte it should throw
|
It will try to write 32 bytes, but since **vec3** is 24 bytes, it should throw
|
||||||
memory access error or exit the app without saying anything.
|
a memory access error or exit the app without saying anything.
|
||||||
|
|
||||||
**UPDATE - IMPORTANT:**
|
**UPDATE - IMPORTANT:**
|
||||||
|
|
||||||
| On MSVC or some other compilers, if alignment is enabled (default) then double check alignment requirements if you got a crash.
|
| On MSVC or some other compilers, if alignment is enabled (default) then double check alignment requirements if you got a crash.
|
||||||
|
|
||||||
| If you send GLM_VEC4_ONE or similar macros directly to a function, it may be crashed.
|
| If you send GLM_VEC4_ONE or similar macros directly to a function, it may crash.
|
||||||
| Because compiler may not apply alignment as defined on **typedef** to that macro while passing it (on stack) to a function.
|
| Because the compiler may not apply alignment as defined on **typedef** to that macro while passing it (on stack) to a function.
|
||||||
|
|
||||||
Wrong Results:
|
Wrong Results:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Again, you may used wrong function.
|
Again, you may have used a wrong function.
|
||||||
|
|
||||||
For instance if you use **glm_normalize()** or **glm_vec3_normalize()** for **vec4**,
|
For instance if you use **glm_normalize()** or **glm_vec3_normalize()** for a **vec4**,
|
||||||
it will assume that passed param is **vec3** and will normalize it for **vec3**.
|
it will assume that the passed param is a **vec3**, and will normalize it for **vec3**.
|
||||||
Since you need to **vec4** to be normalized in your case, you will get wrong results.
|
Since you need a **vec4** to be normalized in your case, you will get wrong results.
|
||||||
|
|
||||||
Accessing vec4 type with vec3 functions is valid, you will not get any error, exception or crash.
|
Accessing a vec4 type with vec3 functions is valid, you will not get any error, exception or crash.
|
||||||
You only get wrong results if you don't know what you are doing!
|
You only get wrong results if you don't know what you are doing!
|
||||||
|
|
||||||
So be carefull, when your IDE (Xcode, Visual Studio ...) tried to autocomplete function names, READ IT :)
|
So be careful, when your IDE (Xcode, Visual Studio ...) tries to autocomplete function names, READ IT :)
|
||||||
|
|
||||||
**Also implementation may be wrong please let us know by creating an issue on Github.**
|
**Also implementation may be wrong, please let us know by creating an issue on Github.**
|
||||||
|
|
||||||
BAD_ACCESS : Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) or Similar Errors/Crashes
|
BAD_ACCESS : Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) or Similar Errors/Crashes
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
This is similar issue with alignment. For instance if you compiled **cglm** with
|
This is a similar issue with alignment. For instance if you compiled **cglm** with
|
||||||
AVX (**-mavx**, intentionally or not) and if you use **cglm** in an environment that doesn't
|
AVX (**-mavx**, intentionally or not) and if you use **cglm** in an environment that doesn't
|
||||||
support AVX (or if AVX is disabled intentionally) e.g. environment that max support SSE2/3/4,
|
support AVX (or if AVX is disabled intentionally) e.g. environment that max support SSE2/3/4,
|
||||||
then you probably get **BAD ACCESS** or similar...
|
then you probably get **BAD ACCESS** or similar...
|
||||||
|
|
||||||
Because if you compile **cglm** with AVX it aligns **mat4** with 32 byte boundary,
|
Because if you compile **cglm** with AVX it aligns **mat4** with 32 byte boundary,
|
||||||
and your project aligns that as 16 byte boundary...
|
and your project aligns that as a 16 byte boundary...
|
||||||
|
|
||||||
Check alignment, supported vector extension or simd in **cglm** and linked projects...
|
Check alignment, supported vector extension, or simd in **cglm** and linked projects...
|
||||||
|
|
||||||
Other Issues?
|
Other Issues?
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ Functions:
|
|||||||
#. :c:func:`glm_vec2_normalize`
|
#. :c:func:`glm_vec2_normalize`
|
||||||
#. :c:func:`glm_vec2_normalize_to`
|
#. :c:func:`glm_vec2_normalize_to`
|
||||||
#. :c:func:`glm_vec2_rotate`
|
#. :c:func:`glm_vec2_rotate`
|
||||||
|
#. :c:func:`glm_vec2_center`
|
||||||
#. :c:func:`glm_vec2_distance2`
|
#. :c:func:`glm_vec2_distance2`
|
||||||
#. :c:func:`glm_vec2_distance`
|
#. :c:func:`glm_vec2_distance`
|
||||||
#. :c:func:`glm_vec2_maxv`
|
#. :c:func:`glm_vec2_maxv`
|
||||||
@@ -52,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
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -116,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:
|
||||||
@@ -314,6 +317,15 @@ Functions documentation
|
|||||||
| *[in]* **axis** axis vector
|
| *[in]* **axis** axis vector
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec2_center(vec2 v1, vec2 v2, vec2 dest)
|
||||||
|
|
||||||
|
find center point of two vector
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **v1** vector1
|
||||||
|
| *[in]* **v2** vector2
|
||||||
|
| *[out]* **dest** center point
|
||||||
|
|
||||||
.. c:function:: float glm_vec2_distance2(vec2 v1, vec2 v2)
|
.. c:function:: float glm_vec2_distance2(vec2 v1, vec2 v2)
|
||||||
|
|
||||||
squared distance between two vectors
|
squared distance between two vectors
|
||||||
@@ -375,11 +387,34 @@ 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 I, vec2 N, vec2 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **I** incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec2_refract(vec2 I, vec2 N, float eta, vec2 dest)
|
||||||
|
|
||||||
|
Refraction vector using entering ray, surface normal and refraction index
|
||||||
|
|
||||||
|
If the angle between the entering ray I and the surface normal N is too
|
||||||
|
great for a given refraction index, the return value is zero
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **I** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction ( η )
|
||||||
|
| *[out]* **dest** destination: refraction result
|
||||||
|
|||||||
@@ -50,6 +50,14 @@ Functions documentation
|
|||||||
| *[in]* **val** value
|
| *[in]* **val** value
|
||||||
| *[out]* **dest** destination
|
| *[out]* **dest** destination
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_fill(vec3 v, float val)
|
||||||
|
|
||||||
|
fill a vector with specified value
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[out]* **v** vector
|
||||||
|
| *[in]* **val** value
|
||||||
|
|
||||||
.. c:function:: bool glm_vec3_eq(vec3 v, float val)
|
.. c:function:: bool glm_vec3_eq(vec3 v, float val)
|
||||||
|
|
||||||
check if vector is equal to value (without epsilon)
|
check if vector is equal to value (without epsilon)
|
||||||
|
|||||||
@@ -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,44 @@ 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 I, vec3 Nref, vec3 dest)
|
||||||
|
|
||||||
|
A vector pointing in the same direction as another
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **N** vector to orient
|
||||||
|
| *[in]* **I** incident vector
|
||||||
|
| *[in]* **Nref** reference vector
|
||||||
|
| *[out]* **dest** destination: oriented vector, pointing away from the surface.
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_reflect(vec3 I, vec3 N, vec3 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **I** incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_refract(vec3 I, vec3 N, float eta, vec3 dest)
|
||||||
|
|
||||||
|
Refraction vector using entering ray, surface normal and refraction index
|
||||||
|
|
||||||
|
If the angle between the entering ray I and the surface normal N is too
|
||||||
|
great for a given refraction index, the return value is zero
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **I** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction ( η )
|
||||||
|
| *[out]* **dest** destination: refraction result
|
||||||
|
|||||||
@@ -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,38 @@ 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:: void glm_vec4_reflect(vec4 I, vec4 N, vec4 dest)
|
||||||
|
|
||||||
|
Reflection vector using an incident ray and a surface normal
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **I** incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[out]* **dest** destination: reflection result
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec4_refract(vec4 I, vec4 N, float eta, vec4 dest)
|
||||||
|
|
||||||
|
Refraction vector using entering ray, surface normal and refraction index
|
||||||
|
|
||||||
|
If the angle between the entering ray I and the surface normal N is too
|
||||||
|
great for a given refraction index, the return value is zero
|
||||||
|
|
||||||
|
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]* **I** *❗️ normalized ❗️* incident vector
|
||||||
|
| *[in]* **N** *❗️ normalized ❗️* normal vector
|
||||||
|
| *[in]* **eta** ratio of indices of refraction ( η )
|
||||||
|
| *[out]* **dest** destination: refraction result
|
||||||
|
|||||||
271
include/cglm/aabb2d.h
Normal file
271
include/cglm/aabb2d.h
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_aabb2d_h
|
||||||
|
#define cglm_aabb2d_h
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "vec2.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]
|
||||||
|
*
|
||||||
|
* @param[in] aabb source
|
||||||
|
* @param[out] dest destination
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_copy(vec2 aabb[2], vec2 dest[2]) {
|
||||||
|
glm_vec2_copy(aabb[0], dest[0]);
|
||||||
|
glm_vec2_copy(aabb[1], dest[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief apply transform to Axis-Aligned Bounding aabb
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[in] m transform matrix
|
||||||
|
* @param[out] dest transformed bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2]) {
|
||||||
|
vec2 v[2], xa, xb, ya, yb;
|
||||||
|
|
||||||
|
glm_vec2_scale(m[0], aabb[0][0], xa);
|
||||||
|
glm_vec2_scale(m[0], aabb[1][0], xb);
|
||||||
|
|
||||||
|
glm_vec2_scale(m[1], aabb[0][1], ya);
|
||||||
|
glm_vec2_scale(m[1], aabb[1][1], yb);
|
||||||
|
|
||||||
|
/* translation + min(xa, xb) + min(ya, yb) */
|
||||||
|
glm_vec2(m[2], v[0]);
|
||||||
|
glm_vec2_minadd(xa, xb, v[0]);
|
||||||
|
glm_vec2_minadd(ya, yb, v[0]);
|
||||||
|
|
||||||
|
/* translation + max(xa, xb) + max(ya, yb) */
|
||||||
|
glm_vec2(m[2], v[1]);
|
||||||
|
glm_vec2_maxadd(xa, xb, v[1]);
|
||||||
|
glm_vec2_maxadd(ya, yb, v[1]);
|
||||||
|
|
||||||
|
glm_vec2_copy(v[0], dest[0]);
|
||||||
|
glm_vec2_copy(v[1], dest[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief merges two AABB bounding aabb and creates new one
|
||||||
|
*
|
||||||
|
* two aabb must be in same space, if one of aabb is in different space then
|
||||||
|
* you should consider to convert it's space by glm_aabb_space
|
||||||
|
*
|
||||||
|
* @param[in] aabb1 bounding aabb 1
|
||||||
|
* @param[in] aabb2 bounding aabb 2
|
||||||
|
* @param[out] dest merged bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_merge(vec2 aabb1[2], vec2 aabb2[2], vec2 dest[2]) {
|
||||||
|
dest[0][0] = glm_min(aabb1[0][0], aabb2[0][0]);
|
||||||
|
dest[0][1] = glm_min(aabb1[0][1], aabb2[0][1]);
|
||||||
|
|
||||||
|
dest[1][0] = glm_max(aabb1[1][0], aabb2[1][0]);
|
||||||
|
dest[1][1] = glm_max(aabb1[1][1], aabb2[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief crops a bounding aabb with another one.
|
||||||
|
*
|
||||||
|
* this could be useful for gettng a baabb which fits with view frustum and
|
||||||
|
* object bounding aabbes. In this case you crop view frustum aabb with objects
|
||||||
|
* aabb
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb 1
|
||||||
|
* @param[in] cropAabb crop aabb
|
||||||
|
* @param[out] dest cropped bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2]) {
|
||||||
|
dest[0][0] = glm_max(aabb[0][0], cropAabb[0][0]);
|
||||||
|
dest[0][1] = glm_max(aabb[0][1], cropAabb[0][1]);
|
||||||
|
|
||||||
|
dest[1][0] = glm_min(aabb[1][0], cropAabb[1][0]);
|
||||||
|
dest[1][1] = glm_min(aabb[1][1], cropAabb[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief crops a bounding aabb with another one.
|
||||||
|
*
|
||||||
|
* this could be useful for gettng a baabb which fits with view frustum and
|
||||||
|
* object bounding aabbes. In this case you crop view frustum aabb with objects
|
||||||
|
* aabb
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[in] cropAabb crop aabb
|
||||||
|
* @param[in] clampAabb minimum aabb
|
||||||
|
* @param[out] dest cropped bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_crop_until(vec2 aabb[2],
|
||||||
|
vec2 cropAabb[2],
|
||||||
|
vec2 clampAabb[2],
|
||||||
|
vec2 dest[2]) {
|
||||||
|
glm_aabb2d_crop(aabb, cropAabb, dest);
|
||||||
|
glm_aabb2d_merge(clampAabb, dest, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief invalidate AABB min and max values
|
||||||
|
*
|
||||||
|
* @param[in, out] aabb bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_invalidate(vec2 aabb[2]) {
|
||||||
|
glm_vec2_fill(aabb[0], FLT_MAX);
|
||||||
|
glm_vec2_fill(aabb[1], -FLT_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if AABB is valid or not
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_aabb2d_isvalid(vec2 aabb[2]) {
|
||||||
|
return glm_vec2_max(aabb[0]) != FLT_MAX
|
||||||
|
&& glm_vec2_min(aabb[1]) != -FLT_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief distance between of min and max
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_aabb2d_diag(vec2 aabb[2]) {
|
||||||
|
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
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
float
|
||||||
|
glm_aabb2d_radius(vec2 aabb[2]) {
|
||||||
|
return glm_aabb2d_diag(aabb) * 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief computes center point of AABB
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[out] dest center of bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_aabb2d_center(vec2 aabb[2], vec2 dest) {
|
||||||
|
glm_vec2_center(aabb[0], aabb[1], dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if two AABB intersects
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[in] other other bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_aabb2d_aabb(vec2 aabb[2], vec2 other[2]) {
|
||||||
|
return (aabb[0][0] <= other[1][0] && aabb[1][0] >= other[0][0])
|
||||||
|
&& (aabb[0][1] <= other[1][1] && aabb[1][1] >= other[0][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if AABB intersects with a circle
|
||||||
|
*
|
||||||
|
* Circle Representation in cglm: [center.x, center.y, radii]
|
||||||
|
*
|
||||||
|
* @param[in] aabb solid bounding aabb
|
||||||
|
* @param[in] c solid circle
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_aabb2d_circle(vec2 aabb[2], vec3 c) {
|
||||||
|
float dmin;
|
||||||
|
int a, b;
|
||||||
|
|
||||||
|
a = (c[0] < aabb[0][0]) + (c[0] > aabb[1][0]);
|
||||||
|
b = (c[1] < aabb[0][1]) + (c[1] > aabb[1][1]);
|
||||||
|
|
||||||
|
dmin = glm_pow2((c[0] - aabb[!(a - 1)][0]) * (a != 0))
|
||||||
|
+ glm_pow2((c[1] - aabb[!(b - 1)][1]) * (b != 0));
|
||||||
|
|
||||||
|
return dmin <= glm_pow2(c[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if point is inside of AABB
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[in] point point
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_aabb2d_point(vec2 aabb[2], vec2 point) {
|
||||||
|
return (point[0] >= aabb[0][0] && point[0] <= aabb[1][0])
|
||||||
|
&& (point[1] >= aabb[0][1] && point[1] <= aabb[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if AABB contains other AABB
|
||||||
|
*
|
||||||
|
* @param[in] aabb bounding aabb
|
||||||
|
* @param[in] other other bounding aabb
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_aabb2d_contains(vec2 aabb[2], vec2 other[2]) {
|
||||||
|
return (aabb[0][0] <= other[0][0] && aabb[1][0] >= other[1][0])
|
||||||
|
&& (aabb[0][1] <= other[0][1] && aabb[1][1] >= other[1][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglm_aabb2d_h */
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ extern "C" {
|
|||||||
#include "call/euler.h"
|
#include "call/euler.h"
|
||||||
#include "call/plane.h"
|
#include "call/plane.h"
|
||||||
#include "call/frustum.h"
|
#include "call/frustum.h"
|
||||||
|
#include "call/aabb2d.h"
|
||||||
#include "call/box.h"
|
#include "call/box.h"
|
||||||
#include "call/io.h"
|
#include "call/io.h"
|
||||||
#include "call/project.h"
|
#include "call/project.h"
|
||||||
|
|||||||
91
include/cglm/call/aabb2d.h
Normal file
91
include/cglm/call/aabb2d.h
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglmc_aabb2d_h
|
||||||
|
#define cglmc_aabb2d_h
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
void
|
||||||
|
glmc_aabb2d_copy(vec2 aabb[2], vec2 dest[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_transform(vec2 aabb[2], mat3 m, vec2 dest[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_merge(vec2 aabb1[2], vec2 aabb2[2], vec2 dest[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_crop(vec2 aabb[2], vec2 cropAabb[2], vec2 dest[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_crop_until(vec2 aabb[2],
|
||||||
|
vec2 cropAabb[2],
|
||||||
|
vec2 clampAabb[2],
|
||||||
|
vec2 dest[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_invalidate(vec2 aabb[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_aabb2d_isvalid(vec2 aabb[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_aabb2d_diag(vec2 aabb[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_sizev(vec2 aabb[2], vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
float
|
||||||
|
glmc_aabb2d_radius(vec2 aabb[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_aabb2d_center(vec2 aabb[2], vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_aabb2d_aabb(vec2 aabb[2], vec2 other[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_aabb2d_point(vec2 aabb[2], vec2 point);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_aabb2d_contains(vec2 aabb[2], vec2 other[2]);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_aabb2d_circle(vec2 aabb[2], vec3 s);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* cglmc_aabb2d_h */
|
||||||
|
|
||||||
|
|
||||||
@@ -49,6 +49,31 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest);
|
glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_xyz_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_xzy_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_yxz_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_yzx_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_zxy_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_euler_zyx_quat(vec3 angles, versor dest);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -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,82 @@ 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
|
||||||
|
void
|
||||||
|
glmc_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_addadds(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subadds(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_muladd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_muladds(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_maxadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_minadd(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subsub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_subsubs(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_addsub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_addsubs(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_mulsub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_mulsubs(ivec2 a, int s, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_maxsub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_minsub(ivec2 a, ivec2 b, ivec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
int
|
int
|
||||||
glmc_ivec2_distance2(ivec2 a, ivec2 b);
|
glmc_ivec2_distance2(ivec2 a, ivec2 b);
|
||||||
@@ -61,6 +145,18 @@ CGLM_EXPORT
|
|||||||
float
|
float
|
||||||
glmc_ivec2_distance(ivec2 a, ivec2 b);
|
glmc_ivec2_distance(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec2_fill(ivec2 v, int val);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_ivec2_eq(ivec2 v, int val);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_ivec2_eqv(ivec2 a, ivec2 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest);
|
glmc_ivec2_maxv(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,82 @@ 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
|
||||||
|
void
|
||||||
|
glmc_ivec3_addadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_addadds(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subadds(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_muladd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_muladds(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_maxadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_minadd(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subsub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_subsubs(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_addsub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_addsubs(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_mulsub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_mulsubs(ivec3 a, int s, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_maxsub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_minsub(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
int
|
int
|
||||||
glmc_ivec3_distance2(ivec3 a, ivec3 b);
|
glmc_ivec3_distance2(ivec3 a, ivec3 b);
|
||||||
@@ -61,6 +149,18 @@ CGLM_EXPORT
|
|||||||
float
|
float
|
||||||
glmc_ivec3_distance(ivec3 a, ivec3 b);
|
glmc_ivec3_distance(ivec3 a, ivec3 b);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec3_fill(ivec3 v, int val);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_ivec3_eq(ivec3 v, int val);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
bool
|
||||||
|
glmc_ivec3_eqv(ivec3 a, ivec3 b);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest);
|
glmc_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest);
|
||||||
|
|||||||
@@ -53,6 +53,70 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_ivec4_scale(ivec4 v, int s, ivec4 dest);
|
glmc_ivec4_scale(ivec4 v, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_addadd(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_addadds(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subadd(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subadds(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_muladd(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_muladds(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_maxadd(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_minadd(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subsub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_subsubs(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_addsub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_addsubs(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_mulsub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_mulsubs(ivec4 a, int s, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_maxsub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_ivec4_minsub(ivec4 a, ivec4 b, ivec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
int
|
int
|
||||||
glmc_ivec4_distance2(ivec4 a, ivec4 b);
|
glmc_ivec4_distance2(ivec4 a, ivec4 b);
|
||||||
|
|||||||
@@ -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,7 +23,7 @@ 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
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ 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
|
||||||
|
|||||||
@@ -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,7 +23,7 @@ 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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -105,6 +105,30 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest);
|
glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_subsub(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_addsub(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_mulsub(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_mulsubs(vec2 a, float s, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_maxsub(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_minsub(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec2_negate_to(vec2 v, vec2 dest);
|
glmc_vec2_negate_to(vec2 v, vec2 dest);
|
||||||
@@ -125,6 +149,10 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec2_rotate(vec2 v, float angle, vec2 dest);
|
glmc_vec2_rotate(vec2 v, float angle, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_center(vec2 a, vec2 b, vec2 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec2_distance2(vec2 a, vec2 b);
|
glmc_vec2_distance2(vec2 a, vec2 b);
|
||||||
@@ -167,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 I, vec2 N, vec2 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec2_refract(vec2 I, vec2 N, float eta, vec2 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,6 +132,30 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest);
|
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_subsub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_addsub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_mulsub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_mulsubs(vec3 a, float s, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_maxsub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_minsub(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_negate(vec3 v);
|
glmc_vec3_negate(vec3 v);
|
||||||
@@ -308,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 I, vec3 Nref, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_reflect(vec3 I, vec3 N, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_refract(vec3 I, vec3 N, float eta, vec3 dest);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,6 +133,30 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
|
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_subsub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_addsub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_mulsub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_mulsubs(vec4 a, float s, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_maxsub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_minsub(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_negate(vec4 v);
|
glmc_vec4_negate(vec4 v);
|
||||||
@@ -285,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 I, vec4 N, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_refract(vec4 I, 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
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "quat.h"
|
#include "quat.h"
|
||||||
#include "euler.h"
|
#include "euler.h"
|
||||||
#include "plane.h"
|
#include "plane.h"
|
||||||
|
#include "aabb2d.h"
|
||||||
#include "box.h"
|
#include "box.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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].
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -30,6 +30,12 @@
|
|||||||
CGLM_INLINE void glm_euler_by_order(vec3 angles,
|
CGLM_INLINE void glm_euler_by_order(vec3 angles,
|
||||||
glm_euler_seq ord,
|
glm_euler_seq ord,
|
||||||
mat4 dest);
|
mat4 dest);
|
||||||
|
CGLM_INLINE void glm_euler_xyz_quat(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_xzy_quat(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yxz_quat(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yzx_quat(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zxy_quat(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zyx_quat(vec3 angles, versor dest);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_euler_h
|
#ifndef cglm_euler_h
|
||||||
@@ -37,6 +43,47 @@
|
|||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
# include "handed/euler_to_quat_lh.h"
|
||||||
|
#else
|
||||||
|
# include "handed/euler_to_quat_rh.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CGLM_CLIPSPACE_INCLUDE_ALL
|
||||||
|
# if CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_ZO
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_LH_NO
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_ZO
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# elif CGLM_CONFIG_CLIP_CONTROL == CGLM_CLIP_CONTROL_RH_NO
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# include "clipspace/ortho_lh_zo.h"
|
||||||
|
# include "clipspace/persp_lh_zo.h"
|
||||||
|
# include "clipspace/ortho_lh_no.h"
|
||||||
|
# include "clipspace/persp_lh_no.h"
|
||||||
|
# include "clipspace/ortho_rh_zo.h"
|
||||||
|
# include "clipspace/persp_rh_zo.h"
|
||||||
|
# include "clipspace/ortho_rh_no.h"
|
||||||
|
# include "clipspace/persp_rh_no.h"
|
||||||
|
# include "clipspace/view_lh_zo.h"
|
||||||
|
# include "clipspace/view_lh_no.h"
|
||||||
|
# include "clipspace/view_rh_zo.h"
|
||||||
|
# include "clipspace/view_rh_no.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* if you have axis order like vec3 orderVec = [0, 1, 2] or [0, 2, 1]...
|
* if you have axis order like vec3 orderVec = [0, 1, 2] or [0, 2, 1]...
|
||||||
* vector then you can convert it to this enum by doing this:
|
* vector then you can convert it to this enum by doing this:
|
||||||
@@ -188,7 +235,6 @@ glm_euler_xzy(vec3 angles, mat4 dest) {
|
|||||||
dest[3][3] = 1.0f;
|
dest[3][3] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief build rotation matrix from euler angles
|
* @brief build rotation matrix from euler angles
|
||||||
*
|
*
|
||||||
@@ -448,4 +494,108 @@ glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest) {
|
|||||||
dest[3][3] = 1.0f;
|
dest[3][3] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x y z order (roll pitch yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xyz_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_xyz_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_xyz_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x z y order (roll yaw pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xzy_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_xzy_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_xzy_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y x z order (pitch roll yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yxz_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_yxz_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_yxz_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y z x order (pitch yaw roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yzx_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_yzx_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_yzx_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z x y order (yaw roll pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zxy_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_zxy_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_zxy_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z y x order (yaw pitch roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zyx_quat(vec3 angles, versor dest) {
|
||||||
|
#ifdef CGLM_FORCE_LEFT_HANDED
|
||||||
|
glm_euler_zyx_quat_lh(angles, dest);
|
||||||
|
#else
|
||||||
|
glm_euler_zyx_quat_rh(angles, dest);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* cglm_euler_h */
|
#endif /* cglm_euler_h */
|
||||||
|
|||||||
167
include/cglm/handed/euler_to_quat_lh.h
Normal file
167
include/cglm/handed/euler_to_quat_lh.h
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_euler_xyz_quat_lh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_xzy_quat_lh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yxz_quat_lh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yzx_quat_lh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zxy_quat_lh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zyx_quat_lh(vec3 angles, versor dest);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Things to note:
|
||||||
|
The only difference between euler to quat rh vs lh is that the zsin part is negative
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_euler_to_quat_lh_h
|
||||||
|
#define cglm_euler_to_quat_lh_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x y z order in left hand (roll pitch yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xyz_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = xc * ys * zs + xs * yc * zc;
|
||||||
|
dest[1] = xc * ys * zc - xs * yc * zs;
|
||||||
|
dest[2] = xc * yc * zs + xs * ys * zc;
|
||||||
|
dest[3] = xc * yc * zc - xs * ys * zs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x z y order in left hand (roll yaw pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xzy_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = -xc * zs * ys + xs * zc * yc;
|
||||||
|
dest[1] = xc * zc * ys - xs * zs * yc;
|
||||||
|
dest[2] = xc * zs * yc + xs * zc * ys;
|
||||||
|
dest[3] = xc * zc * yc + xs * zs * ys;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y x z order in left hand (pitch roll yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yxz_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = yc * xs * zc + ys * xc * zs;
|
||||||
|
dest[1] = -yc * xs * zs + ys * xc * zc;
|
||||||
|
dest[2] = yc * xc * zs - ys * xs * zc;
|
||||||
|
dest[3] = yc * xc * zc + ys * xs * zs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y z x order in left hand (pitch yaw roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yzx_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = yc * zc * xs + ys * zs * xc;
|
||||||
|
dest[1] = yc * zs * xs + ys * zc * xc;
|
||||||
|
dest[2] = yc * zs * xc - ys * zc * xs;
|
||||||
|
dest[3] = yc * zc * xc - ys * zs * xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z x y order in left hand (yaw roll pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zxy_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = zc * xs * yc - zs * xc * ys;
|
||||||
|
dest[1] = zc * xc * ys + zs * xs * yc;
|
||||||
|
dest[2] = zc * xs * ys + zs * xc * yc;
|
||||||
|
dest[3] = zc * xc * yc - zs * xs * ys;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z y x order in left hand (yaw pitch roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zyx_quat_lh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = -sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = zc * yc * xs - zs * ys * xc;
|
||||||
|
dest[1] = zc * ys * xc + zs * yc * xs;
|
||||||
|
dest[2] = -zc * ys * xs + zs * yc * xc;
|
||||||
|
dest[3] = zc * yc * xc + zs * ys * xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*cglm_euler_to_quat_lh_h*/
|
||||||
170
include/cglm/handed/euler_to_quat_rh.h
Normal file
170
include/cglm/handed/euler_to_quat_rh.h
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE void glm_euler_xyz_quat_rh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_xzy_quat_rh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yxz_quat_rh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_yzx_quat_rh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zxy_quat_rh(vec3 angles, versor dest);
|
||||||
|
CGLM_INLINE void glm_euler_zyx_quat_rh(vec3 angles, versor dest);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Things to note:
|
||||||
|
The only difference between euler to quat rh vs lh is that the zsin part is negative
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglm_euler_to_quat_rh_h
|
||||||
|
#define cglm_euler_to_quat_rh_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x y z order in right hand (roll pitch yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xyz_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = xc * ys * zs + xs * yc * zc;
|
||||||
|
dest[1] = xc * ys * zc - xs * yc * zs;
|
||||||
|
dest[2] = xc * yc * zs + xs * ys * zc;
|
||||||
|
dest[3] = xc * yc * zc - xs * ys * zs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in x z y order in right hand (roll yaw pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_xzy_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = -xc * zs * ys + xs * zc * yc;
|
||||||
|
dest[1] = xc * zc * ys - xs * zs * yc;
|
||||||
|
dest[2] = xc * zs * yc + xs * zc * ys;
|
||||||
|
dest[3] = xc * zc * yc + xs * zs * ys;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y x z order in right hand (pitch roll yaw)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yxz_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = yc * xs * zc + ys * xc * zs;
|
||||||
|
dest[1] = -yc * xs * zs + ys * xc * zc;
|
||||||
|
dest[2] = yc * xc * zs - ys * xs * zc;
|
||||||
|
dest[3] = yc * xc * zc + ys * xs * zs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in y z x order in right hand (pitch yaw roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_yzx_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = yc * zc * xs + ys * zs * xc;
|
||||||
|
dest[1] = yc * zs * xs + ys * zc * xc;
|
||||||
|
dest[2] = yc * zs * xc - ys * zc * xs;
|
||||||
|
dest[3] = yc * zc * xc - ys * zs * xs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z x y order in right hand (yaw roll pitch)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zxy_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = zc * xs * yc - zs * xc * ys;
|
||||||
|
dest[1] = zc * xc * ys + zs * xs * yc;
|
||||||
|
dest[2] = zc * xs * ys + zs * xc * yc;
|
||||||
|
dest[3] = zc * xc * yc - zs * xs * ys;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion using rotation angles and does
|
||||||
|
* rotations in z y x order in right hand (yaw pitch roll)
|
||||||
|
*
|
||||||
|
* @param[in] angles angles x y z (radians)
|
||||||
|
* @param[out] dest quaternion
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_euler_zyx_quat_rh(vec3 angles, versor dest) {
|
||||||
|
float xc, yc, zc,
|
||||||
|
xs, ys, zs;
|
||||||
|
|
||||||
|
xs = sinf(angles[0] * 0.5f); xc = cosf(angles[0] * 0.5f);
|
||||||
|
ys = sinf(angles[1] * 0.5f); yc = cosf(angles[1] * 0.5f);
|
||||||
|
zs = sinf(angles[2] * 0.5f); zc = cosf(angles[2] * 0.5f);
|
||||||
|
|
||||||
|
dest[0] = zc * yc * xs - zs * ys * xc;
|
||||||
|
dest[1] = zc * ys * xc + zs * yc * xs;
|
||||||
|
dest[2] = -zc * ys * xs + zs * yc * xc;
|
||||||
|
dest[3] = zc * yc * xc + zs * ys * xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /*cglm_euler_to_quat_rh_h*/
|
||||||
@@ -10,8 +10,11 @@
|
|||||||
CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream);
|
CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream);
|
||||||
CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream);
|
CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream);
|
||||||
CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream);
|
CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream);
|
||||||
|
CGLM_INLINE void glm_ivec4_print(ivec4 vec, FILE *ostream);
|
||||||
CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream);
|
CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream);
|
||||||
CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream);
|
CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream);
|
||||||
|
CGLM_INLINE void glm_vec2_print(vec2 vec, FILE *ostream);
|
||||||
|
CGLM_INLINE void glm_ivec2_print(ivec2 vec, FILE *ostream);
|
||||||
CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream);
|
CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream);
|
||||||
CGLM_INLINE void glm_arch_print(FILE *ostream);
|
CGLM_INLINE void glm_arch_print(FILE *ostream);
|
||||||
*/
|
*/
|
||||||
@@ -35,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)
|
||||||
|
|
||||||
@@ -261,6 +264,24 @@ glm_vec4_print(vec4 vec,
|
|||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_print(ivec4 vec,
|
||||||
|
FILE * __restrict ostream) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
#define m 4
|
||||||
|
|
||||||
|
fprintf(ostream, "Vector (int%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
|
for (i = 0; i < m; i++)
|
||||||
|
fprintf(ostream, " % d", vec[i]);
|
||||||
|
|
||||||
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
|
#undef m
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_print(vec3 vec,
|
glm_vec3_print(vec3 vec,
|
||||||
@@ -323,6 +344,24 @@ glm_vec2_print(vec2 vec,
|
|||||||
#undef m
|
#undef m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_print(ivec2 vec,
|
||||||
|
FILE * __restrict ostream) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
#define m 2
|
||||||
|
|
||||||
|
fprintf(ostream, "Vector (int%d): " CGLM_PRINT_COLOR "\n (", m);
|
||||||
|
|
||||||
|
for (i = 0; i < m; i++)
|
||||||
|
fprintf(ostream, " % d", vec[i]);
|
||||||
|
|
||||||
|
fprintf(ostream, " )" CGLM_PRINT_COLOR_RESET "\n\n");
|
||||||
|
|
||||||
|
#undef m
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_versor_print(versor vec,
|
glm_versor_print(versor vec,
|
||||||
@@ -387,9 +426,11 @@ glm_aabb_print(vec3 bbox[2],
|
|||||||
#define glm_mat3_print(v, s) (void)v; (void)s;
|
#define glm_mat3_print(v, s) (void)v; (void)s;
|
||||||
#define glm_mat2_print(v, s) (void)v; (void)s;
|
#define glm_mat2_print(v, s) (void)v; (void)s;
|
||||||
#define glm_vec4_print(v, s) (void)v; (void)s;
|
#define glm_vec4_print(v, s) (void)v; (void)s;
|
||||||
|
#define glm_ivec4_print(v, s) (void)v; (void)s;
|
||||||
#define glm_vec3_print(v, s) (void)v; (void)s;
|
#define glm_vec3_print(v, s) (void)v; (void)s;
|
||||||
#define glm_ivec3_print(v, s) (void)v; (void)s;
|
#define glm_ivec3_print(v, s) (void)v; (void)s;
|
||||||
#define glm_vec2_print(v, s) (void)v; (void)s;
|
#define glm_vec2_print(v, s) (void)v; (void)s;
|
||||||
|
#define glm_ivec2_print(v, s) (void)v; (void)s;
|
||||||
#define glm_versor_print(v, s) (void)v; (void)s;
|
#define glm_versor_print(v, s) (void)v; (void)s;
|
||||||
#define glm_aabb_print(v, t, s) (void)v; (void)t; (void)s;
|
#define glm_aabb_print(v, t, s) (void)v; (void)t; (void)s;
|
||||||
#define glm_arch_print(s) (void)s;
|
#define glm_arch_print(s) (void)s;
|
||||||
|
|||||||
@@ -17,14 +17,38 @@
|
|||||||
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_addadds(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_subadds(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_muladd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_muladds(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_maxadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_minadd(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_subsub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_subsubs(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_addsub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_addsubs(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_mulsub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_mulsubs(ivec2 a, int s, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_maxsub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
|
CGLM_INLINE void glm_ivec2_minsub(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
CGLM_INLINE int glm_ivec2_distance2(ivec2 a, ivec2 b)
|
||||||
CGLM_INLINE float glm_ivec2_distance(ivec2 a, ivec2 b)
|
CGLM_INLINE float glm_ivec2_distance(ivec2 a, ivec2 b)
|
||||||
|
CGLM_INLINE void glm_ivec2_fill(ivec2 v, int val);
|
||||||
|
CGLM_INLINE bool glm_ivec2_eq(ivec2 v, int val);
|
||||||
|
CGLM_INLINE bool glm_ivec2_eqv(ivec2 a, ivec2 b);
|
||||||
CGLM_INLINE void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest)
|
CGLM_INLINE void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest)
|
||||||
CGLM_INLINE void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal)
|
CGLM_INLINE void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal)
|
||||||
@@ -35,6 +59,7 @@
|
|||||||
#define cglm_ivec2_h
|
#define cglm_ivec2_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#define GLM_IVEC2_ONE_INIT {1, 1}
|
#define GLM_IVEC2_ONE_INIT {1, 1}
|
||||||
#define GLM_IVEC2_ZERO_INIT {0, 0}
|
#define GLM_IVEC2_ZERO_INIT {0, 0}
|
||||||
@@ -90,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]
|
||||||
*
|
*
|
||||||
@@ -149,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
|
||||||
*/
|
*/
|
||||||
@@ -174,6 +229,304 @@ 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]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_addadd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] += a[0] + b[0];
|
||||||
|
dest[1] += a[1] + b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar [s] onto vector [a] and add result to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a + s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_addadds(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] += a[0] + s;
|
||||||
|
dest[1] += a[1] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_subadd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] += a[0] - b[0];
|
||||||
|
dest[1] += a[1] - b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar [s] from vector [a] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_subadds(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] += a[0] - s;
|
||||||
|
dest[1] += a[1] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_muladd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] += a[0] * b[0];
|
||||||
|
dest[1] += a[1] * b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar [s] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_muladds(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] += a[0] * s;
|
||||||
|
dest[1] += a[1] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_maxadd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] += glm_imax(a[0], b[0]);
|
||||||
|
dest[1] += glm_imax(a[1], b[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_minadd(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] += glm_imin(a[0], b[0]);
|
||||||
|
dest[1] += glm_imin(a[1], b[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_subsub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] - b[0];
|
||||||
|
dest[1] -= a[1] - b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_subsubs(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] - s;
|
||||||
|
dest[1] -= a[1] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_addsub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] + b[0];
|
||||||
|
dest[1] -= a[1] + b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar [s] to vector [a] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_addsubs(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] + s;
|
||||||
|
dest[1] -= a[1] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_mulsub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] * b[0];
|
||||||
|
dest[1] -= a[1] * b[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_mulsubs(ivec2 a, int s, ivec2 dest) {
|
||||||
|
dest[0] -= a[0] * s;
|
||||||
|
dest[1] -= a[1] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_maxsub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] -= glm_imax(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imax(a[1], b[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_minsub(ivec2 a, ivec2 b, ivec2 dest) {
|
||||||
|
dest[0] -= glm_imin(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imin(a[1], b[1]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief squared distance between two vectors
|
* @brief squared distance between two vectors
|
||||||
*
|
*
|
||||||
@@ -203,6 +556,44 @@ glm_ivec2_distance(ivec2 a, ivec2 b) {
|
|||||||
return sqrtf((float)glm_ivec2_distance2(a, b));
|
return sqrtf((float)glm_ivec2_distance2(a, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief fill a vector with specified value
|
||||||
|
*
|
||||||
|
* @param[out] v dest
|
||||||
|
* @param[in] val value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec2_fill(ivec2 v, int val) {
|
||||||
|
v[0] = v[1] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if vector is equal to value
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] val value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_ivec2_eq(ivec2 v, int val) {
|
||||||
|
return v[0] == val && v[0] == v[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if vector is equal to another
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_ivec2_eqv(ivec2 a, ivec2 b) {
|
||||||
|
return a[0] == b[0]
|
||||||
|
&& a[1] == b[1];
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief set each member of dest to greater of vector a and b
|
* @brief set each member of dest to greater of vector a and b
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -17,14 +17,39 @@
|
|||||||
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_addadds(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_subadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_subadds(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_muladd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_muladds(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_maxadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_minadd(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_subsub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_subsubs(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_addsub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_addsubs(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_mulsub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_mulsubs(ivec3 a, int s, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_maxsub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
|
CGLM_INLINE void glm_ivec3_minsub(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
CGLM_INLINE int glm_ivec3_distance2(ivec3 a, ivec3 b)
|
||||||
CGLM_INLINE float glm_ivec3_distance(ivec3 a, ivec3 b)
|
CGLM_INLINE float glm_ivec3_distance(ivec3 a, ivec3 b)
|
||||||
|
CGLM_INLINE void glm_ivec3_fill(ivec3 v, int val);
|
||||||
|
CGLM_INLINE bool glm_ivec3_eq(ivec3 v, int val);
|
||||||
|
CGLM_INLINE bool glm_ivec3_eqv(ivec3 a, ivec3 b);
|
||||||
CGLM_INLINE void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest)
|
CGLM_INLINE void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest)
|
||||||
CGLM_INLINE void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal)
|
CGLM_INLINE void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal)
|
||||||
@@ -35,6 +60,7 @@
|
|||||||
#define cglm_ivec3_h
|
#define cglm_ivec3_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#define GLM_IVEC3_ONE_INIT {1, 1, 1}
|
#define GLM_IVEC3_ONE_INIT {1, 1, 1}
|
||||||
#define GLM_IVEC3_ZERO_INIT {0, 0, 0}
|
#define GLM_IVEC3_ZERO_INIT {0, 0, 0}
|
||||||
@@ -92,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]
|
||||||
*
|
*
|
||||||
@@ -155,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
|
||||||
*/
|
*/
|
||||||
@@ -182,6 +253,325 @@ 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]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_addadd(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 scalar [s] onto vector [a] and add result to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a + s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_addadds(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] += a[0] + s;
|
||||||
|
dest[1] += a[1] + s;
|
||||||
|
dest[2] += a[2] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_subadd(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 subtract scalar [s] from vector [a] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_subadds(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] += a[0] - s;
|
||||||
|
dest[1] += a[1] - s;
|
||||||
|
dest[2] += a[2] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_muladd(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 multiply vector [a] with scalar [s] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_muladds(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] += a[0] * s;
|
||||||
|
dest[1] += a[1] * s;
|
||||||
|
dest[2] += a[2] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_maxadd(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] += glm_imax(a[0], b[0]);
|
||||||
|
dest[1] += glm_imax(a[1], b[1]);
|
||||||
|
dest[2] += glm_imax(a[2], b[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_minadd(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] += glm_imin(a[0], b[0]);
|
||||||
|
dest[1] += glm_imin(a[1], b[1]);
|
||||||
|
dest[2] += glm_imin(a[2], b[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_subsub(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 subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_subsubs(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] -= a[0] - s;
|
||||||
|
dest[1] -= a[1] - s;
|
||||||
|
dest[2] -= a[2] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_addsub(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 scalar [s] to vector [a] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_addsubs(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] -= a[0] + s;
|
||||||
|
dest[1] -= a[1] + s;
|
||||||
|
dest[2] -= a[2] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_mulsub(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 multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_mulsubs(ivec3 a, int s, ivec3 dest) {
|
||||||
|
dest[0] -= a[0] * s;
|
||||||
|
dest[1] -= a[1] * s;
|
||||||
|
dest[2] -= a[2] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_maxsub(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] -= glm_imax(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imax(a[1], b[1]);
|
||||||
|
dest[2] -= glm_imax(a[2], b[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_minsub(ivec3 a, ivec3 b, ivec3 dest) {
|
||||||
|
dest[0] -= glm_imin(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imin(a[1], b[1]);
|
||||||
|
dest[2] -= glm_imin(a[2], b[2]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief squared distance between two vectors
|
* @brief squared distance between two vectors
|
||||||
*
|
*
|
||||||
@@ -212,6 +602,44 @@ glm_ivec3_distance(ivec3 a, ivec3 b) {
|
|||||||
return sqrtf((float)glm_ivec3_distance2(a, b));
|
return sqrtf((float)glm_ivec3_distance2(a, b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief fill a vector with specified value
|
||||||
|
*
|
||||||
|
* @param[out] v dest
|
||||||
|
* @param[in] val value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec3_fill(ivec3 v, int val) {
|
||||||
|
v[0] = v[1] = v[2] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if vector is equal to value
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] val value
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_ivec3_eq(ivec3 v, int val) {
|
||||||
|
return v[0] == val && v[0] == v[1] && v[0] == v[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief check if vector is equal to another
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
bool
|
||||||
|
glm_ivec3_eqv(ivec3 a, ivec3 b) {
|
||||||
|
return a[0] == b[0]
|
||||||
|
&& a[1] == b[1]
|
||||||
|
&& a[2] == b[2];
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief set each member of dest to greater of vector a and b
|
* @brief set each member of dest to greater of vector a and b
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -23,6 +23,22 @@
|
|||||||
CGLM_INLINE void glm_ivec4_subs(ivec4 v, int s, ivec4 dest)
|
CGLM_INLINE void glm_ivec4_subs(ivec4 v, int s, ivec4 dest)
|
||||||
CGLM_INLINE void glm_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest)
|
CGLM_INLINE void glm_ivec4_mul(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
CGLM_INLINE void glm_ivec4_scale(ivec4 v, int s, ivec4 dest)
|
CGLM_INLINE void glm_ivec4_scale(ivec4 v, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_addadd(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_addadds(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_subadd(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_subadds(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_muladd(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_muladds(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_maxadd(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_minadd(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_subsub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_subsubs(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_addsub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_addsubs(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_mulsub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_mulsubs(ivec4 a, int s, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_maxsub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
|
CGLM_INLINE void glm_ivec4_minsub(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
CGLM_INLINE int glm_ivec4_distance2(ivec4 a, ivec4 b)
|
CGLM_INLINE int glm_ivec4_distance2(ivec4 a, ivec4 b)
|
||||||
CGLM_INLINE float glm_ivec4_distance(ivec4 a, ivec4 b)
|
CGLM_INLINE float glm_ivec4_distance(ivec4 a, ivec4 b)
|
||||||
CGLM_INLINE void glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest)
|
CGLM_INLINE void glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest)
|
||||||
@@ -35,6 +51,7 @@
|
|||||||
#define cglm_ivec4_h
|
#define cglm_ivec4_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#define GLM_IVEC4_ONE_INIT {1, 1, 1, 1}
|
#define GLM_IVEC4_ONE_INIT {1, 1, 1, 1}
|
||||||
#define GLM_IVEC4_ZERO_INIT {0, 0, 0, 0}
|
#define GLM_IVEC4_ZERO_INIT {0, 0, 0, 0}
|
||||||
@@ -162,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
|
||||||
*/
|
*/
|
||||||
@@ -191,6 +208,294 @@ glm_ivec4_scale(ivec4 v, int s, ivec4 dest) {
|
|||||||
dest[3] = v[3] * s;
|
dest[3] = v[3] * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] with vector [b] and add result to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_addadd(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] += a[0] + b[0];
|
||||||
|
dest[1] += a[1] + b[1];
|
||||||
|
dest[2] += a[2] + b[2];
|
||||||
|
dest[3] += a[3] + b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar [s] onto vector [a] and add result to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a + s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_addadds(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] += a[0] + s;
|
||||||
|
dest[1] += a[1] + s;
|
||||||
|
dest[2] += a[2] + s;
|
||||||
|
dest[3] += a[3] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_subadd(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] += a[0] - b[0];
|
||||||
|
dest[1] += a[1] - b[1];
|
||||||
|
dest[2] += a[2] - b[2];
|
||||||
|
dest[3] += a[3] - b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar [s] from vector [a] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_subadds(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] += a[0] - s;
|
||||||
|
dest[1] += a[1] - s;
|
||||||
|
dest[2] += a[2] - s;
|
||||||
|
dest[3] += a[3] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with vector [b] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_muladd(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] += a[0] * b[0];
|
||||||
|
dest[1] += a[1] * b[1];
|
||||||
|
dest[2] += a[2] * b[2];
|
||||||
|
dest[3] += a[3] * b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar [s] and add result to [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_muladds(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] += a[0] * s;
|
||||||
|
dest[1] += a[1] * s;
|
||||||
|
dest[2] += a[2] * s;
|
||||||
|
dest[3] += a[3] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add maximum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_maxadd(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] += glm_imax(a[0], b[0]);
|
||||||
|
dest[1] += glm_imax(a[1], b[1]);
|
||||||
|
dest[2] += glm_imax(a[2], b[2]);
|
||||||
|
dest[3] += glm_imax(a[3], b[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add minimum of vector [a] and vector [b] to vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest += min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_minadd(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] += glm_imin(a[0], b[0]);
|
||||||
|
dest[1] += glm_imin(a[1], b[1]);
|
||||||
|
dest[2] += glm_imin(a[2], b[2]);
|
||||||
|
dest[3] += glm_imin(a[3], b[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract vector [a] from vector [b] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= (a - b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_subsub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] - b[0];
|
||||||
|
dest[1] -= a[1] - b[1];
|
||||||
|
dest[2] -= a[2] - b[2];
|
||||||
|
dest[3] -= a[3] - b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract scalar [s] from vector [a] and subtract result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a - s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_subsubs(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] - s;
|
||||||
|
dest[1] -= a[1] - s;
|
||||||
|
dest[2] -= a[2] - s;
|
||||||
|
dest[3] -= a[3] - s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add vector [a] to vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_addsub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] + b[0];
|
||||||
|
dest[1] -= a[1] + b[1];
|
||||||
|
dest[2] -= a[2] + b[2];
|
||||||
|
dest[3] -= a[3] + b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add scalar [s] to vector [a] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a + b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_addsubs(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] + s;
|
||||||
|
dest[1] -= a[1] + s;
|
||||||
|
dest[2] -= a[2] + s;
|
||||||
|
dest[3] -= a[3] + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] and vector [b] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] b scalar
|
||||||
|
* @param[out] dest dest -= (a * b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_mulsub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] * b[0];
|
||||||
|
dest[1] -= a[1] * b[1];
|
||||||
|
dest[2] -= a[2] * b[2];
|
||||||
|
dest[3] -= a[3] * b[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply vector [a] with scalar [s] and subtract the result from [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest -= (a * s)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_mulsubs(ivec4 a, int s, ivec4 dest) {
|
||||||
|
dest[0] -= a[0] * s;
|
||||||
|
dest[1] -= a[1] * s;
|
||||||
|
dest[2] -= a[2] * s;
|
||||||
|
dest[3] -= a[3] * s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract maximum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_maxsub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] -= glm_imax(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imax(a[1], b[1]);
|
||||||
|
dest[2] -= glm_imax(a[2], b[2]);
|
||||||
|
dest[3] -= glm_imax(a[3], b[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief subtract minimum of vector [a] and vector [b] from vector [dest]
|
||||||
|
*
|
||||||
|
* applies -= operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a first vector
|
||||||
|
* @param[in] b second vector
|
||||||
|
* @param[out] dest dest -= min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_ivec4_minsub(ivec4 a, ivec4 b, ivec4 dest) {
|
||||||
|
dest[0] -= glm_imin(a[0], b[0]);
|
||||||
|
dest[1] -= glm_imin(a[1], b[1]);
|
||||||
|
dest[2] -= glm_imin(a[2], b[2]);
|
||||||
|
dest[3] -= glm_imin(a[3], b[3]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief squared distance between two vectors
|
* @brief squared distance between two vectors
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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,7 +13,7 @@
|
|||||||
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, mat2 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest);
|
CGLM_INLINE void glm_mat2x3_mulv(mat2x3 m, vec3 v, vec2 dest);
|
||||||
CGLM_INLINE void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest);
|
CGLM_INLINE void glm_mat2x3_transpose(mat2x3 m, mat3x2 dest);
|
||||||
@@ -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];
|
||||||
@@ -81,15 +81,13 @@ glm_mat2x3_make(float * __restrict src, mat2x3 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
*
|
|
||||||
* @code
|
* @code
|
||||||
* glm_mat2x3_mul(m, m, m);
|
* glm_mat2x3_mul(mat2x3, mat3x2, mat2);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix
|
* @param[in] m1 left matrix (mat2x3)
|
||||||
* @param[in] m2 right matrix
|
* @param[in] m2 right matrix (mat3x2)
|
||||||
* @param[out] dest destination matrix
|
* @param[out] dest destination matrix (mat2)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
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, mat2 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest);
|
CGLM_INLINE void glm_mat2x4_mulv(mat2x4 m, vec4 v, vec2 dest);
|
||||||
CGLM_INLINE void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest);
|
CGLM_INLINE void glm_mat2x4_transpose(mat2x4 m, mat4x2 dest);
|
||||||
@@ -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];
|
||||||
@@ -79,15 +79,13 @@ glm_mat2x4_make(float * __restrict src, mat2x4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
*
|
|
||||||
* @code
|
* @code
|
||||||
* glm_mat2x4_mul(m, m, m);
|
* glm_mat2x4_mul(mat2x4, mat4x2, mat2);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix
|
* @param[in] m1 left matrix (mat2x4)
|
||||||
* @param[in] m2 right matrix
|
* @param[in] m2 right matrix (mat4x2)
|
||||||
* @param[out] dest destination matrix
|
* @param[out] dest destination matrix (mat2)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -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,7 +13,7 @@
|
|||||||
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, mat3 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest);
|
CGLM_INLINE void glm_mat3x2_mulv(mat3x2 m, vec2 v, vec3 dest);
|
||||||
CGLM_INLINE void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest);
|
CGLM_INLINE void glm_mat3x2_transpose(mat3x2 m, mat2x3 dest);
|
||||||
@@ -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];
|
||||||
|
|
||||||
@@ -83,15 +83,13 @@ glm_mat3x2_make(float * __restrict src, mat3x2 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
*
|
|
||||||
* @code
|
* @code
|
||||||
* glm_mat3x2_mul(m, m, m);
|
* glm_mat3x2_mul(mat3x2, mat2x3, mat3);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix
|
* @param[in] m1 left matrix (mat3x2)
|
||||||
* @param[in] m2 right matrix
|
* @param[in] m2 right matrix (mat2x3)
|
||||||
* @param[out] dest destination matrix
|
* @param[out] dest destination matrix (mat3)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -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];
|
||||||
@@ -86,15 +86,13 @@ glm_mat3x4_make(float * __restrict src, mat3x4 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
*
|
|
||||||
* @code
|
* @code
|
||||||
* glm_mat3x4_mul(m, m, m);
|
* glm_mat3x4_mul(mat3x4, mat4x3, mat3);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix
|
* @param[in] m1 left matrix (mat3x4)
|
||||||
* @param[in] m2 right matrix
|
* @param[in] m2 right matrix (mat4x3)
|
||||||
* @param[out] dest destination matrix
|
* @param[out] dest destination matrix (mat3)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
@@ -89,15 +89,13 @@ glm_mat4x2_make(float * __restrict src, mat4x2 dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply m1 and m2 to dest
|
* @brief multiply m1 and m2 to dest
|
||||||
*
|
*
|
||||||
* m1, m2 and dest matrices can be same matrix, it is possible to write this:
|
|
||||||
*
|
|
||||||
* @code
|
* @code
|
||||||
* glm_mat4x2_mul(m, m, m);
|
* glm_mat4x2_mul(mat4x2, mat2x4, mat4);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param[in] m1 left matrix
|
* @param[in] m1 left matrix (mat4x2)
|
||||||
* @param[in] m2 right matrix
|
* @param[in] m2 right matrix (mat2x4)
|
||||||
* @param[out] dest destination matrix
|
* @param[out] dest destination matrix (mat4)
|
||||||
*/
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user