init commit
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +1 -0
- diff-gaussian-rasterization-camera/CMakeLists.txt +36 -0
- diff-gaussian-rasterization-camera/LICENSE.md +83 -0
- diff-gaussian-rasterization-camera/README.md +35 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/auxiliary.h +175 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/backward.cu +718 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/backward.h +71 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/config.h +19 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/forward.cu +466 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/forward.h +68 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer.h +95 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer_impl.cu +449 -0
- diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer_impl.h +73 -0
- diff-gaussian-rasterization-camera/diff_gaussian_rasterization/__init__.py +263 -0
- diff-gaussian-rasterization-camera/ext.cpp +19 -0
- diff-gaussian-rasterization-camera/gs_renderer.py +866 -0
- diff-gaussian-rasterization-camera/rasterize_points.cu +232 -0
- diff-gaussian-rasterization-camera/rasterize_points.h +70 -0
- diff-gaussian-rasterization-camera/setup.py +34 -0
- diff-gaussian-rasterization-camera/third_party/.DS_Store +0 -0
- diff-gaussian-rasterization-camera/third_party/glm/.appveyor.yml +92 -0
- diff-gaussian-rasterization-camera/third_party/glm/.travis.yml +388 -0
- diff-gaussian-rasterization-camera/third_party/glm/CMakeLists.txt +45 -0
- diff-gaussian-rasterization-camera/third_party/glm/cmake/cmake_uninstall.cmake.in +21 -0
- diff-gaussian-rasterization-camera/third_party/glm/copying.txt +54 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00002_source.html +121 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00015.html +267 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00017_source.html +282 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00020_source.html +130 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00023.html +244 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00025_source.html +380 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00030_source.html +125 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00038.html +125 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00039.html +123 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00039_source.html +134 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00040_source.html +232 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00042.html +150 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00049_source.html +110 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00050_source.html +110 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00054.html +108 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00055.html +108 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00055_source.html +109 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00058.html +131 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00062.html +119 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00067_source.html +111 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00072_source.html +126 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00074.html +123 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00078.html +123 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00079.html +120 -0
- diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00080.html +132 -0
.gitattributes
CHANGED
@@ -36,3 +36,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
36 |
simple-knn/build/lib.linux-x86_64-cpython-39/simple_knn/_C.cpython-39-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
37 |
simple-knn/build/temp.linux-x86_64-cpython-39/.ninja_deps filter=lfs diff=lfs merge=lfs -text
|
38 |
simple-knn/build/temp.linux-x86_64-cpython-39/simple_knn.o filter=lfs diff=lfs merge=lfs -text
|
|
|
|
36 |
simple-knn/build/lib.linux-x86_64-cpython-39/simple_knn/_C.cpython-39-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
|
37 |
simple-knn/build/temp.linux-x86_64-cpython-39/.ninja_deps filter=lfs diff=lfs merge=lfs -text
|
38 |
simple-knn/build/temp.linux-x86_64-cpython-39/simple_knn.o filter=lfs diff=lfs merge=lfs -text
|
39 |
+
diff-gaussian-rasterization-camera/third_party/glm/doc/manual.pdf filter=lfs diff=lfs merge=lfs -text
|
diff-gaussian-rasterization-camera/CMakeLists.txt
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#
|
2 |
+
# Copyright (C) 2023, Inria
|
3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
# All rights reserved.
|
5 |
+
#
|
6 |
+
# This software is free for non-commercial, research and evaluation use
|
7 |
+
# under the terms of the LICENSE.md file.
|
8 |
+
#
|
9 |
+
# For inquiries contact [email protected]
|
10 |
+
#
|
11 |
+
|
12 |
+
cmake_minimum_required(VERSION 3.20)
|
13 |
+
|
14 |
+
project(DiffRast LANGUAGES CUDA CXX)
|
15 |
+
|
16 |
+
set(CMAKE_CXX_STANDARD 17)
|
17 |
+
set(CMAKE_CXX_EXTENSIONS OFF)
|
18 |
+
set(CMAKE_CUDA_STANDARD 17)
|
19 |
+
|
20 |
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
21 |
+
|
22 |
+
add_library(CudaRasterizer
|
23 |
+
cuda_rasterizer/backward.h
|
24 |
+
cuda_rasterizer/backward.cu
|
25 |
+
cuda_rasterizer/forward.h
|
26 |
+
cuda_rasterizer/forward.cu
|
27 |
+
cuda_rasterizer/auxiliary.h
|
28 |
+
cuda_rasterizer/rasterizer_impl.cu
|
29 |
+
cuda_rasterizer/rasterizer_impl.h
|
30 |
+
cuda_rasterizer/rasterizer.h
|
31 |
+
)
|
32 |
+
|
33 |
+
set_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES "75;86")
|
34 |
+
|
35 |
+
target_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer)
|
36 |
+
target_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
|
diff-gaussian-rasterization-camera/LICENSE.md
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Gaussian-Splatting License
|
2 |
+
===========================
|
3 |
+
|
4 |
+
**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.
|
5 |
+
The *Software* is in the process of being registered with the Agence pour la Protection des
|
6 |
+
Programmes (APP).
|
7 |
+
|
8 |
+
The *Software* is still being developed by the *Licensor*.
|
9 |
+
|
10 |
+
*Licensor*'s goal is to allow the research community to use, test and evaluate
|
11 |
+
the *Software*.
|
12 |
+
|
13 |
+
## 1. Definitions
|
14 |
+
|
15 |
+
*Licensee* means any person or entity that uses the *Software* and distributes
|
16 |
+
its *Work*.
|
17 |
+
|
18 |
+
*Licensor* means the owners of the *Software*, i.e Inria and MPII
|
19 |
+
|
20 |
+
*Software* means the original work of authorship made available under this
|
21 |
+
License ie gaussian-splatting.
|
22 |
+
|
23 |
+
*Work* means the *Software* and any additions to or derivative works of the
|
24 |
+
*Software* that are made available under this License.
|
25 |
+
|
26 |
+
|
27 |
+
## 2. Purpose
|
28 |
+
This license is intended to define the rights granted to the *Licensee* by
|
29 |
+
Licensors under the *Software*.
|
30 |
+
|
31 |
+
## 3. Rights granted
|
32 |
+
|
33 |
+
For the above reasons Licensors have decided to distribute the *Software*.
|
34 |
+
Licensors grant non-exclusive rights to use the *Software* for research purposes
|
35 |
+
to research users (both academic and industrial), free of charge, without right
|
36 |
+
to sublicense.. The *Software* may be used "non-commercially", i.e., for research
|
37 |
+
and/or evaluation purposes only.
|
38 |
+
|
39 |
+
Subject to the terms and conditions of this License, you are granted a
|
40 |
+
non-exclusive, royalty-free, license to reproduce, prepare derivative works of,
|
41 |
+
publicly display, publicly perform and distribute its *Work* and any resulting
|
42 |
+
derivative works in any form.
|
43 |
+
|
44 |
+
## 4. Limitations
|
45 |
+
|
46 |
+
**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do
|
47 |
+
so under this License, (b) you include a complete copy of this License with
|
48 |
+
your distribution, and (c) you retain without modification any copyright,
|
49 |
+
patent, trademark, or attribution notices that are present in the *Work*.
|
50 |
+
|
51 |
+
**4.2 Derivative Works.** You may specify that additional or different terms apply
|
52 |
+
to the use, reproduction, and distribution of your derivative works of the *Work*
|
53 |
+
("Your Terms") only if (a) Your Terms provide that the use limitation in
|
54 |
+
Section 2 applies to your derivative works, and (b) you identify the specific
|
55 |
+
derivative works that are subject to Your Terms. Notwithstanding Your Terms,
|
56 |
+
this License (including the redistribution requirements in Section 3.1) will
|
57 |
+
continue to apply to the *Work* itself.
|
58 |
+
|
59 |
+
**4.3** Any other use without of prior consent of Licensors is prohibited. Research
|
60 |
+
users explicitly acknowledge having received from Licensors all information
|
61 |
+
allowing to appreciate the adequacy between of the *Software* and their needs and
|
62 |
+
to undertake all necessary precautions for its execution and use.
|
63 |
+
|
64 |
+
**4.4** The *Software* is provided both as a compiled library file and as source
|
65 |
+
code. In case of using the *Software* for a publication or other results obtained
|
66 |
+
through the use of the *Software*, users are strongly encouraged to cite the
|
67 |
+
corresponding publications as explained in the documentation of the *Software*.
|
68 |
+
|
69 |
+
## 5. Disclaimer
|
70 |
+
|
71 |
+
THE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES
|
72 |
+
WITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY
|
73 |
+
UNAUTHORIZED USE: [email protected] . ANY SUCH ACTION WILL
|
74 |
+
CONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES
|
75 |
+
OF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL
|
76 |
+
USE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR
|
77 |
+
ADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE
|
78 |
+
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
79 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
80 |
+
GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)
|
81 |
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
82 |
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR
|
83 |
+
IN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.
|
diff-gaussian-rasterization-camera/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Differential Gaussian Rasterization
|
2 |
+
|
3 |
+
**NOTE**: this is a modified version to support depth & alpha rendering (both forward and backward) from the [original repository](https://github.com/graphdeco-inria/diff-gaussian-rasterization).
|
4 |
+
|
5 |
+
```python
|
6 |
+
rendered_image, radii, rendered_depth, rendered_alpha = rasterizer(
|
7 |
+
means3D=means3D,
|
8 |
+
means2D=means2D,
|
9 |
+
shs=shs,
|
10 |
+
colors_precomp=colors_precomp,
|
11 |
+
opacities=opacity,
|
12 |
+
scales=scales,
|
13 |
+
rotations=rotations,
|
14 |
+
cov3D_precomp=cov3D_precomp,
|
15 |
+
)
|
16 |
+
```
|
17 |
+
|
18 |
+
|
19 |
+
Used as the rasterization engine for the paper "3D Gaussian Splatting for Real-Time Rendering of Radiance Fields". If you can make use of it in your own research, please be so kind to cite us.
|
20 |
+
|
21 |
+
<section class="section" id="BibTeX">
|
22 |
+
<div class="container is-max-desktop content">
|
23 |
+
<h2 class="title">BibTeX</h2>
|
24 |
+
<pre><code>@Article{kerbl3Dgaussians,
|
25 |
+
author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George},
|
26 |
+
title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
|
27 |
+
journal = {ACM Transactions on Graphics},
|
28 |
+
number = {4},
|
29 |
+
volume = {42},
|
30 |
+
month = {July},
|
31 |
+
year = {2023},
|
32 |
+
url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}
|
33 |
+
}</code></pre>
|
34 |
+
</div>
|
35 |
+
</section>
|
diff-gaussian-rasterization-camera/cuda_rasterizer/auxiliary.h
ADDED
@@ -0,0 +1,175 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
|
13 |
+
#define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED
|
14 |
+
|
15 |
+
#include "config.h"
|
16 |
+
#include "stdio.h"
|
17 |
+
|
18 |
+
#define BLOCK_SIZE (BLOCK_X * BLOCK_Y)
|
19 |
+
#define NUM_WARPS (BLOCK_SIZE/32)
|
20 |
+
|
21 |
+
// Spherical harmonics coefficients
|
22 |
+
__device__ const float SH_C0 = 0.28209479177387814f;
|
23 |
+
__device__ const float SH_C1 = 0.4886025119029199f;
|
24 |
+
__device__ const float SH_C2[] = {
|
25 |
+
1.0925484305920792f,
|
26 |
+
-1.0925484305920792f,
|
27 |
+
0.31539156525252005f,
|
28 |
+
-1.0925484305920792f,
|
29 |
+
0.5462742152960396f
|
30 |
+
};
|
31 |
+
__device__ const float SH_C3[] = {
|
32 |
+
-0.5900435899266435f,
|
33 |
+
2.890611442640554f,
|
34 |
+
-0.4570457994644658f,
|
35 |
+
0.3731763325901154f,
|
36 |
+
-0.4570457994644658f,
|
37 |
+
1.445305721320277f,
|
38 |
+
-0.5900435899266435f
|
39 |
+
};
|
40 |
+
|
41 |
+
__forceinline__ __device__ float ndc2Pix(float v, int S)
|
42 |
+
{
|
43 |
+
return ((v + 1.0) * S - 1.0) * 0.5;
|
44 |
+
}
|
45 |
+
|
46 |
+
__forceinline__ __device__ void getRect(const float2 p, int max_radius, uint2& rect_min, uint2& rect_max, dim3 grid)
|
47 |
+
{
|
48 |
+
rect_min = {
|
49 |
+
min(grid.x, max((int)0, (int)((p.x - max_radius) / BLOCK_X))),
|
50 |
+
min(grid.y, max((int)0, (int)((p.y - max_radius) / BLOCK_Y)))
|
51 |
+
};
|
52 |
+
rect_max = {
|
53 |
+
min(grid.x, max((int)0, (int)((p.x + max_radius + BLOCK_X - 1) / BLOCK_X))),
|
54 |
+
min(grid.y, max((int)0, (int)((p.y + max_radius + BLOCK_Y - 1) / BLOCK_Y)))
|
55 |
+
};
|
56 |
+
}
|
57 |
+
|
58 |
+
__forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix)
|
59 |
+
{
|
60 |
+
float3 transformed = {
|
61 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
|
62 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
|
63 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
|
64 |
+
};
|
65 |
+
return transformed;
|
66 |
+
}
|
67 |
+
|
68 |
+
__forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix)
|
69 |
+
{
|
70 |
+
float4 transformed = {
|
71 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],
|
72 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],
|
73 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],
|
74 |
+
matrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15]
|
75 |
+
};
|
76 |
+
return transformed;
|
77 |
+
}
|
78 |
+
|
79 |
+
__forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix)
|
80 |
+
{
|
81 |
+
float3 transformed = {
|
82 |
+
matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z,
|
83 |
+
matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z,
|
84 |
+
matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z,
|
85 |
+
};
|
86 |
+
return transformed;
|
87 |
+
}
|
88 |
+
|
89 |
+
__forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix)
|
90 |
+
{
|
91 |
+
float3 transformed = {
|
92 |
+
matrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z,
|
93 |
+
matrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z,
|
94 |
+
matrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z,
|
95 |
+
};
|
96 |
+
return transformed;
|
97 |
+
}
|
98 |
+
|
99 |
+
__forceinline__ __device__ float dnormvdz(float3 v, float3 dv)
|
100 |
+
{
|
101 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
|
102 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
103 |
+
float dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
|
104 |
+
return dnormvdz;
|
105 |
+
}
|
106 |
+
|
107 |
+
__forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv)
|
108 |
+
{
|
109 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z;
|
110 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
111 |
+
|
112 |
+
float3 dnormvdv;
|
113 |
+
dnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32;
|
114 |
+
dnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32;
|
115 |
+
dnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;
|
116 |
+
return dnormvdv;
|
117 |
+
}
|
118 |
+
|
119 |
+
__forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv)
|
120 |
+
{
|
121 |
+
float sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
|
122 |
+
float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);
|
123 |
+
|
124 |
+
float4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w };
|
125 |
+
float vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w;
|
126 |
+
float4 dnormvdv;
|
127 |
+
dnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32;
|
128 |
+
dnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32;
|
129 |
+
dnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32;
|
130 |
+
dnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32;
|
131 |
+
return dnormvdv;
|
132 |
+
}
|
133 |
+
|
134 |
+
__forceinline__ __device__ float sigmoid(float x)
|
135 |
+
{
|
136 |
+
return 1.0f / (1.0f + expf(-x));
|
137 |
+
}
|
138 |
+
|
139 |
+
__forceinline__ __device__ bool in_frustum(int idx,
|
140 |
+
const float* orig_points,
|
141 |
+
const float* viewmatrix,
|
142 |
+
const float* projmatrix,
|
143 |
+
bool prefiltered,
|
144 |
+
float3& p_view)
|
145 |
+
{
|
146 |
+
float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };
|
147 |
+
|
148 |
+
// Bring points to screen space
|
149 |
+
float4 p_hom = transformPoint4x4(p_orig, projmatrix);
|
150 |
+
float p_w = 1.0f / (p_hom.w + 0.0000001f);
|
151 |
+
float3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };
|
152 |
+
p_view = transformPoint4x3(p_orig, viewmatrix);
|
153 |
+
|
154 |
+
if (p_view.z <= 0.2f)// || ((p_proj.x < -1.3 || p_proj.x > 1.3 || p_proj.y < -1.3 || p_proj.y > 1.3)))
|
155 |
+
{
|
156 |
+
if (prefiltered)
|
157 |
+
{
|
158 |
+
printf("Point is filtered although prefiltered is set. This shouldn't happen!");
|
159 |
+
__trap();
|
160 |
+
}
|
161 |
+
return false;
|
162 |
+
}
|
163 |
+
return true;
|
164 |
+
}
|
165 |
+
|
166 |
+
#define CHECK_CUDA(A, debug) \
|
167 |
+
A; if(debug) { \
|
168 |
+
auto ret = cudaDeviceSynchronize(); \
|
169 |
+
if (ret != cudaSuccess) { \
|
170 |
+
std::cerr << "\n[CUDA ERROR] in " << __FILE__ << "\nLine " << __LINE__ << ": " << cudaGetErrorString(ret); \
|
171 |
+
throw std::runtime_error(cudaGetErrorString(ret)); \
|
172 |
+
} \
|
173 |
+
}
|
174 |
+
|
175 |
+
#endif
|
diff-gaussian-rasterization-camera/cuda_rasterizer/backward.cu
ADDED
@@ -0,0 +1,718 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#include "backward.h"
|
13 |
+
#include "auxiliary.h"
|
14 |
+
#include <cooperative_groups.h>
|
15 |
+
#include <cooperative_groups/reduce.h>
|
16 |
+
namespace cg = cooperative_groups;
|
17 |
+
|
18 |
+
// Backward pass for conversion of spherical harmonics to RGB for
|
19 |
+
// each Gaussian.
|
20 |
+
__device__ void computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, const bool* clamped, const glm::vec3* dL_dcolor, glm::vec3* dL_dmeans, glm::vec3* dL_dshs)
|
21 |
+
{
|
22 |
+
// Compute intermediate values, as it is done during forward
|
23 |
+
glm::vec3 pos = means[idx];
|
24 |
+
glm::vec3 dir_orig = pos - campos;
|
25 |
+
glm::vec3 dir = dir_orig / glm::length(dir_orig);
|
26 |
+
|
27 |
+
glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
|
28 |
+
|
29 |
+
// Use PyTorch rule for clamping: if clamping was applied,
|
30 |
+
// gradient becomes 0.
|
31 |
+
glm::vec3 dL_dRGB = dL_dcolor[idx];
|
32 |
+
dL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1;
|
33 |
+
dL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1;
|
34 |
+
dL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1;
|
35 |
+
|
36 |
+
glm::vec3 dRGBdx(0, 0, 0);
|
37 |
+
glm::vec3 dRGBdy(0, 0, 0);
|
38 |
+
glm::vec3 dRGBdz(0, 0, 0);
|
39 |
+
float x = dir.x;
|
40 |
+
float y = dir.y;
|
41 |
+
float z = dir.z;
|
42 |
+
|
43 |
+
// Target location for this Gaussian to write SH gradients to
|
44 |
+
glm::vec3* dL_dsh = dL_dshs + idx * max_coeffs;
|
45 |
+
|
46 |
+
// No tricks here, just high school-level calculus.
|
47 |
+
float dRGBdsh0 = SH_C0;
|
48 |
+
dL_dsh[0] = dRGBdsh0 * dL_dRGB;
|
49 |
+
if (deg > 0)
|
50 |
+
{
|
51 |
+
float dRGBdsh1 = -SH_C1 * y;
|
52 |
+
float dRGBdsh2 = SH_C1 * z;
|
53 |
+
float dRGBdsh3 = -SH_C1 * x;
|
54 |
+
dL_dsh[1] = dRGBdsh1 * dL_dRGB;
|
55 |
+
dL_dsh[2] = dRGBdsh2 * dL_dRGB;
|
56 |
+
dL_dsh[3] = dRGBdsh3 * dL_dRGB;
|
57 |
+
|
58 |
+
dRGBdx = -SH_C1 * sh[3];
|
59 |
+
dRGBdy = -SH_C1 * sh[1];
|
60 |
+
dRGBdz = SH_C1 * sh[2];
|
61 |
+
|
62 |
+
if (deg > 1)
|
63 |
+
{
|
64 |
+
float xx = x * x, yy = y * y, zz = z * z;
|
65 |
+
float xy = x * y, yz = y * z, xz = x * z;
|
66 |
+
|
67 |
+
float dRGBdsh4 = SH_C2[0] * xy;
|
68 |
+
float dRGBdsh5 = SH_C2[1] * yz;
|
69 |
+
float dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy);
|
70 |
+
float dRGBdsh7 = SH_C2[3] * xz;
|
71 |
+
float dRGBdsh8 = SH_C2[4] * (xx - yy);
|
72 |
+
dL_dsh[4] = dRGBdsh4 * dL_dRGB;
|
73 |
+
dL_dsh[5] = dRGBdsh5 * dL_dRGB;
|
74 |
+
dL_dsh[6] = dRGBdsh6 * dL_dRGB;
|
75 |
+
dL_dsh[7] = dRGBdsh7 * dL_dRGB;
|
76 |
+
dL_dsh[8] = dRGBdsh8 * dL_dRGB;
|
77 |
+
|
78 |
+
dRGBdx += SH_C2[0] * y * sh[4] + SH_C2[2] * 2.f * -x * sh[6] + SH_C2[3] * z * sh[7] + SH_C2[4] * 2.f * x * sh[8];
|
79 |
+
dRGBdy += SH_C2[0] * x * sh[4] + SH_C2[1] * z * sh[5] + SH_C2[2] * 2.f * -y * sh[6] + SH_C2[4] * 2.f * -y * sh[8];
|
80 |
+
dRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7];
|
81 |
+
|
82 |
+
if (deg > 2)
|
83 |
+
{
|
84 |
+
float dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy);
|
85 |
+
float dRGBdsh10 = SH_C3[1] * xy * z;
|
86 |
+
float dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy);
|
87 |
+
float dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy);
|
88 |
+
float dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy);
|
89 |
+
float dRGBdsh14 = SH_C3[5] * z * (xx - yy);
|
90 |
+
float dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy);
|
91 |
+
dL_dsh[9] = dRGBdsh9 * dL_dRGB;
|
92 |
+
dL_dsh[10] = dRGBdsh10 * dL_dRGB;
|
93 |
+
dL_dsh[11] = dRGBdsh11 * dL_dRGB;
|
94 |
+
dL_dsh[12] = dRGBdsh12 * dL_dRGB;
|
95 |
+
dL_dsh[13] = dRGBdsh13 * dL_dRGB;
|
96 |
+
dL_dsh[14] = dRGBdsh14 * dL_dRGB;
|
97 |
+
dL_dsh[15] = dRGBdsh15 * dL_dRGB;
|
98 |
+
|
99 |
+
dRGBdx += (
|
100 |
+
SH_C3[0] * sh[9] * 3.f * 2.f * xy +
|
101 |
+
SH_C3[1] * sh[10] * yz +
|
102 |
+
SH_C3[2] * sh[11] * -2.f * xy +
|
103 |
+
SH_C3[3] * sh[12] * -3.f * 2.f * xz +
|
104 |
+
SH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) +
|
105 |
+
SH_C3[5] * sh[14] * 2.f * xz +
|
106 |
+
SH_C3[6] * sh[15] * 3.f * (xx - yy));
|
107 |
+
|
108 |
+
dRGBdy += (
|
109 |
+
SH_C3[0] * sh[9] * 3.f * (xx - yy) +
|
110 |
+
SH_C3[1] * sh[10] * xz +
|
111 |
+
SH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) +
|
112 |
+
SH_C3[3] * sh[12] * -3.f * 2.f * yz +
|
113 |
+
SH_C3[4] * sh[13] * -2.f * xy +
|
114 |
+
SH_C3[5] * sh[14] * -2.f * yz +
|
115 |
+
SH_C3[6] * sh[15] * -3.f * 2.f * xy);
|
116 |
+
|
117 |
+
dRGBdz += (
|
118 |
+
SH_C3[1] * sh[10] * xy +
|
119 |
+
SH_C3[2] * sh[11] * 4.f * 2.f * yz +
|
120 |
+
SH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) +
|
121 |
+
SH_C3[4] * sh[13] * 4.f * 2.f * xz +
|
122 |
+
SH_C3[5] * sh[14] * (xx - yy));
|
123 |
+
}
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
// The view direction is an input to the computation. View direction
|
128 |
+
// is influenced by the Gaussian's mean, so SHs gradients
|
129 |
+
// must propagate back into 3D position.
|
130 |
+
glm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB));
|
131 |
+
|
132 |
+
// Account for normalization of direction
|
133 |
+
float3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z });
|
134 |
+
|
135 |
+
// Gradients of loss w.r.t. Gaussian means, but only the portion
|
136 |
+
// that is caused because the mean affects the view-dependent color.
|
137 |
+
// Additional mean gradient is accumulated in below methods.
|
138 |
+
dL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z);
|
139 |
+
}
|
140 |
+
|
141 |
+
// Backward version of INVERSE 2D covariance matrix computation
|
142 |
+
// (due to length launched as separate kernel before other
|
143 |
+
// backward steps contained in preprocess)
|
144 |
+
__global__ void computeCov2DCUDA(int P,
|
145 |
+
const float3* means,
|
146 |
+
const int* radii,
|
147 |
+
const float* cov3Ds,
|
148 |
+
const float h_x, float h_y,
|
149 |
+
const float tan_fovx, float tan_fovy,
|
150 |
+
const float* view_matrix,
|
151 |
+
const float* dL_dconics,
|
152 |
+
float3* dL_dmeans,
|
153 |
+
float3* dL_dts,
|
154 |
+
float* dL_dcov)
|
155 |
+
{
|
156 |
+
auto idx = cg::this_grid().thread_rank();
|
157 |
+
if (idx >= P || !(radii[idx] > 0))
|
158 |
+
return;
|
159 |
+
|
160 |
+
// Reading location of 3D covariance for this Gaussian
|
161 |
+
const float* cov3D = cov3Ds + 6 * idx;
|
162 |
+
|
163 |
+
// Fetch gradients, recompute 2D covariance and relevant
|
164 |
+
// intermediate forward results needed in the backward.
|
165 |
+
float3 mean = means[idx];
|
166 |
+
float3 dL_dconic = { dL_dconics[4 * idx], dL_dconics[4 * idx + 1], dL_dconics[4 * idx + 3] };
|
167 |
+
float3 t = transformPoint4x3(mean, view_matrix);
|
168 |
+
|
169 |
+
const float limx = 1.3f * tan_fovx;
|
170 |
+
const float limy = 1.3f * tan_fovy;
|
171 |
+
const float txtz = t.x / t.z;
|
172 |
+
const float tytz = t.y / t.z;
|
173 |
+
t.x = min(limx, max(-limx, txtz)) * t.z;
|
174 |
+
t.y = min(limy, max(-limy, tytz)) * t.z;
|
175 |
+
|
176 |
+
const float x_grad_mul = txtz < -limx || txtz > limx ? 0 : 1;
|
177 |
+
const float y_grad_mul = tytz < -limy || tytz > limy ? 0 : 1;
|
178 |
+
|
179 |
+
glm::mat3 J = glm::mat3(h_x / t.z, 0.0f, -(h_x * t.x) / (t.z * t.z),
|
180 |
+
0.0f, h_y / t.z, -(h_y * t.y) / (t.z * t.z),
|
181 |
+
0, 0, 0);
|
182 |
+
|
183 |
+
glm::mat3 W = glm::mat3(
|
184 |
+
view_matrix[0], view_matrix[4], view_matrix[8],
|
185 |
+
view_matrix[1], view_matrix[5], view_matrix[9],
|
186 |
+
view_matrix[2], view_matrix[6], view_matrix[10]);
|
187 |
+
|
188 |
+
glm::mat3 Vrk = glm::mat3(
|
189 |
+
cov3D[0], cov3D[1], cov3D[2],
|
190 |
+
cov3D[1], cov3D[3], cov3D[4],
|
191 |
+
cov3D[2], cov3D[4], cov3D[5]);
|
192 |
+
|
193 |
+
glm::mat3 T = W * J;
|
194 |
+
|
195 |
+
glm::mat3 cov2D = glm::transpose(T) * glm::transpose(Vrk) * T;
|
196 |
+
|
197 |
+
// Use helper variables for 2D covariance entries. More compact.
|
198 |
+
float a = cov2D[0][0] += 0.3f;
|
199 |
+
float b = cov2D[0][1];
|
200 |
+
float c = cov2D[1][1] += 0.3f;
|
201 |
+
|
202 |
+
float denom = a * c - b * b;
|
203 |
+
float dL_da = 0, dL_db = 0, dL_dc = 0;
|
204 |
+
float denom2inv = 1.0f / ((denom * denom) + 0.0000001f);
|
205 |
+
|
206 |
+
if (denom2inv != 0)
|
207 |
+
{
|
208 |
+
// Gradients of loss w.r.t. entries of 2D covariance matrix,
|
209 |
+
// given gradients of loss w.r.t. conic matrix (inverse covariance matrix).
|
210 |
+
// e.g., dL / da = dL / d_conic_a * d_conic_a / d_a
|
211 |
+
dL_da = denom2inv * (-c * c * dL_dconic.x + 2 * b * c * dL_dconic.y + (denom - a * c) * dL_dconic.z);
|
212 |
+
dL_dc = denom2inv * (-a * a * dL_dconic.z + 2 * a * b * dL_dconic.y + (denom - a * c) * dL_dconic.x);
|
213 |
+
dL_db = denom2inv * 2 * (b * c * dL_dconic.x - (denom + 2 * b * b) * dL_dconic.y + a * b * dL_dconic.z);
|
214 |
+
|
215 |
+
// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry,
|
216 |
+
// given gradients w.r.t. 2D covariance matrix (diagonal).
|
217 |
+
// cov2D = transpose(T) * transpose(Vrk) * T;
|
218 |
+
dL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc);
|
219 |
+
dL_dcov[6 * idx + 3] = (T[0][1] * T[0][1] * dL_da + T[0][1] * T[1][1] * dL_db + T[1][1] * T[1][1] * dL_dc);
|
220 |
+
dL_dcov[6 * idx + 5] = (T[0][2] * T[0][2] * dL_da + T[0][2] * T[1][2] * dL_db + T[1][2] * T[1][2] * dL_dc);
|
221 |
+
|
222 |
+
// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry,
|
223 |
+
// given gradients w.r.t. 2D covariance matrix (off-diagonal).
|
224 |
+
// Off-diagonal elements appear twice --> double the gradient.
|
225 |
+
// cov2D = transpose(T) * transpose(Vrk) * T;
|
226 |
+
dL_dcov[6 * idx + 1] = 2 * T[0][0] * T[0][1] * dL_da + (T[0][0] * T[1][1] + T[0][1] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][1] * dL_dc;
|
227 |
+
dL_dcov[6 * idx + 2] = 2 * T[0][0] * T[0][2] * dL_da + (T[0][0] * T[1][2] + T[0][2] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][2] * dL_dc;
|
228 |
+
dL_dcov[6 * idx + 4] = 2 * T[0][2] * T[0][1] * dL_da + (T[0][1] * T[1][2] + T[0][2] * T[1][1]) * dL_db + 2 * T[1][1] * T[1][2] * dL_dc;
|
229 |
+
}
|
230 |
+
else
|
231 |
+
{
|
232 |
+
for (int i = 0; i < 6; i++)
|
233 |
+
dL_dcov[6 * idx + i] = 0;
|
234 |
+
}
|
235 |
+
|
236 |
+
// Gradients of loss w.r.t. upper 2x3 portion of intermediate matrix T
|
237 |
+
// cov2D = transpose(T) * transpose(Vrk) * T;
|
238 |
+
float dL_dT00 = 2 * (T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_da +
|
239 |
+
(T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_db;
|
240 |
+
float dL_dT01 = 2 * (T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_da +
|
241 |
+
(T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_db;
|
242 |
+
float dL_dT02 = 2 * (T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_da +
|
243 |
+
(T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_db;
|
244 |
+
float dL_dT10 = 2 * (T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_dc +
|
245 |
+
(T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_db;
|
246 |
+
float dL_dT11 = 2 * (T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_dc +
|
247 |
+
(T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_db;
|
248 |
+
float dL_dT12 = 2 * (T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_dc +
|
249 |
+
(T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_db;
|
250 |
+
|
251 |
+
// Gradients of loss w.r.t. upper 3x2 non-zero entries of Jacobian matrix
|
252 |
+
// T = W * J
|
253 |
+
float dL_dJ00 = W[0][0] * dL_dT00 + W[0][1] * dL_dT01 + W[0][2] * dL_dT02;
|
254 |
+
float dL_dJ02 = W[2][0] * dL_dT00 + W[2][1] * dL_dT01 + W[2][2] * dL_dT02;
|
255 |
+
float dL_dJ11 = W[1][0] * dL_dT10 + W[1][1] * dL_dT11 + W[1][2] * dL_dT12;
|
256 |
+
float dL_dJ12 = W[2][0] * dL_dT10 + W[2][1] * dL_dT11 + W[2][2] * dL_dT12;
|
257 |
+
|
258 |
+
float tz = 1.f / t.z;
|
259 |
+
float tz2 = tz * tz;
|
260 |
+
float tz3 = tz2 * tz;
|
261 |
+
|
262 |
+
// Gradients of loss w.r.t. transformed Gaussian mean t
|
263 |
+
float dL_dtx = x_grad_mul * -h_x * tz2 * dL_dJ02;
|
264 |
+
float dL_dty = y_grad_mul * -h_y * tz2 * dL_dJ12;
|
265 |
+
float dL_dtz = -h_x * tz2 * dL_dJ00 - h_y * tz2 * dL_dJ11 + (2 * h_x * t.x) * tz3 * dL_dJ02 + (2 * h_y * t.y) * tz3 * dL_dJ12;
|
266 |
+
|
267 |
+
// Account for transformation of mean to t
|
268 |
+
// t = transformPoint4x3(mean, view_matrix);
|
269 |
+
float3 dL_dmean = transformVec4x3Transpose({ dL_dtx, dL_dty, dL_dtz }, view_matrix);
|
270 |
+
|
271 |
+
// Gradients of loss w.r.t. Gaussian means, but only the portion
|
272 |
+
// that is caused because the mean affects the covariance matrix.
|
273 |
+
// Additional mean gradient is accumulated in BACKWARD::preprocess.
|
274 |
+
dL_dmeans[idx] = dL_dmean;
|
275 |
+
|
276 |
+
// Created by Qitao
|
277 |
+
dL_dts[idx] = { dL_dtx, dL_dty, dL_dtz };
|
278 |
+
}
|
279 |
+
|
280 |
+
// Backward pass for the conversion of scale and rotation to a
|
281 |
+
// 3D covariance matrix for each Gaussian.
|
282 |
+
__device__ void computeCov3D(int idx, const glm::vec3 scale, float mod, const glm::vec4 rot, const float* dL_dcov3Ds, glm::vec3* dL_dscales, glm::vec4* dL_drots)
|
283 |
+
{
|
284 |
+
// Recompute (intermediate) results for the 3D covariance computation.
|
285 |
+
glm::vec4 q = rot;// / glm::length(rot);
|
286 |
+
float r = q.x;
|
287 |
+
float x = q.y;
|
288 |
+
float y = q.z;
|
289 |
+
float z = q.w;
|
290 |
+
|
291 |
+
glm::mat3 R = glm::mat3(
|
292 |
+
1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),
|
293 |
+
2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),
|
294 |
+
2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y)
|
295 |
+
);
|
296 |
+
|
297 |
+
glm::mat3 S = glm::mat3(1.0f);
|
298 |
+
|
299 |
+
glm::vec3 s = mod * scale;
|
300 |
+
S[0][0] = s.x;
|
301 |
+
S[1][1] = s.y;
|
302 |
+
S[2][2] = s.z;
|
303 |
+
|
304 |
+
glm::mat3 M = S * R;
|
305 |
+
|
306 |
+
const float* dL_dcov3D = dL_dcov3Ds + 6 * idx;
|
307 |
+
|
308 |
+
glm::vec3 dunc(dL_dcov3D[0], dL_dcov3D[3], dL_dcov3D[5]);
|
309 |
+
glm::vec3 ounc = 0.5f * glm::vec3(dL_dcov3D[1], dL_dcov3D[2], dL_dcov3D[4]);
|
310 |
+
|
311 |
+
// Convert per-element covariance loss gradients to matrix form
|
312 |
+
glm::mat3 dL_dSigma = glm::mat3(
|
313 |
+
dL_dcov3D[0], 0.5f * dL_dcov3D[1], 0.5f * dL_dcov3D[2],
|
314 |
+
0.5f * dL_dcov3D[1], dL_dcov3D[3], 0.5f * dL_dcov3D[4],
|
315 |
+
0.5f * dL_dcov3D[2], 0.5f * dL_dcov3D[4], dL_dcov3D[5]
|
316 |
+
);
|
317 |
+
|
318 |
+
// Compute loss gradient w.r.t. matrix M
|
319 |
+
// dSigma_dM = 2 * M
|
320 |
+
glm::mat3 dL_dM = 2.0f * M * dL_dSigma;
|
321 |
+
|
322 |
+
glm::mat3 Rt = glm::transpose(R);
|
323 |
+
glm::mat3 dL_dMt = glm::transpose(dL_dM);
|
324 |
+
|
325 |
+
// Gradients of loss w.r.t. scale
|
326 |
+
glm::vec3* dL_dscale = dL_dscales + idx;
|
327 |
+
dL_dscale->x = glm::dot(Rt[0], dL_dMt[0]);
|
328 |
+
dL_dscale->y = glm::dot(Rt[1], dL_dMt[1]);
|
329 |
+
dL_dscale->z = glm::dot(Rt[2], dL_dMt[2]);
|
330 |
+
|
331 |
+
dL_dMt[0] *= s.x;
|
332 |
+
dL_dMt[1] *= s.y;
|
333 |
+
dL_dMt[2] *= s.z;
|
334 |
+
|
335 |
+
// Gradients of loss w.r.t. normalized quaternion
|
336 |
+
glm::vec4 dL_dq;
|
337 |
+
dL_dq.x = 2 * z * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * y * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * x * (dL_dMt[1][2] - dL_dMt[2][1]);
|
338 |
+
dL_dq.y = 2 * y * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * z * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * r * (dL_dMt[1][2] - dL_dMt[2][1]) - 4 * x * (dL_dMt[2][2] + dL_dMt[1][1]);
|
339 |
+
dL_dq.z = 2 * x * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * r * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * z * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * y * (dL_dMt[2][2] + dL_dMt[0][0]);
|
340 |
+
dL_dq.w = 2 * r * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * x * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * y * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * z * (dL_dMt[1][1] + dL_dMt[0][0]);
|
341 |
+
|
342 |
+
// Gradients of loss w.r.t. unnormalized quaternion
|
343 |
+
float4* dL_drot = (float4*)(dL_drots + idx);
|
344 |
+
*dL_drot = float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w };//dnormvdv(float4{ rot.x, rot.y, rot.z, rot.w }, float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w });
|
345 |
+
}
|
346 |
+
|
347 |
+
// Backward pass of the preprocessing steps, except
|
348 |
+
// for the covariance computation and inversion
|
349 |
+
// (those are handled by a previous kernel call)
|
350 |
+
template<int C>
|
351 |
+
__global__ void preprocessCUDA(
|
352 |
+
int P, int D, int M,
|
353 |
+
const float3* means,
|
354 |
+
const int* radii,
|
355 |
+
const float* shs,
|
356 |
+
const bool* clamped,
|
357 |
+
const glm::vec3* scales,
|
358 |
+
const glm::vec4* rotations,
|
359 |
+
const float scale_modifier,
|
360 |
+
const float* view,
|
361 |
+
const float* proj,
|
362 |
+
const glm::vec3* campos,
|
363 |
+
const float3* dL_dmean2D,
|
364 |
+
glm::vec3* dL_dmeans,
|
365 |
+
float* dL_dcolor,
|
366 |
+
float* dL_ddepth,
|
367 |
+
float* dL_dcov3D,
|
368 |
+
float* dL_dsh,
|
369 |
+
glm::vec3* dL_dscale,
|
370 |
+
glm::vec4* dL_drot)
|
371 |
+
{
|
372 |
+
auto idx = cg::this_grid().thread_rank();
|
373 |
+
if (idx >= P || !(radii[idx] > 0))
|
374 |
+
return;
|
375 |
+
|
376 |
+
float3 m = means[idx];
|
377 |
+
|
378 |
+
// Taking care of gradients from the screenspace points
|
379 |
+
float4 m_hom = transformPoint4x4(m, proj);
|
380 |
+
float m_w = 1.0f / (m_hom.w + 0.0000001f);
|
381 |
+
|
382 |
+
// Compute loss gradient w.r.t. 3D means due to gradients of 2D means
|
383 |
+
// from rendering procedure
|
384 |
+
glm::vec3 dL_dmean;
|
385 |
+
float mul1 = (proj[0] * m.x + proj[4] * m.y + proj[8] * m.z + proj[12]) * m_w * m_w;
|
386 |
+
float mul2 = (proj[1] * m.x + proj[5] * m.y + proj[9] * m.z + proj[13]) * m_w * m_w;
|
387 |
+
dL_dmean.x = (proj[0] * m_w - proj[3] * mul1) * dL_dmean2D[idx].x + (proj[1] * m_w - proj[3] * mul2) * dL_dmean2D[idx].y;
|
388 |
+
dL_dmean.y = (proj[4] * m_w - proj[7] * mul1) * dL_dmean2D[idx].x + (proj[5] * m_w - proj[7] * mul2) * dL_dmean2D[idx].y;
|
389 |
+
dL_dmean.z = (proj[8] * m_w - proj[11] * mul1) * dL_dmean2D[idx].x + (proj[9] * m_w - proj[11] * mul2) * dL_dmean2D[idx].y;
|
390 |
+
|
391 |
+
// That's the second part of the mean gradient. Previous computation
|
392 |
+
// of cov2D and following SH conversion also affects it.
|
393 |
+
dL_dmeans[idx] += dL_dmean;
|
394 |
+
|
395 |
+
// the w must be equal to 1 for view^T * [x,y,z,1]
|
396 |
+
float3 m_view = transformPoint4x3(m, view);
|
397 |
+
|
398 |
+
// Compute loss gradient w.r.t. 3D means due to gradients of depth
|
399 |
+
// from rendering procedure
|
400 |
+
glm::vec3 dL_dmean2;
|
401 |
+
float mul3 = view[2] * m.x + view[6] * m.y + view[10] * m.z + view[14];
|
402 |
+
dL_dmean2.x = (view[2] - view[3] * mul3) * dL_ddepth[idx];
|
403 |
+
dL_dmean2.y = (view[6] - view[7] * mul3) * dL_ddepth[idx];
|
404 |
+
dL_dmean2.z = (view[10] - view[11] * mul3) * dL_ddepth[idx];
|
405 |
+
|
406 |
+
// That's the third part of the mean gradient.
|
407 |
+
dL_dmeans[idx] += dL_dmean2;
|
408 |
+
|
409 |
+
// Compute gradient updates due to computing colors from SHs
|
410 |
+
if (shs)
|
411 |
+
computeColorFromSH(idx, D, M, (glm::vec3*)means, *campos, shs, clamped, (glm::vec3*)dL_dcolor, (glm::vec3*)dL_dmeans, (glm::vec3*)dL_dsh);
|
412 |
+
|
413 |
+
// Compute gradient updates due to computing covariance from scale/rotation
|
414 |
+
if (scales)
|
415 |
+
computeCov3D(idx, scales[idx], scale_modifier, rotations[idx], dL_dcov3D, dL_dscale, dL_drot);
|
416 |
+
}
|
417 |
+
|
418 |
+
// Backward version of the rendering procedure.
|
419 |
+
template <uint32_t C>
|
420 |
+
__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
|
421 |
+
renderCUDA(
|
422 |
+
const uint2* __restrict__ ranges,
|
423 |
+
const uint32_t* __restrict__ point_list,
|
424 |
+
int W, int H,
|
425 |
+
const float* __restrict__ bg_color,
|
426 |
+
const float2* __restrict__ points_xy_image,
|
427 |
+
const float4* __restrict__ conic_opacity,
|
428 |
+
const float* __restrict__ colors,
|
429 |
+
const float* __restrict__ depths,
|
430 |
+
const float* __restrict__ alphas,
|
431 |
+
const uint32_t* __restrict__ n_contrib,
|
432 |
+
const float* __restrict__ dL_dpixels,
|
433 |
+
const float* __restrict__ dL_dpixel_depths,
|
434 |
+
const float* __restrict__ dL_dalphas,
|
435 |
+
float3* __restrict__ dL_dmean2D,
|
436 |
+
float4* __restrict__ dL_dconic2D,
|
437 |
+
float* __restrict__ dL_dopacity,
|
438 |
+
float* __restrict__ dL_dcolors,
|
439 |
+
float* __restrict__ dL_ddepths
|
440 |
+
)
|
441 |
+
{
|
442 |
+
// We rasterize again. Compute necessary block info.
|
443 |
+
auto block = cg::this_thread_block();
|
444 |
+
const uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
|
445 |
+
const uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
|
446 |
+
const uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };
|
447 |
+
const uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
|
448 |
+
const uint32_t pix_id = W * pix.y + pix.x;
|
449 |
+
const float2 pixf = { (float)pix.x, (float)pix.y };
|
450 |
+
|
451 |
+
const bool inside = pix.x < W&& pix.y < H;
|
452 |
+
const uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
|
453 |
+
|
454 |
+
const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
|
455 |
+
|
456 |
+
bool done = !inside;
|
457 |
+
int toDo = range.y - range.x;
|
458 |
+
|
459 |
+
__shared__ int collected_id[BLOCK_SIZE];
|
460 |
+
__shared__ float2 collected_xy[BLOCK_SIZE];
|
461 |
+
__shared__ float4 collected_conic_opacity[BLOCK_SIZE];
|
462 |
+
__shared__ float collected_colors[C * BLOCK_SIZE];
|
463 |
+
__shared__ float collected_depths[BLOCK_SIZE];
|
464 |
+
|
465 |
+
// In the forward, we stored the final value for T, the
|
466 |
+
// product of all (1 - alpha) factors.
|
467 |
+
const float T_final = inside ? (1 - alphas[pix_id]) : 0;
|
468 |
+
float T = T_final;
|
469 |
+
|
470 |
+
// We start from the back. The ID of the last contributing
|
471 |
+
// Gaussian is known from each pixel from the forward.
|
472 |
+
uint32_t contributor = toDo;
|
473 |
+
const int last_contributor = inside ? n_contrib[pix_id] : 0;
|
474 |
+
|
475 |
+
float accum_rec[C] = { 0 };
|
476 |
+
float dL_dpixel[C];
|
477 |
+
float accum_depth_rec = 0;
|
478 |
+
float dL_dpixel_depth;
|
479 |
+
float accum_alpha_rec = 0;
|
480 |
+
float dL_dalpha;
|
481 |
+
if (inside) {
|
482 |
+
for (int i = 0; i < C; i++)
|
483 |
+
dL_dpixel[i] = dL_dpixels[i * H * W + pix_id];
|
484 |
+
dL_dpixel_depth = dL_dpixel_depths[pix_id];
|
485 |
+
dL_dalpha = dL_dalphas[pix_id];
|
486 |
+
}
|
487 |
+
|
488 |
+
float last_alpha = 0;
|
489 |
+
float last_color[C] = { 0 };
|
490 |
+
float last_depth = 0;
|
491 |
+
|
492 |
+
// Gradient of pixel coordinate w.r.t. normalized
|
493 |
+
// screen-space viewport corrdinates (-1 to 1)
|
494 |
+
const float ddelx_dx = 0.5 * W;
|
495 |
+
const float ddely_dy = 0.5 * H;
|
496 |
+
|
497 |
+
// Traverse all Gaussians
|
498 |
+
for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
|
499 |
+
{
|
500 |
+
// Load auxiliary data into shared memory, start in the BACK
|
501 |
+
// and load them in revers order.
|
502 |
+
block.sync();
|
503 |
+
const int progress = i * BLOCK_SIZE + block.thread_rank();
|
504 |
+
if (range.x + progress < range.y)
|
505 |
+
{
|
506 |
+
const int coll_id = point_list[range.y - progress - 1];
|
507 |
+
collected_id[block.thread_rank()] = coll_id;
|
508 |
+
collected_xy[block.thread_rank()] = points_xy_image[coll_id];
|
509 |
+
collected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];
|
510 |
+
for (int i = 0; i < C; i++)
|
511 |
+
collected_colors[i * BLOCK_SIZE + block.thread_rank()] = colors[coll_id * C + i];
|
512 |
+
collected_depths[block.thread_rank()] = depths[coll_id];
|
513 |
+
}
|
514 |
+
block.sync();
|
515 |
+
|
516 |
+
// Iterate over Gaussians
|
517 |
+
for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
|
518 |
+
{
|
519 |
+
// Keep track of current Gaussian ID. Skip, if this one
|
520 |
+
// is behind the last contributor for this pixel.
|
521 |
+
contributor--;
|
522 |
+
if (contributor >= last_contributor)
|
523 |
+
continue;
|
524 |
+
|
525 |
+
// Compute blending values, as before.
|
526 |
+
const float2 xy = collected_xy[j];
|
527 |
+
const float2 d = { xy.x - pixf.x, xy.y - pixf.y };
|
528 |
+
const float4 con_o = collected_conic_opacity[j];
|
529 |
+
const float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;
|
530 |
+
if (power > 0.0f)
|
531 |
+
continue;
|
532 |
+
|
533 |
+
const float G = exp(power);
|
534 |
+
const float alpha = min(0.99f, con_o.w * G);
|
535 |
+
if (alpha < 1.0f / 255.0f)
|
536 |
+
continue;
|
537 |
+
|
538 |
+
T = T / (1.f - alpha);
|
539 |
+
const float dchannel_dcolor = alpha * T;
|
540 |
+
const float dpixel_depth_ddepth = alpha * T;
|
541 |
+
|
542 |
+
// Propagate gradients to per-Gaussian colors and keep
|
543 |
+
// gradients w.r.t. alpha (blending factor for a Gaussian/pixel
|
544 |
+
// pair).
|
545 |
+
float dL_dopa = 0.0f;
|
546 |
+
const int global_id = collected_id[j];
|
547 |
+
for (int ch = 0; ch < C; ch++)
|
548 |
+
{
|
549 |
+
const float c = collected_colors[ch * BLOCK_SIZE + j];
|
550 |
+
// Update last color (to be used in the next iteration)
|
551 |
+
accum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch];
|
552 |
+
last_color[ch] = c;
|
553 |
+
|
554 |
+
const float dL_dchannel = dL_dpixel[ch];
|
555 |
+
dL_dopa += (c - accum_rec[ch]) * dL_dchannel;
|
556 |
+
// Update the gradients w.r.t. color of the Gaussian.
|
557 |
+
// Atomic, since this pixel is just one of potentially
|
558 |
+
// many that were affected by this Gaussian.
|
559 |
+
atomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel);
|
560 |
+
}
|
561 |
+
|
562 |
+
// Propagate gradients from pixel depth to opacity
|
563 |
+
const float c_d = collected_depths[j];
|
564 |
+
accum_depth_rec = last_alpha * last_depth + (1.f - last_alpha) * accum_depth_rec;
|
565 |
+
last_depth = c_d;
|
566 |
+
dL_dopa += (c_d - accum_depth_rec) * dL_dpixel_depth;
|
567 |
+
atomicAdd(&(dL_ddepths[global_id]), dpixel_depth_ddepth * dL_dpixel_depth);
|
568 |
+
|
569 |
+
// Propagate gradients from pixel alpha (weights_sum) to opacity
|
570 |
+
accum_alpha_rec = last_alpha + (1.f - last_alpha) * accum_alpha_rec;
|
571 |
+
dL_dopa += (1 - accum_alpha_rec) * dL_dalpha; //- (alpha - accum_alpha_rec) * dL_dalpha;
|
572 |
+
|
573 |
+
dL_dopa *= T;
|
574 |
+
// Update last alpha (to be used in the next iteration)
|
575 |
+
last_alpha = alpha;
|
576 |
+
|
577 |
+
// Account for fact that alpha also influences how much of
|
578 |
+
// the background color is added if nothing left to blend
|
579 |
+
float bg_dot_dpixel = 0;
|
580 |
+
for (int i = 0; i < C; i++)
|
581 |
+
bg_dot_dpixel += bg_color[i] * dL_dpixel[i];
|
582 |
+
dL_dopa += (-T_final / (1.f - alpha)) * bg_dot_dpixel;
|
583 |
+
|
584 |
+
|
585 |
+
// Helpful reusable temporary variables
|
586 |
+
const float dL_dG = con_o.w * dL_dopa;
|
587 |
+
const float gdx = G * d.x;
|
588 |
+
const float gdy = G * d.y;
|
589 |
+
const float dG_ddelx = -gdx * con_o.x - gdy * con_o.y;
|
590 |
+
const float dG_ddely = -gdy * con_o.z - gdx * con_o.y;
|
591 |
+
|
592 |
+
// Update gradients w.r.t. 2D mean position of the Gaussian
|
593 |
+
atomicAdd(&dL_dmean2D[global_id].x, dL_dG * dG_ddelx * ddelx_dx);
|
594 |
+
atomicAdd(&dL_dmean2D[global_id].y, dL_dG * dG_ddely * ddely_dy);
|
595 |
+
|
596 |
+
// Update gradients w.r.t. 2D covariance (2x2 matrix, symmetric)
|
597 |
+
atomicAdd(&dL_dconic2D[global_id].x, -0.5f * gdx * d.x * dL_dG);
|
598 |
+
atomicAdd(&dL_dconic2D[global_id].y, -0.5f * gdx * d.y * dL_dG);
|
599 |
+
atomicAdd(&dL_dconic2D[global_id].w, -0.5f * gdy * d.y * dL_dG);
|
600 |
+
|
601 |
+
// Update gradients w.r.t. opacity of the Gaussian
|
602 |
+
atomicAdd(&(dL_dopacity[global_id]), G * dL_dopa);
|
603 |
+
}
|
604 |
+
}
|
605 |
+
}
|
606 |
+
|
607 |
+
void BACKWARD::preprocess(
|
608 |
+
int P, int D, int M,
|
609 |
+
const float3* means3D,
|
610 |
+
const int* radii,
|
611 |
+
const float* shs,
|
612 |
+
const bool* clamped,
|
613 |
+
const glm::vec3* scales,
|
614 |
+
const glm::vec4* rotations,
|
615 |
+
const float scale_modifier,
|
616 |
+
const float* cov3Ds,
|
617 |
+
const float* viewmatrix,
|
618 |
+
const float* projmatrix,
|
619 |
+
const float focal_x, float focal_y,
|
620 |
+
const float tan_fovx, float tan_fovy,
|
621 |
+
const glm::vec3* campos,
|
622 |
+
const float3* dL_dmean2D,
|
623 |
+
float3* dL_dts,
|
624 |
+
const float* dL_dconic,
|
625 |
+
glm::vec3* dL_dmean3D,
|
626 |
+
float* dL_dcolor,
|
627 |
+
float* dL_ddepth,
|
628 |
+
float* dL_dcov3D,
|
629 |
+
float* dL_dsh,
|
630 |
+
glm::vec3* dL_dscale,
|
631 |
+
glm::vec4* dL_drot)
|
632 |
+
{
|
633 |
+
// Propagate gradients for the path of 2D conic matrix computation.
|
634 |
+
// Somewhat long, thus it is its own kernel rather than being part of
|
635 |
+
// "preprocess". When done, loss gradient w.r.t. 3D means has been
|
636 |
+
// modified and gradient w.r.t. 3D covariance matrix has been computed.
|
637 |
+
computeCov2DCUDA << <(P + 255) / 256, 256 >> > (
|
638 |
+
P,
|
639 |
+
means3D,
|
640 |
+
radii,
|
641 |
+
cov3Ds,
|
642 |
+
focal_x,
|
643 |
+
focal_y,
|
644 |
+
tan_fovx,
|
645 |
+
tan_fovy,
|
646 |
+
viewmatrix,
|
647 |
+
dL_dconic,
|
648 |
+
(float3*)dL_dmean3D,
|
649 |
+
(float3*)dL_dts,
|
650 |
+
dL_dcov3D);
|
651 |
+
|
652 |
+
// Propagate gradients for remaining steps: finish 3D mean gradients,
|
653 |
+
// propagate color gradients to SH (if desireD), propagate 3D covariance
|
654 |
+
// matrix gradients to scale and rotation.
|
655 |
+
preprocessCUDA<NUM_CHANNELS> << < (P + 255) / 256, 256 >> > (
|
656 |
+
P, D, M,
|
657 |
+
(float3*)means3D,
|
658 |
+
radii,
|
659 |
+
shs,
|
660 |
+
clamped,
|
661 |
+
(glm::vec3*)scales,
|
662 |
+
(glm::vec4*)rotations,
|
663 |
+
scale_modifier,
|
664 |
+
viewmatrix,
|
665 |
+
projmatrix,
|
666 |
+
campos,
|
667 |
+
(float3*)dL_dmean2D,
|
668 |
+
(glm::vec3*)dL_dmean3D,
|
669 |
+
dL_dcolor,
|
670 |
+
dL_ddepth,
|
671 |
+
dL_dcov3D,
|
672 |
+
dL_dsh,
|
673 |
+
dL_dscale,
|
674 |
+
dL_drot);
|
675 |
+
}
|
676 |
+
|
677 |
+
void BACKWARD::render(
|
678 |
+
const dim3 grid, const dim3 block,
|
679 |
+
const uint2* ranges,
|
680 |
+
const uint32_t* point_list,
|
681 |
+
int W, int H,
|
682 |
+
const float* bg_color,
|
683 |
+
const float2* means2D,
|
684 |
+
const float4* conic_opacity,
|
685 |
+
const float* colors,
|
686 |
+
const float* depths,
|
687 |
+
const float* alphas,
|
688 |
+
const uint32_t* n_contrib,
|
689 |
+
const float* dL_dpixels,
|
690 |
+
const float* dL_dpixel_depths,
|
691 |
+
const float* dL_dalphas,
|
692 |
+
float3* dL_dmean2D,
|
693 |
+
float4* dL_dconic2D,
|
694 |
+
float* dL_dopacity,
|
695 |
+
float* dL_dcolors,
|
696 |
+
float* dL_ddepths)
|
697 |
+
{
|
698 |
+
renderCUDA<NUM_CHANNELS> << <grid, block >> >(
|
699 |
+
ranges,
|
700 |
+
point_list,
|
701 |
+
W, H,
|
702 |
+
bg_color,
|
703 |
+
means2D,
|
704 |
+
conic_opacity,
|
705 |
+
colors,
|
706 |
+
depths,
|
707 |
+
alphas,
|
708 |
+
n_contrib,
|
709 |
+
dL_dpixels,
|
710 |
+
dL_dpixel_depths,
|
711 |
+
dL_dalphas,
|
712 |
+
dL_dmean2D,
|
713 |
+
dL_dconic2D,
|
714 |
+
dL_dopacity,
|
715 |
+
dL_dcolors,
|
716 |
+
dL_ddepths
|
717 |
+
);
|
718 |
+
}
|
diff-gaussian-rasterization-camera/cuda_rasterizer/backward.h
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED
|
13 |
+
#define CUDA_RASTERIZER_BACKWARD_H_INCLUDED
|
14 |
+
|
15 |
+
#include <cuda.h>
|
16 |
+
#include "cuda_runtime.h"
|
17 |
+
#include "device_launch_parameters.h"
|
18 |
+
#define GLM_FORCE_CUDA
|
19 |
+
#include <glm/glm.hpp>
|
20 |
+
|
21 |
+
namespace BACKWARD
|
22 |
+
{
|
23 |
+
void render(
|
24 |
+
const dim3 grid, dim3 block,
|
25 |
+
const uint2* ranges,
|
26 |
+
const uint32_t* point_list,
|
27 |
+
int W, int H,
|
28 |
+
const float* bg_color,
|
29 |
+
const float2* means2D,
|
30 |
+
const float4* conic_opacity,
|
31 |
+
const float* colors,
|
32 |
+
const float* depths,
|
33 |
+
const float* alphas,
|
34 |
+
const uint32_t* n_contrib,
|
35 |
+
const float* dL_dpixels,
|
36 |
+
const float* dL_dpixel_depths,
|
37 |
+
const float* dL_dalphas,
|
38 |
+
float3* dL_dmean2D,
|
39 |
+
float4* dL_dconic2D,
|
40 |
+
float* dL_dopacity,
|
41 |
+
float* dL_dcolors,
|
42 |
+
float* dL_ddepths);
|
43 |
+
|
44 |
+
void preprocess(
|
45 |
+
int P, int D, int M,
|
46 |
+
const float3* means,
|
47 |
+
const int* radii,
|
48 |
+
const float* shs,
|
49 |
+
const bool* clamped,
|
50 |
+
const glm::vec3* scales,
|
51 |
+
const glm::vec4* rotations,
|
52 |
+
const float scale_modifier,
|
53 |
+
const float* cov3Ds,
|
54 |
+
const float* view,
|
55 |
+
const float* proj,
|
56 |
+
const float focal_x, float focal_y,
|
57 |
+
const float tan_fovx, float tan_fovy,
|
58 |
+
const glm::vec3* campos,
|
59 |
+
const float3* dL_dmean2D,
|
60 |
+
float3* dL_dts,
|
61 |
+
const float* dL_dconics,
|
62 |
+
glm::vec3* dL_dmeans,
|
63 |
+
float* dL_dcolor,
|
64 |
+
float* dL_ddepth,
|
65 |
+
float* dL_dcov3D,
|
66 |
+
float* dL_dsh,
|
67 |
+
glm::vec3* dL_dscale,
|
68 |
+
glm::vec4* dL_drot);
|
69 |
+
}
|
70 |
+
|
71 |
+
#endif
|
diff-gaussian-rasterization-camera/cuda_rasterizer/config.h
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED
|
13 |
+
#define CUDA_RASTERIZER_CONFIG_H_INCLUDED
|
14 |
+
|
15 |
+
#define NUM_CHANNELS 3 // Default 3, RGB
|
16 |
+
#define BLOCK_X 16
|
17 |
+
#define BLOCK_Y 16
|
18 |
+
|
19 |
+
#endif
|
diff-gaussian-rasterization-camera/cuda_rasterizer/forward.cu
ADDED
@@ -0,0 +1,466 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#include "forward.h"
|
13 |
+
#include "auxiliary.h"
|
14 |
+
#include <cooperative_groups.h>
|
15 |
+
#include <cooperative_groups/reduce.h>
|
16 |
+
namespace cg = cooperative_groups;
|
17 |
+
|
18 |
+
// Forward method for converting the input spherical harmonics
|
19 |
+
// coefficients of each Gaussian to a simple RGB color.
|
20 |
+
__device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, bool* clamped)
|
21 |
+
{
|
22 |
+
// The implementation is loosely based on code for
|
23 |
+
// "Differentiable Point-Based Radiance Fields for
|
24 |
+
// Efficient View Synthesis" by Zhang et al. (2022)
|
25 |
+
glm::vec3 pos = means[idx];
|
26 |
+
glm::vec3 dir = pos - campos;
|
27 |
+
dir = dir / glm::length(dir);
|
28 |
+
|
29 |
+
glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;
|
30 |
+
glm::vec3 result = SH_C0 * sh[0];
|
31 |
+
|
32 |
+
if (deg > 0)
|
33 |
+
{
|
34 |
+
float x = dir.x;
|
35 |
+
float y = dir.y;
|
36 |
+
float z = dir.z;
|
37 |
+
result = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];
|
38 |
+
|
39 |
+
if (deg > 1)
|
40 |
+
{
|
41 |
+
float xx = x * x, yy = y * y, zz = z * z;
|
42 |
+
float xy = x * y, yz = y * z, xz = x * z;
|
43 |
+
result = result +
|
44 |
+
SH_C2[0] * xy * sh[4] +
|
45 |
+
SH_C2[1] * yz * sh[5] +
|
46 |
+
SH_C2[2] * (2.0f * zz - xx - yy) * sh[6] +
|
47 |
+
SH_C2[3] * xz * sh[7] +
|
48 |
+
SH_C2[4] * (xx - yy) * sh[8];
|
49 |
+
|
50 |
+
if (deg > 2)
|
51 |
+
{
|
52 |
+
result = result +
|
53 |
+
SH_C3[0] * y * (3.0f * xx - yy) * sh[9] +
|
54 |
+
SH_C3[1] * xy * z * sh[10] +
|
55 |
+
SH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] +
|
56 |
+
SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] +
|
57 |
+
SH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] +
|
58 |
+
SH_C3[5] * z * (xx - yy) * sh[14] +
|
59 |
+
SH_C3[6] * x * (xx - 3.0f * yy) * sh[15];
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
result += 0.5f;
|
64 |
+
|
65 |
+
// RGB colors are clamped to positive values. If values are
|
66 |
+
// clamped, we need to keep track of this for the backward pass.
|
67 |
+
clamped[3 * idx + 0] = (result.x < 0);
|
68 |
+
clamped[3 * idx + 1] = (result.y < 0);
|
69 |
+
clamped[3 * idx + 2] = (result.z < 0);
|
70 |
+
return glm::max(result, 0.0f);
|
71 |
+
}
|
72 |
+
|
73 |
+
// Forward version of 2D covariance matrix computation
|
74 |
+
__device__ float3 computeCov2D(const float3& mean, float focal_x, float focal_y, float tan_fovx, float tan_fovy, const float* cov3D, const float* viewmatrix)
|
75 |
+
{
|
76 |
+
// The following models the steps outlined by equations 29
|
77 |
+
// and 31 in "EWA Splatting" (Zwicker et al., 2002).
|
78 |
+
// Additionally considers aspect / scaling of viewport.
|
79 |
+
// Transposes used to account for row-/column-major conventions.
|
80 |
+
float3 t = transformPoint4x3(mean, viewmatrix);
|
81 |
+
|
82 |
+
const float limx = 1.3f * tan_fovx;
|
83 |
+
const float limy = 1.3f * tan_fovy;
|
84 |
+
const float txtz = t.x / t.z;
|
85 |
+
const float tytz = t.y / t.z;
|
86 |
+
t.x = min(limx, max(-limx, txtz)) * t.z;
|
87 |
+
t.y = min(limy, max(-limy, tytz)) * t.z;
|
88 |
+
|
89 |
+
glm::mat3 J = glm::mat3(
|
90 |
+
focal_x / t.z, 0.0f, -(focal_x * t.x) / (t.z * t.z),
|
91 |
+
0.0f, focal_y / t.z, -(focal_y * t.y) / (t.z * t.z),
|
92 |
+
0, 0, 0);
|
93 |
+
|
94 |
+
glm::mat3 W = glm::mat3(
|
95 |
+
viewmatrix[0], viewmatrix[4], viewmatrix[8],
|
96 |
+
viewmatrix[1], viewmatrix[5], viewmatrix[9],
|
97 |
+
viewmatrix[2], viewmatrix[6], viewmatrix[10]);
|
98 |
+
|
99 |
+
glm::mat3 T = W * J;
|
100 |
+
|
101 |
+
glm::mat3 Vrk = glm::mat3(
|
102 |
+
cov3D[0], cov3D[1], cov3D[2],
|
103 |
+
cov3D[1], cov3D[3], cov3D[4],
|
104 |
+
cov3D[2], cov3D[4], cov3D[5]);
|
105 |
+
|
106 |
+
glm::mat3 cov = glm::transpose(T) * glm::transpose(Vrk) * T;
|
107 |
+
|
108 |
+
// Apply low-pass filter: every Gaussian should be at least
|
109 |
+
// one pixel wide/high. Discard 3rd row and column.
|
110 |
+
cov[0][0] += 0.3f;
|
111 |
+
cov[1][1] += 0.3f;
|
112 |
+
return { float(cov[0][0]), float(cov[0][1]), float(cov[1][1]) };
|
113 |
+
}
|
114 |
+
|
115 |
+
// Forward method for converting scale and rotation properties of each
|
116 |
+
// Gaussian to a 3D covariance matrix in world space. Also takes care
|
117 |
+
// of quaternion normalization.
|
118 |
+
__device__ void computeCov3D(const glm::vec3 scale, float mod, const glm::vec4 rot, float* cov3D)
|
119 |
+
{
|
120 |
+
// Create scaling matrix
|
121 |
+
glm::mat3 S = glm::mat3(1.0f);
|
122 |
+
S[0][0] = mod * scale.x;
|
123 |
+
S[1][1] = mod * scale.y;
|
124 |
+
S[2][2] = mod * scale.z;
|
125 |
+
|
126 |
+
// Normalize quaternion to get valid rotation
|
127 |
+
glm::vec4 q = rot;// / glm::length(rot);
|
128 |
+
float r = q.x;
|
129 |
+
float x = q.y;
|
130 |
+
float y = q.z;
|
131 |
+
float z = q.w;
|
132 |
+
|
133 |
+
// Compute rotation matrix from quaternion
|
134 |
+
glm::mat3 R = glm::mat3(
|
135 |
+
1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),
|
136 |
+
2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),
|
137 |
+
2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y)
|
138 |
+
);
|
139 |
+
|
140 |
+
glm::mat3 M = S * R;
|
141 |
+
|
142 |
+
// Compute 3D world covariance matrix Sigma
|
143 |
+
glm::mat3 Sigma = glm::transpose(M) * M;
|
144 |
+
|
145 |
+
// Covariance is symmetric, only store upper right
|
146 |
+
cov3D[0] = Sigma[0][0];
|
147 |
+
cov3D[1] = Sigma[0][1];
|
148 |
+
cov3D[2] = Sigma[0][2];
|
149 |
+
cov3D[3] = Sigma[1][1];
|
150 |
+
cov3D[4] = Sigma[1][2];
|
151 |
+
cov3D[5] = Sigma[2][2];
|
152 |
+
}
|
153 |
+
|
154 |
+
// Perform initial steps for each Gaussian prior to rasterization.
|
155 |
+
template<int C>
|
156 |
+
__global__ void preprocessCUDA(int P, int D, int M,
|
157 |
+
const float* orig_points,
|
158 |
+
const glm::vec3* scales,
|
159 |
+
const float scale_modifier,
|
160 |
+
const glm::vec4* rotations,
|
161 |
+
const float* opacities,
|
162 |
+
const float* shs,
|
163 |
+
bool* clamped,
|
164 |
+
const float* cov3D_precomp,
|
165 |
+
const float* colors_precomp,
|
166 |
+
const float* viewmatrix,
|
167 |
+
const float* projmatrix,
|
168 |
+
const glm::vec3* cam_pos,
|
169 |
+
const int W, int H,
|
170 |
+
const float tan_fovx, float tan_fovy,
|
171 |
+
const float focal_x, float focal_y,
|
172 |
+
int* radii,
|
173 |
+
float2* points_xy_image,
|
174 |
+
float* depths,
|
175 |
+
float* cov3Ds,
|
176 |
+
float* rgb,
|
177 |
+
float4* conic_opacity,
|
178 |
+
const dim3 grid,
|
179 |
+
uint32_t* tiles_touched,
|
180 |
+
bool prefiltered)
|
181 |
+
{
|
182 |
+
auto idx = cg::this_grid().thread_rank();
|
183 |
+
if (idx >= P)
|
184 |
+
return;
|
185 |
+
|
186 |
+
// Initialize radius and touched tiles to 0. If this isn't changed,
|
187 |
+
// this Gaussian will not be processed further.
|
188 |
+
radii[idx] = 0;
|
189 |
+
tiles_touched[idx] = 0;
|
190 |
+
|
191 |
+
// Perform near culling, quit if outside.
|
192 |
+
float3 p_view;
|
193 |
+
if (!in_frustum(idx, orig_points, viewmatrix, projmatrix, prefiltered, p_view))
|
194 |
+
return;
|
195 |
+
|
196 |
+
// Transform point by projecting
|
197 |
+
float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };
|
198 |
+
float4 p_hom = transformPoint4x4(p_orig, projmatrix);
|
199 |
+
float p_w = 1.0f / (p_hom.w + 0.0000001f);
|
200 |
+
float3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };
|
201 |
+
|
202 |
+
// If 3D covariance matrix is precomputed, use it, otherwise compute
|
203 |
+
// from scaling and rotation parameters.
|
204 |
+
const float* cov3D;
|
205 |
+
if (cov3D_precomp != nullptr)
|
206 |
+
{
|
207 |
+
cov3D = cov3D_precomp + idx * 6;
|
208 |
+
}
|
209 |
+
else
|
210 |
+
{
|
211 |
+
computeCov3D(scales[idx], scale_modifier, rotations[idx], cov3Ds + idx * 6);
|
212 |
+
cov3D = cov3Ds + idx * 6;
|
213 |
+
}
|
214 |
+
|
215 |
+
// Compute 2D screen-space covariance matrix
|
216 |
+
float3 cov = computeCov2D(p_orig, focal_x, focal_y, tan_fovx, tan_fovy, cov3D, viewmatrix);
|
217 |
+
|
218 |
+
// Invert covariance (EWA algorithm)
|
219 |
+
float det = (cov.x * cov.z - cov.y * cov.y);
|
220 |
+
if (det == 0.0f)
|
221 |
+
return;
|
222 |
+
float det_inv = 1.f / det;
|
223 |
+
float3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv };
|
224 |
+
|
225 |
+
// Compute extent in screen space (by finding eigenvalues of
|
226 |
+
// 2D covariance matrix). Use extent to compute a bounding rectangle
|
227 |
+
// of screen-space tiles that this Gaussian overlaps with. Quit if
|
228 |
+
// rectangle covers 0 tiles.
|
229 |
+
float mid = 0.5f * (cov.x + cov.z);
|
230 |
+
float lambda1 = mid + sqrt(max(0.1f, mid * mid - det));
|
231 |
+
float lambda2 = mid - sqrt(max(0.1f, mid * mid - det));
|
232 |
+
float my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));
|
233 |
+
float2 point_image = { ndc2Pix(p_proj.x, W), ndc2Pix(p_proj.y, H) };
|
234 |
+
uint2 rect_min, rect_max;
|
235 |
+
getRect(point_image, my_radius, rect_min, rect_max, grid);
|
236 |
+
if ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0)
|
237 |
+
return;
|
238 |
+
|
239 |
+
// If colors have been precomputed, use them, otherwise convert
|
240 |
+
// spherical harmonics coefficients to RGB color.
|
241 |
+
if (colors_precomp == nullptr)
|
242 |
+
{
|
243 |
+
glm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3*)orig_points, *cam_pos, shs, clamped);
|
244 |
+
rgb[idx * C + 0] = result.x;
|
245 |
+
rgb[idx * C + 1] = result.y;
|
246 |
+
rgb[idx * C + 2] = result.z;
|
247 |
+
}
|
248 |
+
|
249 |
+
// Store some useful helper data for the next steps.
|
250 |
+
depths[idx] = p_view.z;
|
251 |
+
radii[idx] = my_radius;
|
252 |
+
points_xy_image[idx] = point_image;
|
253 |
+
// Inverse 2D covariance and opacity neatly pack into one float4
|
254 |
+
conic_opacity[idx] = { conic.x, conic.y, conic.z, opacities[idx] };
|
255 |
+
tiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x);
|
256 |
+
}
|
257 |
+
|
258 |
+
// Main rasterization method. Collaboratively works on one tile per
|
259 |
+
// block, each thread treats one pixel. Alternates between fetching
|
260 |
+
// and rasterizing data.
|
261 |
+
template <uint32_t CHANNELS>
|
262 |
+
__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)
|
263 |
+
renderCUDA(
|
264 |
+
const uint2* __restrict__ ranges,
|
265 |
+
const uint32_t* __restrict__ point_list,
|
266 |
+
int W, int H,
|
267 |
+
const float2* __restrict__ points_xy_image,
|
268 |
+
const float* __restrict__ features,
|
269 |
+
const float* __restrict__ depths,
|
270 |
+
const float4* __restrict__ conic_opacity,
|
271 |
+
float* __restrict__ out_alpha,
|
272 |
+
uint32_t* __restrict__ n_contrib,
|
273 |
+
const float* __restrict__ bg_color,
|
274 |
+
float* __restrict__ out_color,
|
275 |
+
float* __restrict__ out_depth)
|
276 |
+
{
|
277 |
+
// Identify current tile and associated min/max pixel range.
|
278 |
+
auto block = cg::this_thread_block();
|
279 |
+
uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;
|
280 |
+
uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };
|
281 |
+
uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };
|
282 |
+
uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };
|
283 |
+
uint32_t pix_id = W * pix.y + pix.x;
|
284 |
+
float2 pixf = { (float)pix.x, (float)pix.y };
|
285 |
+
|
286 |
+
// Check if this thread is associated with a valid pixel or outside.
|
287 |
+
bool inside = pix.x < W&& pix.y < H;
|
288 |
+
// Done threads can help with fetching, but don't rasterize
|
289 |
+
bool done = !inside;
|
290 |
+
|
291 |
+
// Load start/end range of IDs to process in bit sorted list.
|
292 |
+
uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];
|
293 |
+
const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);
|
294 |
+
int toDo = range.y - range.x;
|
295 |
+
|
296 |
+
// Allocate storage for batches of collectively fetched data.
|
297 |
+
__shared__ int collected_id[BLOCK_SIZE];
|
298 |
+
__shared__ float2 collected_xy[BLOCK_SIZE];
|
299 |
+
__shared__ float4 collected_conic_opacity[BLOCK_SIZE];
|
300 |
+
|
301 |
+
// Initialize helper variables
|
302 |
+
float T = 1.0f;
|
303 |
+
uint32_t contributor = 0;
|
304 |
+
uint32_t last_contributor = 0;
|
305 |
+
float C[CHANNELS] = { 0 };
|
306 |
+
float weight = 0;
|
307 |
+
float D = 0;
|
308 |
+
|
309 |
+
// Iterate over batches until all done or range is complete
|
310 |
+
for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)
|
311 |
+
{
|
312 |
+
// End if entire block votes that it is done rasterizing
|
313 |
+
int num_done = __syncthreads_count(done);
|
314 |
+
if (num_done == BLOCK_SIZE)
|
315 |
+
break;
|
316 |
+
|
317 |
+
// Collectively fetch per-Gaussian data from global to shared
|
318 |
+
int progress = i * BLOCK_SIZE + block.thread_rank();
|
319 |
+
if (range.x + progress < range.y)
|
320 |
+
{
|
321 |
+
int coll_id = point_list[range.x + progress];
|
322 |
+
collected_id[block.thread_rank()] = coll_id;
|
323 |
+
collected_xy[block.thread_rank()] = points_xy_image[coll_id];
|
324 |
+
collected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];
|
325 |
+
}
|
326 |
+
block.sync();
|
327 |
+
|
328 |
+
// Iterate over current batch
|
329 |
+
for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)
|
330 |
+
{
|
331 |
+
// Keep track of current position in range
|
332 |
+
contributor++;
|
333 |
+
|
334 |
+
// Resample using conic matrix (cf. "Surface
|
335 |
+
// Splatting" by Zwicker et al., 2001)
|
336 |
+
float2 xy = collected_xy[j];
|
337 |
+
float2 d = { xy.x - pixf.x, xy.y - pixf.y };
|
338 |
+
float4 con_o = collected_conic_opacity[j];
|
339 |
+
float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;
|
340 |
+
if (power > 0.0f)
|
341 |
+
continue;
|
342 |
+
|
343 |
+
// Eq. (2) from 3D Gaussian splatting paper.
|
344 |
+
// Obtain alpha by multiplying with Gaussian opacity
|
345 |
+
// and its exponential falloff from mean.
|
346 |
+
// Avoid numerical instabilities (see paper appendix).
|
347 |
+
float alpha = min(0.99f, con_o.w * exp(power));
|
348 |
+
if (alpha < 1.0f / 255.0f)
|
349 |
+
continue;
|
350 |
+
float test_T = T * (1 - alpha);
|
351 |
+
if (test_T < 0.0001f)
|
352 |
+
{
|
353 |
+
done = true;
|
354 |
+
continue;
|
355 |
+
}
|
356 |
+
|
357 |
+
// Eq. (3) from 3D Gaussian splatting paper.
|
358 |
+
for (int ch = 0; ch < CHANNELS; ch++)
|
359 |
+
C[ch] += features[collected_id[j] * CHANNELS + ch] * alpha * T;
|
360 |
+
weight += alpha * T;
|
361 |
+
D += depths[collected_id[j]] * alpha * T;
|
362 |
+
|
363 |
+
T = test_T;
|
364 |
+
|
365 |
+
// Keep track of last range entry to update this
|
366 |
+
// pixel.
|
367 |
+
last_contributor = contributor;
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
// All threads that treat valid pixel write out their final
|
372 |
+
// rendering data to the frame and auxiliary buffers.
|
373 |
+
if (inside)
|
374 |
+
{
|
375 |
+
n_contrib[pix_id] = last_contributor;
|
376 |
+
for (int ch = 0; ch < CHANNELS; ch++)
|
377 |
+
out_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch];
|
378 |
+
out_alpha[pix_id] = weight; //1 - T;
|
379 |
+
out_depth[pix_id] = D;
|
380 |
+
}
|
381 |
+
}
|
382 |
+
|
383 |
+
void FORWARD::render(
|
384 |
+
const dim3 grid, dim3 block,
|
385 |
+
const uint2* ranges,
|
386 |
+
const uint32_t* point_list,
|
387 |
+
int W, int H,
|
388 |
+
const float2* means2D,
|
389 |
+
const float* colors,
|
390 |
+
const float* depths,
|
391 |
+
const float4* conic_opacity,
|
392 |
+
float* out_alpha,
|
393 |
+
uint32_t* n_contrib,
|
394 |
+
const float* bg_color,
|
395 |
+
float* out_color,
|
396 |
+
float* out_depth)
|
397 |
+
{
|
398 |
+
renderCUDA<NUM_CHANNELS> << <grid, block >> > (
|
399 |
+
ranges,
|
400 |
+
point_list,
|
401 |
+
W, H,
|
402 |
+
means2D,
|
403 |
+
colors,
|
404 |
+
depths,
|
405 |
+
conic_opacity,
|
406 |
+
out_alpha,
|
407 |
+
n_contrib,
|
408 |
+
bg_color,
|
409 |
+
out_color,
|
410 |
+
out_depth);
|
411 |
+
}
|
412 |
+
|
413 |
+
void FORWARD::preprocess(int P, int D, int M,
|
414 |
+
const float* means3D,
|
415 |
+
const glm::vec3* scales,
|
416 |
+
const float scale_modifier,
|
417 |
+
const glm::vec4* rotations,
|
418 |
+
const float* opacities,
|
419 |
+
const float* shs,
|
420 |
+
bool* clamped,
|
421 |
+
const float* cov3D_precomp,
|
422 |
+
const float* colors_precomp,
|
423 |
+
const float* viewmatrix,
|
424 |
+
const float* projmatrix,
|
425 |
+
const glm::vec3* cam_pos,
|
426 |
+
const int W, int H,
|
427 |
+
const float focal_x, float focal_y,
|
428 |
+
const float tan_fovx, float tan_fovy,
|
429 |
+
int* radii,
|
430 |
+
float2* means2D,
|
431 |
+
float* depths,
|
432 |
+
float* cov3Ds,
|
433 |
+
float* rgb,
|
434 |
+
float4* conic_opacity,
|
435 |
+
const dim3 grid,
|
436 |
+
uint32_t* tiles_touched,
|
437 |
+
bool prefiltered)
|
438 |
+
{
|
439 |
+
preprocessCUDA<NUM_CHANNELS> << <(P + 255) / 256, 256 >> > (
|
440 |
+
P, D, M,
|
441 |
+
means3D,
|
442 |
+
scales,
|
443 |
+
scale_modifier,
|
444 |
+
rotations,
|
445 |
+
opacities,
|
446 |
+
shs,
|
447 |
+
clamped,
|
448 |
+
cov3D_precomp,
|
449 |
+
colors_precomp,
|
450 |
+
viewmatrix,
|
451 |
+
projmatrix,
|
452 |
+
cam_pos,
|
453 |
+
W, H,
|
454 |
+
tan_fovx, tan_fovy,
|
455 |
+
focal_x, focal_y,
|
456 |
+
radii,
|
457 |
+
means2D,
|
458 |
+
depths,
|
459 |
+
cov3Ds,
|
460 |
+
rgb,
|
461 |
+
conic_opacity,
|
462 |
+
grid,
|
463 |
+
tiles_touched,
|
464 |
+
prefiltered
|
465 |
+
);
|
466 |
+
}
|
diff-gaussian-rasterization-camera/cuda_rasterizer/forward.h
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED
|
13 |
+
#define CUDA_RASTERIZER_FORWARD_H_INCLUDED
|
14 |
+
|
15 |
+
#include <cuda.h>
|
16 |
+
#include "cuda_runtime.h"
|
17 |
+
#include "device_launch_parameters.h"
|
18 |
+
#define GLM_FORCE_CUDA
|
19 |
+
#include <glm/glm.hpp>
|
20 |
+
|
21 |
+
namespace FORWARD
|
22 |
+
{
|
23 |
+
// Perform initial steps for each Gaussian prior to rasterization.
|
24 |
+
void preprocess(int P, int D, int M,
|
25 |
+
const float* orig_points,
|
26 |
+
const glm::vec3* scales,
|
27 |
+
const float scale_modifier,
|
28 |
+
const glm::vec4* rotations,
|
29 |
+
const float* opacities,
|
30 |
+
const float* shs,
|
31 |
+
bool* clamped,
|
32 |
+
const float* cov3D_precomp,
|
33 |
+
const float* colors_precomp,
|
34 |
+
const float* viewmatrix,
|
35 |
+
const float* projmatrix,
|
36 |
+
const glm::vec3* cam_pos,
|
37 |
+
const int W, int H,
|
38 |
+
const float focal_x, float focal_y,
|
39 |
+
const float tan_fovx, float tan_fovy,
|
40 |
+
int* radii,
|
41 |
+
float2* points_xy_image,
|
42 |
+
float* depths,
|
43 |
+
float* cov3Ds,
|
44 |
+
float* colors,
|
45 |
+
float4* conic_opacity,
|
46 |
+
const dim3 grid,
|
47 |
+
uint32_t* tiles_touched,
|
48 |
+
bool prefiltered);
|
49 |
+
|
50 |
+
// Main rasterization method.
|
51 |
+
void render(
|
52 |
+
const dim3 grid, dim3 block,
|
53 |
+
const uint2* ranges,
|
54 |
+
const uint32_t* point_list,
|
55 |
+
int W, int H,
|
56 |
+
const float2* points_xy_image,
|
57 |
+
const float* features,
|
58 |
+
const float* depths,
|
59 |
+
const float4* conic_opacity,
|
60 |
+
float* out_alpha,
|
61 |
+
uint32_t* n_contrib,
|
62 |
+
const float* bg_color,
|
63 |
+
float* out_color,
|
64 |
+
float* out_depth);
|
65 |
+
}
|
66 |
+
|
67 |
+
|
68 |
+
#endif
|
diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer.h
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#ifndef CUDA_RASTERIZER_H_INCLUDED
|
13 |
+
#define CUDA_RASTERIZER_H_INCLUDED
|
14 |
+
|
15 |
+
#include <vector>
|
16 |
+
#include <functional>
|
17 |
+
|
18 |
+
namespace CudaRasterizer
|
19 |
+
{
|
20 |
+
class Rasterizer
|
21 |
+
{
|
22 |
+
public:
|
23 |
+
|
24 |
+
static void markVisible(
|
25 |
+
int P,
|
26 |
+
float* means3D,
|
27 |
+
float* viewmatrix,
|
28 |
+
float* projmatrix,
|
29 |
+
bool* present);
|
30 |
+
|
31 |
+
static int forward(
|
32 |
+
std::function<char* (size_t)> geometryBuffer,
|
33 |
+
std::function<char* (size_t)> binningBuffer,
|
34 |
+
std::function<char* (size_t)> imageBuffer,
|
35 |
+
const int P, int D, int M,
|
36 |
+
const float* background,
|
37 |
+
const int width, int height,
|
38 |
+
const float* means3D,
|
39 |
+
const float* shs,
|
40 |
+
const float* colors_precomp,
|
41 |
+
const float* opacities,
|
42 |
+
const float* scales,
|
43 |
+
const float scale_modifier,
|
44 |
+
const float* rotations,
|
45 |
+
const float* cov3D_precomp,
|
46 |
+
const float* viewmatrix,
|
47 |
+
const float* projmatrix,
|
48 |
+
const float* cam_pos,
|
49 |
+
const float tan_fovx, float tan_fovy,
|
50 |
+
const bool prefiltered,
|
51 |
+
float* out_color,
|
52 |
+
float* out_depth,
|
53 |
+
float* out_alpha,
|
54 |
+
int* radii = nullptr,
|
55 |
+
bool debug = false);
|
56 |
+
|
57 |
+
static void backward(
|
58 |
+
const int P, int D, int M, int R,
|
59 |
+
const float* background,
|
60 |
+
const int width, int height,
|
61 |
+
const float* means3D,
|
62 |
+
const float* shs,
|
63 |
+
const float* colors_precomp,
|
64 |
+
const float* alphas,
|
65 |
+
const float* scales,
|
66 |
+
const float scale_modifier,
|
67 |
+
const float* rotations,
|
68 |
+
const float* cov3D_precomp,
|
69 |
+
const float* viewmatrix,
|
70 |
+
const float* projmatrix,
|
71 |
+
const float* campos,
|
72 |
+
const float tan_fovx, float tan_fovy,
|
73 |
+
const int* radii,
|
74 |
+
char* geom_buffer,
|
75 |
+
char* binning_buffer,
|
76 |
+
char* image_buffer,
|
77 |
+
const float* dL_dpix,
|
78 |
+
const float* dL_dpix_depth,
|
79 |
+
const float* dL_dalphas,
|
80 |
+
float* dL_dmean2D,
|
81 |
+
float* dL_dts,
|
82 |
+
float* dL_dconic,
|
83 |
+
float* dL_dopacity,
|
84 |
+
float* dL_dcolor,
|
85 |
+
float* dL_ddepth,
|
86 |
+
float* dL_dmean3D,
|
87 |
+
float* dL_dcov3D,
|
88 |
+
float* dL_dsh,
|
89 |
+
float* dL_dscale,
|
90 |
+
float* dL_drot,
|
91 |
+
bool debug);
|
92 |
+
};
|
93 |
+
};
|
94 |
+
|
95 |
+
#endif
|
diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer_impl.cu
ADDED
@@ -0,0 +1,449 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#include "rasterizer_impl.h"
|
13 |
+
#include <iostream>
|
14 |
+
#include <fstream>
|
15 |
+
#include <algorithm>
|
16 |
+
#include <numeric>
|
17 |
+
#include <cuda.h>
|
18 |
+
#include "cuda_runtime.h"
|
19 |
+
#include "device_launch_parameters.h"
|
20 |
+
#include <cub/cub.cuh>
|
21 |
+
#include <cub/device/device_radix_sort.cuh>
|
22 |
+
#define GLM_FORCE_CUDA
|
23 |
+
#include <glm/glm.hpp>
|
24 |
+
|
25 |
+
#include <cooperative_groups.h>
|
26 |
+
#include <cooperative_groups/reduce.h>
|
27 |
+
namespace cg = cooperative_groups;
|
28 |
+
|
29 |
+
#include "auxiliary.h"
|
30 |
+
#include "forward.h"
|
31 |
+
#include "backward.h"
|
32 |
+
|
33 |
+
// Helper function to find the next-highest bit of the MSB
|
34 |
+
// on the CPU.
|
35 |
+
uint32_t getHigherMsb(uint32_t n)
|
36 |
+
{
|
37 |
+
uint32_t msb = sizeof(n) * 4;
|
38 |
+
uint32_t step = msb;
|
39 |
+
while (step > 1)
|
40 |
+
{
|
41 |
+
step /= 2;
|
42 |
+
if (n >> msb)
|
43 |
+
msb += step;
|
44 |
+
else
|
45 |
+
msb -= step;
|
46 |
+
}
|
47 |
+
if (n >> msb)
|
48 |
+
msb++;
|
49 |
+
return msb;
|
50 |
+
}
|
51 |
+
|
52 |
+
// Wrapper method to call auxiliary coarse frustum containment test.
|
53 |
+
// Mark all Gaussians that pass it.
|
54 |
+
__global__ void checkFrustum(int P,
|
55 |
+
const float* orig_points,
|
56 |
+
const float* viewmatrix,
|
57 |
+
const float* projmatrix,
|
58 |
+
bool* present)
|
59 |
+
{
|
60 |
+
auto idx = cg::this_grid().thread_rank();
|
61 |
+
if (idx >= P)
|
62 |
+
return;
|
63 |
+
|
64 |
+
float3 p_view;
|
65 |
+
present[idx] = in_frustum(idx, orig_points, viewmatrix, projmatrix, false, p_view);
|
66 |
+
}
|
67 |
+
|
68 |
+
// Generates one key/value pair for all Gaussian / tile overlaps.
|
69 |
+
// Run once per Gaussian (1:N mapping).
|
70 |
+
__global__ void duplicateWithKeys(
|
71 |
+
int P,
|
72 |
+
const float2* points_xy,
|
73 |
+
const float* depths,
|
74 |
+
const uint32_t* offsets,
|
75 |
+
uint64_t* gaussian_keys_unsorted,
|
76 |
+
uint32_t* gaussian_values_unsorted,
|
77 |
+
int* radii,
|
78 |
+
dim3 grid)
|
79 |
+
{
|
80 |
+
auto idx = cg::this_grid().thread_rank();
|
81 |
+
if (idx >= P)
|
82 |
+
return;
|
83 |
+
|
84 |
+
// Generate no key/value pair for invisible Gaussians
|
85 |
+
if (radii[idx] > 0)
|
86 |
+
{
|
87 |
+
// Find this Gaussian's offset in buffer for writing keys/values.
|
88 |
+
uint32_t off = (idx == 0) ? 0 : offsets[idx - 1];
|
89 |
+
uint2 rect_min, rect_max;
|
90 |
+
|
91 |
+
getRect(points_xy[idx], radii[idx], rect_min, rect_max, grid);
|
92 |
+
|
93 |
+
// For each tile that the bounding rect overlaps, emit a
|
94 |
+
// key/value pair. The key is | tile ID | depth |,
|
95 |
+
// and the value is the ID of the Gaussian. Sorting the values
|
96 |
+
// with this key yields Gaussian IDs in a list, such that they
|
97 |
+
// are first sorted by tile and then by depth.
|
98 |
+
for (int y = rect_min.y; y < rect_max.y; y++)
|
99 |
+
{
|
100 |
+
for (int x = rect_min.x; x < rect_max.x; x++)
|
101 |
+
{
|
102 |
+
uint64_t key = y * grid.x + x;
|
103 |
+
key <<= 32;
|
104 |
+
key |= *((uint32_t*)&depths[idx]);
|
105 |
+
gaussian_keys_unsorted[off] = key;
|
106 |
+
gaussian_values_unsorted[off] = idx;
|
107 |
+
off++;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
// Check keys to see if it is at the start/end of one tile's range in
|
114 |
+
// the full sorted list. If yes, write start/end of this tile.
|
115 |
+
// Run once per instanced (duplicated) Gaussian ID.
|
116 |
+
__global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges)
|
117 |
+
{
|
118 |
+
auto idx = cg::this_grid().thread_rank();
|
119 |
+
if (idx >= L)
|
120 |
+
return;
|
121 |
+
|
122 |
+
// Read tile ID from key. Update start/end of tile range if at limit.
|
123 |
+
uint64_t key = point_list_keys[idx];
|
124 |
+
uint32_t currtile = key >> 32;
|
125 |
+
if (idx == 0)
|
126 |
+
ranges[currtile].x = 0;
|
127 |
+
else
|
128 |
+
{
|
129 |
+
uint32_t prevtile = point_list_keys[idx - 1] >> 32;
|
130 |
+
if (currtile != prevtile)
|
131 |
+
{
|
132 |
+
ranges[prevtile].y = idx;
|
133 |
+
ranges[currtile].x = idx;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
if (idx == L - 1)
|
137 |
+
ranges[currtile].y = L;
|
138 |
+
}
|
139 |
+
|
140 |
+
// Mark Gaussians as visible/invisible, based on view frustum testing
|
141 |
+
void CudaRasterizer::Rasterizer::markVisible(
|
142 |
+
int P,
|
143 |
+
float* means3D,
|
144 |
+
float* viewmatrix,
|
145 |
+
float* projmatrix,
|
146 |
+
bool* present)
|
147 |
+
{
|
148 |
+
checkFrustum << <(P + 255) / 256, 256 >> > (
|
149 |
+
P,
|
150 |
+
means3D,
|
151 |
+
viewmatrix, projmatrix,
|
152 |
+
present);
|
153 |
+
}
|
154 |
+
|
155 |
+
CudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P)
|
156 |
+
{
|
157 |
+
GeometryState geom;
|
158 |
+
obtain(chunk, geom.depths, P, 128);
|
159 |
+
obtain(chunk, geom.clamped, P * 3, 128);
|
160 |
+
obtain(chunk, geom.internal_radii, P, 128);
|
161 |
+
obtain(chunk, geom.means2D, P, 128);
|
162 |
+
obtain(chunk, geom.cov3D, P * 6, 128);
|
163 |
+
obtain(chunk, geom.conic_opacity, P, 128);
|
164 |
+
obtain(chunk, geom.rgb, P * 3, 128);
|
165 |
+
obtain(chunk, geom.tiles_touched, P, 128);
|
166 |
+
cub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P);
|
167 |
+
obtain(chunk, geom.scanning_space, geom.scan_size, 128);
|
168 |
+
obtain(chunk, geom.point_offsets, P, 128);
|
169 |
+
return geom;
|
170 |
+
}
|
171 |
+
|
172 |
+
CudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N)
|
173 |
+
{
|
174 |
+
ImageState img;
|
175 |
+
obtain(chunk, img.n_contrib, N, 128);
|
176 |
+
obtain(chunk, img.ranges, N, 128);
|
177 |
+
return img;
|
178 |
+
}
|
179 |
+
|
180 |
+
CudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P)
|
181 |
+
{
|
182 |
+
BinningState binning;
|
183 |
+
obtain(chunk, binning.point_list, P, 128);
|
184 |
+
obtain(chunk, binning.point_list_unsorted, P, 128);
|
185 |
+
obtain(chunk, binning.point_list_keys, P, 128);
|
186 |
+
obtain(chunk, binning.point_list_keys_unsorted, P, 128);
|
187 |
+
cub::DeviceRadixSort::SortPairs(
|
188 |
+
nullptr, binning.sorting_size,
|
189 |
+
binning.point_list_keys_unsorted, binning.point_list_keys,
|
190 |
+
binning.point_list_unsorted, binning.point_list, P);
|
191 |
+
obtain(chunk, binning.list_sorting_space, binning.sorting_size, 128);
|
192 |
+
return binning;
|
193 |
+
}
|
194 |
+
|
195 |
+
// Forward rendering procedure for differentiable rasterization
|
196 |
+
// of Gaussians.
|
197 |
+
int CudaRasterizer::Rasterizer::forward(
|
198 |
+
std::function<char* (size_t)> geometryBuffer,
|
199 |
+
std::function<char* (size_t)> binningBuffer,
|
200 |
+
std::function<char* (size_t)> imageBuffer,
|
201 |
+
const int P, int D, int M,
|
202 |
+
const float* background,
|
203 |
+
const int width, int height,
|
204 |
+
const float* means3D,
|
205 |
+
const float* shs,
|
206 |
+
const float* colors_precomp,
|
207 |
+
const float* opacities,
|
208 |
+
const float* scales,
|
209 |
+
const float scale_modifier,
|
210 |
+
const float* rotations,
|
211 |
+
const float* cov3D_precomp,
|
212 |
+
const float* viewmatrix,
|
213 |
+
const float* projmatrix,
|
214 |
+
const float* cam_pos,
|
215 |
+
const float tan_fovx, float tan_fovy,
|
216 |
+
const bool prefiltered,
|
217 |
+
float* out_color,
|
218 |
+
float* out_depth,
|
219 |
+
float* out_alpha,
|
220 |
+
int* radii,
|
221 |
+
bool debug)
|
222 |
+
{
|
223 |
+
const float focal_y = height / (2.0f * tan_fovy);
|
224 |
+
const float focal_x = width / (2.0f * tan_fovx);
|
225 |
+
|
226 |
+
size_t chunk_size = required<GeometryState>(P);
|
227 |
+
char* chunkptr = geometryBuffer(chunk_size);
|
228 |
+
GeometryState geomState = GeometryState::fromChunk(chunkptr, P);
|
229 |
+
|
230 |
+
if (radii == nullptr)
|
231 |
+
{
|
232 |
+
radii = geomState.internal_radii;
|
233 |
+
}
|
234 |
+
|
235 |
+
dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
|
236 |
+
dim3 block(BLOCK_X, BLOCK_Y, 1);
|
237 |
+
|
238 |
+
// Dynamically resize image-based auxiliary buffers during training
|
239 |
+
size_t img_chunk_size = required<ImageState>(width * height);
|
240 |
+
char* img_chunkptr = imageBuffer(img_chunk_size);
|
241 |
+
ImageState imgState = ImageState::fromChunk(img_chunkptr, width * height);
|
242 |
+
|
243 |
+
if (NUM_CHANNELS != 3 && colors_precomp == nullptr)
|
244 |
+
{
|
245 |
+
throw std::runtime_error("For non-RGB, provide precomputed Gaussian colors!");
|
246 |
+
}
|
247 |
+
|
248 |
+
// Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB)
|
249 |
+
CHECK_CUDA(FORWARD::preprocess(
|
250 |
+
P, D, M,
|
251 |
+
means3D,
|
252 |
+
(glm::vec3*)scales,
|
253 |
+
scale_modifier,
|
254 |
+
(glm::vec4*)rotations,
|
255 |
+
opacities,
|
256 |
+
shs,
|
257 |
+
geomState.clamped,
|
258 |
+
cov3D_precomp,
|
259 |
+
colors_precomp,
|
260 |
+
viewmatrix, projmatrix,
|
261 |
+
(glm::vec3*)cam_pos,
|
262 |
+
width, height,
|
263 |
+
focal_x, focal_y,
|
264 |
+
tan_fovx, tan_fovy,
|
265 |
+
radii,
|
266 |
+
geomState.means2D,
|
267 |
+
geomState.depths,
|
268 |
+
geomState.cov3D,
|
269 |
+
geomState.rgb,
|
270 |
+
geomState.conic_opacity,
|
271 |
+
tile_grid,
|
272 |
+
geomState.tiles_touched,
|
273 |
+
prefiltered
|
274 |
+
), debug)
|
275 |
+
|
276 |
+
// Compute prefix sum over full list of touched tile counts by Gaussians
|
277 |
+
// E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8]
|
278 |
+
CHECK_CUDA(cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, geomState.tiles_touched, geomState.point_offsets, P), debug)
|
279 |
+
|
280 |
+
// Retrieve total number of Gaussian instances to launch and resize aux buffers
|
281 |
+
int num_rendered;
|
282 |
+
CHECK_CUDA(cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost), debug);
|
283 |
+
|
284 |
+
size_t binning_chunk_size = required<BinningState>(num_rendered);
|
285 |
+
char* binning_chunkptr = binningBuffer(binning_chunk_size);
|
286 |
+
BinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered);
|
287 |
+
|
288 |
+
// For each instance to be rendered, produce adequate [ tile | depth ] key
|
289 |
+
// and corresponding dublicated Gaussian indices to be sorted
|
290 |
+
duplicateWithKeys << <(P + 255) / 256, 256 >> > (
|
291 |
+
P,
|
292 |
+
geomState.means2D,
|
293 |
+
geomState.depths,
|
294 |
+
geomState.point_offsets,
|
295 |
+
binningState.point_list_keys_unsorted,
|
296 |
+
binningState.point_list_unsorted,
|
297 |
+
radii,
|
298 |
+
tile_grid)
|
299 |
+
CHECK_CUDA(, debug)
|
300 |
+
|
301 |
+
int bit = getHigherMsb(tile_grid.x * tile_grid.y);
|
302 |
+
|
303 |
+
// Sort complete list of (duplicated) Gaussian indices by keys
|
304 |
+
CHECK_CUDA(cub::DeviceRadixSort::SortPairs(
|
305 |
+
binningState.list_sorting_space,
|
306 |
+
binningState.sorting_size,
|
307 |
+
binningState.point_list_keys_unsorted, binningState.point_list_keys,
|
308 |
+
binningState.point_list_unsorted, binningState.point_list,
|
309 |
+
num_rendered, 0, 32 + bit), debug)
|
310 |
+
|
311 |
+
CHECK_CUDA(cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)), debug);
|
312 |
+
|
313 |
+
// Identify start and end of per-tile workloads in sorted list
|
314 |
+
if (num_rendered > 0)
|
315 |
+
identifyTileRanges << <(num_rendered + 255) / 256, 256 >> > (
|
316 |
+
num_rendered,
|
317 |
+
binningState.point_list_keys,
|
318 |
+
imgState.ranges);
|
319 |
+
CHECK_CUDA(, debug);
|
320 |
+
|
321 |
+
// Let each tile blend its range of Gaussians independently in parallel
|
322 |
+
const float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb;
|
323 |
+
CHECK_CUDA(FORWARD::render(
|
324 |
+
tile_grid, block,
|
325 |
+
imgState.ranges,
|
326 |
+
binningState.point_list,
|
327 |
+
width, height,
|
328 |
+
geomState.means2D,
|
329 |
+
feature_ptr,
|
330 |
+
geomState.depths,
|
331 |
+
geomState.conic_opacity,
|
332 |
+
out_alpha,
|
333 |
+
imgState.n_contrib,
|
334 |
+
background,
|
335 |
+
out_color,
|
336 |
+
out_depth), debug);
|
337 |
+
|
338 |
+
return num_rendered;
|
339 |
+
}
|
340 |
+
|
341 |
+
// Produce necessary gradients for optimization, corresponding
|
342 |
+
// to forward render pass
|
343 |
+
void CudaRasterizer::Rasterizer::backward(
|
344 |
+
const int P, int D, int M, int R,
|
345 |
+
const float* background,
|
346 |
+
const int width, int height,
|
347 |
+
const float* means3D,
|
348 |
+
const float* shs,
|
349 |
+
const float* colors_precomp,
|
350 |
+
const float* alphas,
|
351 |
+
const float* scales,
|
352 |
+
const float scale_modifier,
|
353 |
+
const float* rotations,
|
354 |
+
const float* cov3D_precomp,
|
355 |
+
const float* viewmatrix,
|
356 |
+
const float* projmatrix,
|
357 |
+
const float* campos,
|
358 |
+
const float tan_fovx, float tan_fovy,
|
359 |
+
const int* radii,
|
360 |
+
char* geom_buffer,
|
361 |
+
char* binning_buffer,
|
362 |
+
char* img_buffer,
|
363 |
+
const float* dL_dpix,
|
364 |
+
const float* dL_dpix_depth,
|
365 |
+
const float* dL_dalphas,
|
366 |
+
float* dL_dmean2D,
|
367 |
+
float* dL_dts,
|
368 |
+
float* dL_dconic,
|
369 |
+
float* dL_dopacity,
|
370 |
+
float* dL_dcolor,
|
371 |
+
float* dL_ddepth,
|
372 |
+
float* dL_dmean3D,
|
373 |
+
float* dL_dcov3D,
|
374 |
+
float* dL_dsh,
|
375 |
+
float* dL_dscale,
|
376 |
+
float* dL_drot,
|
377 |
+
bool debug)
|
378 |
+
{
|
379 |
+
GeometryState geomState = GeometryState::fromChunk(geom_buffer, P);
|
380 |
+
BinningState binningState = BinningState::fromChunk(binning_buffer, R);
|
381 |
+
ImageState imgState = ImageState::fromChunk(img_buffer, width * height);
|
382 |
+
|
383 |
+
if (radii == nullptr)
|
384 |
+
{
|
385 |
+
radii = geomState.internal_radii;
|
386 |
+
}
|
387 |
+
|
388 |
+
const float focal_y = height / (2.0f * tan_fovy);
|
389 |
+
const float focal_x = width / (2.0f * tan_fovx);
|
390 |
+
|
391 |
+
const dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);
|
392 |
+
const dim3 block(BLOCK_X, BLOCK_Y, 1);
|
393 |
+
|
394 |
+
// Compute loss gradients w.r.t. 2D mean position, conic matrix,
|
395 |
+
// opacity and RGB of Gaussians from per-pixel loss gradients.
|
396 |
+
// If we were given precomputed colors and not SHs, use them.
|
397 |
+
const float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb;
|
398 |
+
const float* depth_ptr = geomState.depths;
|
399 |
+
CHECK_CUDA(BACKWARD::render(
|
400 |
+
tile_grid,
|
401 |
+
block,
|
402 |
+
imgState.ranges,
|
403 |
+
binningState.point_list,
|
404 |
+
width, height,
|
405 |
+
background,
|
406 |
+
geomState.means2D,
|
407 |
+
geomState.conic_opacity,
|
408 |
+
color_ptr,
|
409 |
+
depth_ptr,
|
410 |
+
alphas,
|
411 |
+
imgState.n_contrib,
|
412 |
+
dL_dpix,
|
413 |
+
dL_dpix_depth,
|
414 |
+
dL_dalphas,
|
415 |
+
(float3*)dL_dmean2D,
|
416 |
+
(float4*)dL_dconic,
|
417 |
+
dL_dopacity,
|
418 |
+
dL_dcolor,
|
419 |
+
dL_ddepth), debug)
|
420 |
+
|
421 |
+
// Take care of the rest of preprocessing. Was the precomputed covariance
|
422 |
+
// given to us or a scales/rot pair? If precomputed, pass that. If not,
|
423 |
+
// use the one we computed ourselves.
|
424 |
+
const float* cov3D_ptr = (cov3D_precomp != nullptr) ? cov3D_precomp : geomState.cov3D;
|
425 |
+
CHECK_CUDA(BACKWARD::preprocess(P, D, M,
|
426 |
+
(float3*)means3D,
|
427 |
+
radii,
|
428 |
+
shs,
|
429 |
+
geomState.clamped,
|
430 |
+
(glm::vec3*)scales,
|
431 |
+
(glm::vec4*)rotations,
|
432 |
+
scale_modifier,
|
433 |
+
cov3D_ptr,
|
434 |
+
viewmatrix,
|
435 |
+
projmatrix,
|
436 |
+
focal_x, focal_y,
|
437 |
+
tan_fovx, tan_fovy,
|
438 |
+
(glm::vec3*)campos,
|
439 |
+
(float3*)dL_dmean2D,
|
440 |
+
(float3*)dL_dts,
|
441 |
+
dL_dconic,
|
442 |
+
(glm::vec3*)dL_dmean3D,
|
443 |
+
dL_dcolor,
|
444 |
+
dL_ddepth,
|
445 |
+
dL_dcov3D,
|
446 |
+
dL_dsh,
|
447 |
+
(glm::vec3*)dL_dscale,
|
448 |
+
(glm::vec4*)dL_drot), debug)
|
449 |
+
}
|
diff-gaussian-rasterization-camera/cuda_rasterizer/rasterizer_impl.h
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#pragma once
|
13 |
+
|
14 |
+
#include <iostream>
|
15 |
+
#include <vector>
|
16 |
+
#include "rasterizer.h"
|
17 |
+
#include <cuda_runtime_api.h>
|
18 |
+
|
19 |
+
namespace CudaRasterizer
|
20 |
+
{
|
21 |
+
template <typename T>
|
22 |
+
static void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment)
|
23 |
+
{
|
24 |
+
std::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1);
|
25 |
+
ptr = reinterpret_cast<T*>(offset);
|
26 |
+
chunk = reinterpret_cast<char*>(ptr + count);
|
27 |
+
}
|
28 |
+
|
29 |
+
struct GeometryState
|
30 |
+
{
|
31 |
+
size_t scan_size;
|
32 |
+
float* depths;
|
33 |
+
char* scanning_space;
|
34 |
+
bool* clamped;
|
35 |
+
int* internal_radii;
|
36 |
+
float2* means2D;
|
37 |
+
float* cov3D;
|
38 |
+
float4* conic_opacity;
|
39 |
+
float* rgb;
|
40 |
+
uint32_t* point_offsets;
|
41 |
+
uint32_t* tiles_touched;
|
42 |
+
|
43 |
+
static GeometryState fromChunk(char*& chunk, size_t P);
|
44 |
+
};
|
45 |
+
|
46 |
+
struct ImageState
|
47 |
+
{
|
48 |
+
uint2* ranges;
|
49 |
+
uint32_t* n_contrib;
|
50 |
+
|
51 |
+
static ImageState fromChunk(char*& chunk, size_t N);
|
52 |
+
};
|
53 |
+
|
54 |
+
struct BinningState
|
55 |
+
{
|
56 |
+
size_t sorting_size;
|
57 |
+
uint64_t* point_list_keys_unsorted;
|
58 |
+
uint64_t* point_list_keys;
|
59 |
+
uint32_t* point_list_unsorted;
|
60 |
+
uint32_t* point_list;
|
61 |
+
char* list_sorting_space;
|
62 |
+
|
63 |
+
static BinningState fromChunk(char*& chunk, size_t P);
|
64 |
+
};
|
65 |
+
|
66 |
+
template<typename T>
|
67 |
+
size_t required(size_t P)
|
68 |
+
{
|
69 |
+
char* size = nullptr;
|
70 |
+
T::fromChunk(size, P);
|
71 |
+
return ((size_t)size) + 128;
|
72 |
+
}
|
73 |
+
};
|
diff-gaussian-rasterization-camera/diff_gaussian_rasterization/__init__.py
ADDED
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#
|
2 |
+
# Copyright (C) 2023, Inria
|
3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
# All rights reserved.
|
5 |
+
#
|
6 |
+
# This software is free for non-commercial, research and evaluation use
|
7 |
+
# under the terms of the LICENSE.md file.
|
8 |
+
#
|
9 |
+
# For inquiries contact [email protected]
|
10 |
+
#
|
11 |
+
|
12 |
+
from typing import NamedTuple
|
13 |
+
import torch.nn as nn
|
14 |
+
import torch
|
15 |
+
from . import _C
|
16 |
+
|
17 |
+
def cpu_deep_copy_tuple(input_tuple):
|
18 |
+
copied_tensors = [item.cpu().clone() if isinstance(item, torch.Tensor) else item for item in input_tuple]
|
19 |
+
return tuple(copied_tensors)
|
20 |
+
|
21 |
+
def rasterize_gaussians(
|
22 |
+
means3D,
|
23 |
+
means2D,
|
24 |
+
sh,
|
25 |
+
colors_precomp,
|
26 |
+
opacities,
|
27 |
+
scales,
|
28 |
+
rotations,
|
29 |
+
cov3Ds_precomp,
|
30 |
+
viewmat,
|
31 |
+
raster_settings,
|
32 |
+
):
|
33 |
+
return _RasterizeGaussians.apply(
|
34 |
+
means3D,
|
35 |
+
means2D,
|
36 |
+
sh,
|
37 |
+
colors_precomp,
|
38 |
+
opacities,
|
39 |
+
scales,
|
40 |
+
rotations,
|
41 |
+
cov3Ds_precomp,
|
42 |
+
viewmat,
|
43 |
+
raster_settings,
|
44 |
+
)
|
45 |
+
|
46 |
+
class _RasterizeGaussians(torch.autograd.Function):
|
47 |
+
@staticmethod
|
48 |
+
def forward(
|
49 |
+
ctx,
|
50 |
+
means3D,
|
51 |
+
means2D,
|
52 |
+
sh,
|
53 |
+
colors_precomp,
|
54 |
+
opacities,
|
55 |
+
scales,
|
56 |
+
rotations,
|
57 |
+
cov3Ds_precomp,
|
58 |
+
viewmat,
|
59 |
+
raster_settings,
|
60 |
+
):
|
61 |
+
|
62 |
+
# Restructure arguments the way that the C++ lib expects them
|
63 |
+
args = (
|
64 |
+
raster_settings.bg,
|
65 |
+
means3D,
|
66 |
+
colors_precomp,
|
67 |
+
opacities,
|
68 |
+
scales,
|
69 |
+
rotations,
|
70 |
+
raster_settings.scale_modifier,
|
71 |
+
cov3Ds_precomp,
|
72 |
+
raster_settings.viewmatrix,
|
73 |
+
raster_settings.projmatrix,
|
74 |
+
raster_settings.tanfovx,
|
75 |
+
raster_settings.tanfovy,
|
76 |
+
raster_settings.image_height,
|
77 |
+
raster_settings.image_width,
|
78 |
+
sh,
|
79 |
+
raster_settings.sh_degree,
|
80 |
+
raster_settings.campos,
|
81 |
+
raster_settings.prefiltered,
|
82 |
+
raster_settings.debug
|
83 |
+
)
|
84 |
+
|
85 |
+
# Invoke C++/CUDA rasterizer
|
86 |
+
if raster_settings.debug:
|
87 |
+
cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted
|
88 |
+
try:
|
89 |
+
num_rendered, color, depth, alpha, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)
|
90 |
+
except Exception as ex:
|
91 |
+
torch.save(cpu_args, "snapshot_fw.dump")
|
92 |
+
print("\nAn error occured in forward. Please forward snapshot_fw.dump for debugging.")
|
93 |
+
raise ex
|
94 |
+
else:
|
95 |
+
num_rendered, color, depth, alpha, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)
|
96 |
+
|
97 |
+
# Keep relevant tensors for backward
|
98 |
+
ctx.raster_settings = raster_settings
|
99 |
+
ctx.num_rendered = num_rendered
|
100 |
+
ctx.save_for_backward(colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer, alpha)
|
101 |
+
return color, radii, depth, alpha
|
102 |
+
|
103 |
+
@staticmethod
|
104 |
+
def backward(ctx, grad_color, grad_radii, grad_depth, grad_alpha):
|
105 |
+
|
106 |
+
# Restore necessary values from context
|
107 |
+
num_rendered = ctx.num_rendered
|
108 |
+
raster_settings = ctx.raster_settings
|
109 |
+
colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer, alpha = ctx.saved_tensors
|
110 |
+
|
111 |
+
# Restructure args as C++ method expects them
|
112 |
+
args = (raster_settings.bg,
|
113 |
+
means3D,
|
114 |
+
radii,
|
115 |
+
colors_precomp,
|
116 |
+
scales,
|
117 |
+
rotations,
|
118 |
+
raster_settings.scale_modifier,
|
119 |
+
cov3Ds_precomp,
|
120 |
+
raster_settings.viewmatrix,
|
121 |
+
raster_settings.projmatrix,
|
122 |
+
raster_settings.tanfovx,
|
123 |
+
raster_settings.tanfovy,
|
124 |
+
grad_color,
|
125 |
+
grad_depth,
|
126 |
+
grad_alpha,
|
127 |
+
sh,
|
128 |
+
raster_settings.sh_degree,
|
129 |
+
raster_settings.campos,
|
130 |
+
geomBuffer,
|
131 |
+
num_rendered,
|
132 |
+
binningBuffer,
|
133 |
+
imgBuffer,
|
134 |
+
alpha,
|
135 |
+
raster_settings.debug)
|
136 |
+
|
137 |
+
# Compute gradients for relevant tensors by invoking backward method
|
138 |
+
if raster_settings.debug:
|
139 |
+
cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted
|
140 |
+
try:
|
141 |
+
grad_means2D, grad_ts, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)
|
142 |
+
except Exception as ex:
|
143 |
+
torch.save(cpu_args, "snapshot_bw.dump")
|
144 |
+
print("\nAn error occured in backward. Writing snapshot_bw.dump for debugging.\n")
|
145 |
+
raise ex
|
146 |
+
else:
|
147 |
+
grad_means2D, grad_ts, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)
|
148 |
+
|
149 |
+
with torch.no_grad():
|
150 |
+
# return viewmat gradients
|
151 |
+
projmat = raster_settings.projmatrix.T
|
152 |
+
means_h = torch.cat([means3D, torch.ones_like(means3D[..., :1])], dim=-1)
|
153 |
+
p_hom = torch.einsum("ij,nj->ni", projmat, means_h)
|
154 |
+
rw = 1 / (p_hom[..., 3] + 1e-5)
|
155 |
+
|
156 |
+
proj = raster_settings.perspectivematrix.flatten()
|
157 |
+
# v_t is the grad w.r.t. the 3D mean in camera coordinates
|
158 |
+
# Math reference (https://arxiv.org/pdf/2312.02121.pdf)
|
159 |
+
# One source is from grad_means2D (the grad w.r.t. the mean in ND coordinates, t' in the paper)
|
160 |
+
v_tx = grad_means2D[:, 0] * (proj[0] * rw - proj[3] * p_hom[:, 0] * torch.square(rw))
|
161 |
+
v_tx += grad_means2D[:, 1] * (proj[1] * rw - proj[3] * p_hom[:, 1] * torch.square(rw))
|
162 |
+
v_ty = grad_means2D[:, 0] * (proj[4] * rw - proj[7] * p_hom[:, 0] * torch.square(rw))
|
163 |
+
v_ty += grad_means2D[:, 1] * (proj[5] * rw - proj[7] * p_hom[:, 1] * torch.square(rw))
|
164 |
+
v_tz = grad_means2D[:, 0] * (proj[8] * rw - proj[11] * p_hom[:, 0] * torch.square(rw))
|
165 |
+
v_tz += grad_means2D[:, 1] * (proj[9] * rw - proj[11] * p_hom[:, 1] * torch.square(rw))
|
166 |
+
v_t = torch.stack(
|
167 |
+
[
|
168 |
+
v_tx,
|
169 |
+
v_ty,
|
170 |
+
v_tz,
|
171 |
+
torch.zeros_like(v_tx),
|
172 |
+
],
|
173 |
+
dim=-1,
|
174 |
+
)
|
175 |
+
# Another source of gradients (grad_ts)
|
176 |
+
# t is involved in the affine transform J when computing the 2D covariance matrix
|
177 |
+
# grad_ts is gathered from "cuda_rasterizer/backward.cu"
|
178 |
+
v_t[:, :3] += grad_ts
|
179 |
+
# Finally, we compute the grad w.r.t. the viewmatrix from v_t
|
180 |
+
grad_viewmat = torch.einsum("ni,nj->ij", v_t, means_h).T # We transposed the viewmatrix
|
181 |
+
|
182 |
+
grads = (
|
183 |
+
grad_means3D,
|
184 |
+
grad_means2D,
|
185 |
+
grad_sh,
|
186 |
+
grad_colors_precomp,
|
187 |
+
grad_opacities,
|
188 |
+
grad_scales,
|
189 |
+
grad_rotations,
|
190 |
+
grad_cov3Ds_precomp,
|
191 |
+
grad_viewmat,
|
192 |
+
None,
|
193 |
+
)
|
194 |
+
|
195 |
+
return grads
|
196 |
+
|
197 |
+
class GaussianRasterizationSettings(NamedTuple):
|
198 |
+
image_height: int
|
199 |
+
image_width: int
|
200 |
+
tanfovx : float
|
201 |
+
tanfovy : float
|
202 |
+
bg : torch.Tensor
|
203 |
+
scale_modifier : float
|
204 |
+
viewmatrix : torch.Tensor
|
205 |
+
perspectivematrix: torch.Tensor
|
206 |
+
projmatrix : torch.Tensor
|
207 |
+
sh_degree : int
|
208 |
+
campos : torch.Tensor
|
209 |
+
prefiltered : bool
|
210 |
+
debug : bool
|
211 |
+
|
212 |
+
class GaussianRasterizer(nn.Module):
|
213 |
+
def __init__(self, raster_settings):
|
214 |
+
super().__init__()
|
215 |
+
self.raster_settings = raster_settings
|
216 |
+
|
217 |
+
def markVisible(self, positions):
|
218 |
+
# Mark visible points (based on frustum culling for camera) with a boolean
|
219 |
+
with torch.no_grad():
|
220 |
+
raster_settings = self.raster_settings
|
221 |
+
visible = _C.mark_visible(
|
222 |
+
positions,
|
223 |
+
raster_settings.viewmatrix,
|
224 |
+
raster_settings.projmatrix)
|
225 |
+
|
226 |
+
return visible
|
227 |
+
|
228 |
+
def forward(self, means3D, means2D, opacities, shs = None, colors_precomp = None, scales = None, rotations = None, cov3D_precomp = None, viewmat = None):
|
229 |
+
|
230 |
+
raster_settings = self.raster_settings
|
231 |
+
|
232 |
+
if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None):
|
233 |
+
raise Exception('Please provide excatly one of either SHs or precomputed colors!')
|
234 |
+
|
235 |
+
if ((scales is None or rotations is None) and cov3D_precomp is None) or ((scales is not None or rotations is not None) and cov3D_precomp is not None):
|
236 |
+
raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!')
|
237 |
+
|
238 |
+
if shs is None:
|
239 |
+
shs = torch.Tensor([])
|
240 |
+
if colors_precomp is None:
|
241 |
+
colors_precomp = torch.Tensor([])
|
242 |
+
|
243 |
+
if scales is None:
|
244 |
+
scales = torch.Tensor([])
|
245 |
+
if rotations is None:
|
246 |
+
rotations = torch.Tensor([])
|
247 |
+
if cov3D_precomp is None:
|
248 |
+
cov3D_precomp = torch.Tensor([])
|
249 |
+
|
250 |
+
# Invoke C++/CUDA rasterization routine
|
251 |
+
return rasterize_gaussians(
|
252 |
+
means3D,
|
253 |
+
means2D,
|
254 |
+
shs,
|
255 |
+
colors_precomp,
|
256 |
+
opacities,
|
257 |
+
scales,
|
258 |
+
rotations,
|
259 |
+
cov3D_precomp,
|
260 |
+
viewmat,
|
261 |
+
raster_settings,
|
262 |
+
)
|
263 |
+
|
diff-gaussian-rasterization-camera/ext.cpp
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#include <torch/extension.h>
|
13 |
+
#include "rasterize_points.h"
|
14 |
+
|
15 |
+
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
|
16 |
+
m.def("rasterize_gaussians", &RasterizeGaussiansCUDA);
|
17 |
+
m.def("rasterize_gaussians_backward", &RasterizeGaussiansBackwardCUDA);
|
18 |
+
m.def("mark_visible", &markVisible);
|
19 |
+
}
|
diff-gaussian-rasterization-camera/gs_renderer.py
ADDED
@@ -0,0 +1,866 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import math
|
3 |
+
import numpy as np
|
4 |
+
from typing import NamedTuple
|
5 |
+
from plyfile import PlyData, PlyElement
|
6 |
+
|
7 |
+
import torch
|
8 |
+
from torch import nn
|
9 |
+
|
10 |
+
from diff_gaussian_rasterization import (
|
11 |
+
GaussianRasterizationSettings,
|
12 |
+
GaussianRasterizer,
|
13 |
+
)
|
14 |
+
from simple_knn._C import distCUDA2
|
15 |
+
|
16 |
+
from sh_utils import eval_sh, SH2RGB, RGB2SH
|
17 |
+
from mesh import Mesh
|
18 |
+
from mesh_utils import decimate_mesh, clean_mesh
|
19 |
+
from cam_utils_torch import orbit_camera
|
20 |
+
|
21 |
+
import kiui
|
22 |
+
|
23 |
+
def inverse_sigmoid(x):
|
24 |
+
return torch.log(x/(1-x))
|
25 |
+
|
26 |
+
def get_expon_lr_func(
|
27 |
+
lr_init, lr_final, lr_delay_steps=0, lr_delay_mult=1.0, max_steps=1000000
|
28 |
+
):
|
29 |
+
|
30 |
+
def helper(step):
|
31 |
+
if lr_init == lr_final:
|
32 |
+
# constant lr, ignore other params
|
33 |
+
return lr_init
|
34 |
+
if step < 0 or (lr_init == 0.0 and lr_final == 0.0):
|
35 |
+
# Disable this parameter
|
36 |
+
return 0.0
|
37 |
+
if lr_delay_steps > 0:
|
38 |
+
# A kind of reverse cosine decay.
|
39 |
+
delay_rate = lr_delay_mult + (1 - lr_delay_mult) * np.sin(
|
40 |
+
0.5 * np.pi * np.clip(step / lr_delay_steps, 0, 1)
|
41 |
+
)
|
42 |
+
else:
|
43 |
+
delay_rate = 1.0
|
44 |
+
t = np.clip(step / max_steps, 0, 1)
|
45 |
+
log_lerp = np.exp(np.log(lr_init) * (1 - t) + np.log(lr_final) * t)
|
46 |
+
return delay_rate * log_lerp
|
47 |
+
|
48 |
+
return helper
|
49 |
+
|
50 |
+
|
51 |
+
def strip_lowerdiag(L):
|
52 |
+
uncertainty = torch.zeros((L.shape[0], 6), dtype=torch.float, device="cuda")
|
53 |
+
|
54 |
+
uncertainty[:, 0] = L[:, 0, 0]
|
55 |
+
uncertainty[:, 1] = L[:, 0, 1]
|
56 |
+
uncertainty[:, 2] = L[:, 0, 2]
|
57 |
+
uncertainty[:, 3] = L[:, 1, 1]
|
58 |
+
uncertainty[:, 4] = L[:, 1, 2]
|
59 |
+
uncertainty[:, 5] = L[:, 2, 2]
|
60 |
+
return uncertainty
|
61 |
+
|
62 |
+
def strip_symmetric(sym):
|
63 |
+
return strip_lowerdiag(sym)
|
64 |
+
|
65 |
+
def gaussian_3d_coeff(xyzs, covs):
|
66 |
+
# xyzs: [N, 3]
|
67 |
+
# covs: [N, 6]
|
68 |
+
x, y, z = xyzs[:, 0], xyzs[:, 1], xyzs[:, 2]
|
69 |
+
a, b, c, d, e, f = covs[:, 0], covs[:, 1], covs[:, 2], covs[:, 3], covs[:, 4], covs[:, 5]
|
70 |
+
|
71 |
+
# eps must be small enough !!!
|
72 |
+
inv_det = 1 / (a * d * f + 2 * e * c * b - e**2 * a - c**2 * d - b**2 * f + 1e-24)
|
73 |
+
inv_a = (d * f - e**2) * inv_det
|
74 |
+
inv_b = (e * c - b * f) * inv_det
|
75 |
+
inv_c = (e * b - c * d) * inv_det
|
76 |
+
inv_d = (a * f - c**2) * inv_det
|
77 |
+
inv_e = (b * c - e * a) * inv_det
|
78 |
+
inv_f = (a * d - b**2) * inv_det
|
79 |
+
|
80 |
+
power = -0.5 * (x**2 * inv_a + y**2 * inv_d + z**2 * inv_f) - x * y * inv_b - x * z * inv_c - y * z * inv_e
|
81 |
+
|
82 |
+
power[power > 0] = -1e10 # abnormal values... make weights 0
|
83 |
+
|
84 |
+
return torch.exp(power)
|
85 |
+
|
86 |
+
def build_rotation(r):
|
87 |
+
norm = torch.sqrt(r[:,0]*r[:,0] + r[:,1]*r[:,1] + r[:,2]*r[:,2] + r[:,3]*r[:,3])
|
88 |
+
|
89 |
+
q = r / norm[:, None]
|
90 |
+
|
91 |
+
R = torch.zeros((q.size(0), 3, 3), device='cuda')
|
92 |
+
|
93 |
+
r = q[:, 0]
|
94 |
+
x = q[:, 1]
|
95 |
+
y = q[:, 2]
|
96 |
+
z = q[:, 3]
|
97 |
+
|
98 |
+
R[:, 0, 0] = 1 - 2 * (y*y + z*z)
|
99 |
+
R[:, 0, 1] = 2 * (x*y - r*z)
|
100 |
+
R[:, 0, 2] = 2 * (x*z + r*y)
|
101 |
+
R[:, 1, 0] = 2 * (x*y + r*z)
|
102 |
+
R[:, 1, 1] = 1 - 2 * (x*x + z*z)
|
103 |
+
R[:, 1, 2] = 2 * (y*z - r*x)
|
104 |
+
R[:, 2, 0] = 2 * (x*z - r*y)
|
105 |
+
R[:, 2, 1] = 2 * (y*z + r*x)
|
106 |
+
R[:, 2, 2] = 1 - 2 * (x*x + y*y)
|
107 |
+
return R
|
108 |
+
|
109 |
+
def build_scaling_rotation(s, r):
|
110 |
+
L = torch.zeros((s.shape[0], 3, 3), dtype=torch.float, device="cuda")
|
111 |
+
R = build_rotation(r)
|
112 |
+
|
113 |
+
L[:,0,0] = s[:,0]
|
114 |
+
L[:,1,1] = s[:,1]
|
115 |
+
L[:,2,2] = s[:,2]
|
116 |
+
|
117 |
+
L = R @ L
|
118 |
+
return L
|
119 |
+
|
120 |
+
class BasicPointCloud(NamedTuple):
|
121 |
+
points: np.array
|
122 |
+
colors: np.array
|
123 |
+
normals: np.array
|
124 |
+
|
125 |
+
|
126 |
+
class GaussianModel:
|
127 |
+
|
128 |
+
def setup_functions(self):
|
129 |
+
def build_covariance_from_scaling_rotation(scaling, scaling_modifier, rotation):
|
130 |
+
L = build_scaling_rotation(scaling_modifier * scaling, rotation)
|
131 |
+
actual_covariance = L @ L.transpose(1, 2)
|
132 |
+
symm = strip_symmetric(actual_covariance)
|
133 |
+
return symm
|
134 |
+
|
135 |
+
self.scaling_activation = torch.exp
|
136 |
+
self.scaling_inverse_activation = torch.log
|
137 |
+
|
138 |
+
self.covariance_activation = build_covariance_from_scaling_rotation
|
139 |
+
|
140 |
+
self.opacity_activation = torch.sigmoid
|
141 |
+
self.inverse_opacity_activation = inverse_sigmoid
|
142 |
+
|
143 |
+
self.rotation_activation = torch.nn.functional.normalize
|
144 |
+
|
145 |
+
|
146 |
+
def __init__(self, sh_degree : int):
|
147 |
+
self.active_sh_degree = 0
|
148 |
+
self.max_sh_degree = sh_degree
|
149 |
+
self._xyz = torch.empty(0)
|
150 |
+
self._features_dc = torch.empty(0)
|
151 |
+
self._features_rest = torch.empty(0)
|
152 |
+
self._scaling = torch.empty(0)
|
153 |
+
self._rotation = torch.empty(0)
|
154 |
+
self._opacity = torch.empty(0)
|
155 |
+
self.max_radii2D = torch.empty(0)
|
156 |
+
self.xyz_gradient_accum = torch.empty(0)
|
157 |
+
self.denom = torch.empty(0)
|
158 |
+
self.optimizer = None
|
159 |
+
self.percent_dense = 0
|
160 |
+
self.spatial_lr_scale = 0
|
161 |
+
self.setup_functions()
|
162 |
+
|
163 |
+
def capture(self):
|
164 |
+
return (
|
165 |
+
self.active_sh_degree,
|
166 |
+
self._xyz,
|
167 |
+
self._features_dc,
|
168 |
+
self._features_rest,
|
169 |
+
self._scaling,
|
170 |
+
self._rotation,
|
171 |
+
self._opacity,
|
172 |
+
self.max_radii2D,
|
173 |
+
self.xyz_gradient_accum,
|
174 |
+
self.denom,
|
175 |
+
self.optimizer.state_dict(),
|
176 |
+
self.spatial_lr_scale,
|
177 |
+
)
|
178 |
+
|
179 |
+
def restore(self, model_args, training_args):
|
180 |
+
(self.active_sh_degree,
|
181 |
+
self._xyz,
|
182 |
+
self._features_dc,
|
183 |
+
self._features_rest,
|
184 |
+
self._scaling,
|
185 |
+
self._rotation,
|
186 |
+
self._opacity,
|
187 |
+
self.max_radii2D,
|
188 |
+
xyz_gradient_accum,
|
189 |
+
denom,
|
190 |
+
opt_dict,
|
191 |
+
self.spatial_lr_scale) = model_args
|
192 |
+
self.training_setup(training_args)
|
193 |
+
self.xyz_gradient_accum = xyz_gradient_accum
|
194 |
+
self.denom = denom
|
195 |
+
self.optimizer.load_state_dict(opt_dict)
|
196 |
+
|
197 |
+
@property
|
198 |
+
def get_scaling(self):
|
199 |
+
return self.scaling_activation(self._scaling)
|
200 |
+
|
201 |
+
@property
|
202 |
+
def get_rotation(self):
|
203 |
+
return self.rotation_activation(self._rotation)
|
204 |
+
|
205 |
+
@property
|
206 |
+
def get_xyz(self):
|
207 |
+
return self._xyz
|
208 |
+
|
209 |
+
@property
|
210 |
+
def get_features(self):
|
211 |
+
features_dc = self._features_dc
|
212 |
+
features_rest = self._features_rest
|
213 |
+
return torch.cat((features_dc, features_rest), dim=1)
|
214 |
+
|
215 |
+
@property
|
216 |
+
def get_opacity(self):
|
217 |
+
return self.opacity_activation(self._opacity)
|
218 |
+
|
219 |
+
@torch.no_grad()
|
220 |
+
def extract_fields(self, resolution=128, num_blocks=16, relax_ratio=1.5):
|
221 |
+
# resolution: resolution of field
|
222 |
+
|
223 |
+
block_size = 2 / num_blocks
|
224 |
+
|
225 |
+
assert resolution % block_size == 0
|
226 |
+
split_size = resolution // num_blocks
|
227 |
+
|
228 |
+
opacities = self.get_opacity
|
229 |
+
|
230 |
+
# pre-filter low opacity gaussians to save computation
|
231 |
+
mask = (opacities > 0.005).squeeze(1)
|
232 |
+
|
233 |
+
opacities = opacities[mask]
|
234 |
+
xyzs = self.get_xyz[mask]
|
235 |
+
stds = self.get_scaling[mask]
|
236 |
+
|
237 |
+
# normalize to ~ [-1, 1]
|
238 |
+
mn, mx = xyzs.amin(0), xyzs.amax(0)
|
239 |
+
self.center = (mn + mx) / 2
|
240 |
+
self.scale = 1.8 / (mx - mn).amax().item()
|
241 |
+
|
242 |
+
xyzs = (xyzs - self.center) * self.scale
|
243 |
+
stds = stds * self.scale
|
244 |
+
|
245 |
+
covs = self.covariance_activation(stds, 1, self._rotation[mask])
|
246 |
+
|
247 |
+
# tile
|
248 |
+
device = opacities.device
|
249 |
+
occ = torch.zeros([resolution] * 3, dtype=torch.float32, device=device)
|
250 |
+
|
251 |
+
X = torch.linspace(-1, 1, resolution).split(split_size)
|
252 |
+
Y = torch.linspace(-1, 1, resolution).split(split_size)
|
253 |
+
Z = torch.linspace(-1, 1, resolution).split(split_size)
|
254 |
+
|
255 |
+
|
256 |
+
# loop blocks (assume max size of gaussian is small than relax_ratio * block_size !!!)
|
257 |
+
for xi, xs in enumerate(X):
|
258 |
+
for yi, ys in enumerate(Y):
|
259 |
+
for zi, zs in enumerate(Z):
|
260 |
+
xx, yy, zz = torch.meshgrid(xs, ys, zs)
|
261 |
+
# sample points [M, 3]
|
262 |
+
pts = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1), zz.reshape(-1, 1)], dim=-1).to(device)
|
263 |
+
# in-tile gaussians mask
|
264 |
+
vmin, vmax = pts.amin(0), pts.amax(0)
|
265 |
+
vmin -= block_size * relax_ratio
|
266 |
+
vmax += block_size * relax_ratio
|
267 |
+
mask = (xyzs < vmax).all(-1) & (xyzs > vmin).all(-1)
|
268 |
+
# if hit no gaussian, continue to next block
|
269 |
+
if not mask.any():
|
270 |
+
continue
|
271 |
+
mask_xyzs = xyzs[mask] # [L, 3]
|
272 |
+
mask_covs = covs[mask] # [L, 6]
|
273 |
+
mask_opas = opacities[mask].view(1, -1) # [L, 1] --> [1, L]
|
274 |
+
|
275 |
+
# query per point-gaussian pair.
|
276 |
+
g_pts = pts.unsqueeze(1).repeat(1, mask_covs.shape[0], 1) - mask_xyzs.unsqueeze(0) # [M, L, 3]
|
277 |
+
g_covs = mask_covs.unsqueeze(0).repeat(pts.shape[0], 1, 1) # [M, L, 6]
|
278 |
+
|
279 |
+
# batch on gaussian to avoid OOM
|
280 |
+
batch_g = 1024
|
281 |
+
val = 0
|
282 |
+
for start in range(0, g_covs.shape[1], batch_g):
|
283 |
+
end = min(start + batch_g, g_covs.shape[1])
|
284 |
+
w = gaussian_3d_coeff(g_pts[:, start:end].reshape(-1, 3), g_covs[:, start:end].reshape(-1, 6)).reshape(pts.shape[0], -1) # [M, l]
|
285 |
+
val += (mask_opas[:, start:end] * w).sum(-1)
|
286 |
+
|
287 |
+
# kiui.lo(val, mask_opas, w)
|
288 |
+
|
289 |
+
occ[xi * split_size: xi * split_size + len(xs),
|
290 |
+
yi * split_size: yi * split_size + len(ys),
|
291 |
+
zi * split_size: zi * split_size + len(zs)] = val.reshape(len(xs), len(ys), len(zs))
|
292 |
+
|
293 |
+
kiui.lo(occ, verbose=1)
|
294 |
+
|
295 |
+
return occ
|
296 |
+
|
297 |
+
def extract_mesh(self, path, density_thresh=1, resolution=128, decimate_target=1e5):
|
298 |
+
|
299 |
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
300 |
+
|
301 |
+
occ = self.extract_fields(resolution).detach().cpu().numpy()
|
302 |
+
|
303 |
+
import mcubes
|
304 |
+
vertices, triangles = mcubes.marching_cubes(occ, density_thresh)
|
305 |
+
vertices = vertices / (resolution - 1.0) * 2 - 1
|
306 |
+
|
307 |
+
# transform back to the original space
|
308 |
+
vertices = vertices / self.scale + self.center.detach().cpu().numpy()
|
309 |
+
|
310 |
+
vertices, triangles = clean_mesh(vertices, triangles, remesh=True, remesh_size=0.015)
|
311 |
+
if decimate_target > 0 and triangles.shape[0] > decimate_target:
|
312 |
+
vertices, triangles = decimate_mesh(vertices, triangles, decimate_target)
|
313 |
+
|
314 |
+
v = torch.from_numpy(vertices.astype(np.float32)).contiguous().cuda()
|
315 |
+
f = torch.from_numpy(triangles.astype(np.int32)).contiguous().cuda()
|
316 |
+
|
317 |
+
print(
|
318 |
+
f"[INFO] marching cubes result: {v.shape} ({v.min().item()}-{v.max().item()}), {f.shape}"
|
319 |
+
)
|
320 |
+
|
321 |
+
mesh = Mesh(v=v, f=f, device='cuda')
|
322 |
+
|
323 |
+
return mesh
|
324 |
+
|
325 |
+
def get_covariance(self, scaling_modifier = 1):
|
326 |
+
return self.covariance_activation(self.get_scaling, scaling_modifier, self._rotation)
|
327 |
+
|
328 |
+
def oneupSHdegree(self):
|
329 |
+
if self.active_sh_degree < self.max_sh_degree:
|
330 |
+
self.active_sh_degree += 1
|
331 |
+
|
332 |
+
def create_from_pcd(self, pcd : BasicPointCloud, spatial_lr_scale : float = 1):
|
333 |
+
self.spatial_lr_scale = spatial_lr_scale
|
334 |
+
fused_point_cloud = torch.tensor(np.asarray(pcd.points)).float().cuda()
|
335 |
+
fused_color = RGB2SH(torch.tensor(np.asarray(pcd.colors)).float().cuda())
|
336 |
+
features = torch.zeros((fused_color.shape[0], 3, (self.max_sh_degree + 1) ** 2)).float().cuda()
|
337 |
+
features[:, :3, 0 ] = fused_color
|
338 |
+
features[:, 3:, 1:] = 0.0
|
339 |
+
|
340 |
+
print("Number of points at initialisation : ", fused_point_cloud.shape[0])
|
341 |
+
|
342 |
+
dist2 = torch.clamp_min(distCUDA2(torch.from_numpy(np.asarray(pcd.points)).float().cuda()), 0.0000001)
|
343 |
+
scales = torch.log(torch.sqrt(dist2))[...,None].repeat(1, 3)
|
344 |
+
rots = torch.zeros((fused_point_cloud.shape[0], 4), device="cuda")
|
345 |
+
rots[:, 0] = 1
|
346 |
+
|
347 |
+
opacities = inverse_sigmoid(0.1 * torch.ones((fused_point_cloud.shape[0], 1), dtype=torch.float, device="cuda"))
|
348 |
+
|
349 |
+
self._xyz = nn.Parameter(fused_point_cloud.requires_grad_(True))
|
350 |
+
self._features_dc = nn.Parameter(features[:,:,0:1].transpose(1, 2).contiguous().requires_grad_(True))
|
351 |
+
self._features_rest = nn.Parameter(features[:,:,1:].transpose(1, 2).contiguous().requires_grad_(True))
|
352 |
+
self._scaling = nn.Parameter(scales.requires_grad_(True))
|
353 |
+
self._rotation = nn.Parameter(rots.requires_grad_(True))
|
354 |
+
self._opacity = nn.Parameter(opacities.requires_grad_(True))
|
355 |
+
self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device="cuda")
|
356 |
+
|
357 |
+
def training_setup(self, training_args):
|
358 |
+
self.percent_dense = training_args.percent_dense
|
359 |
+
self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device="cuda")
|
360 |
+
self.denom = torch.zeros((self.get_xyz.shape[0], 1), device="cuda")
|
361 |
+
|
362 |
+
l = [
|
363 |
+
{'params': [self._xyz], 'lr': training_args.position_lr_init * self.spatial_lr_scale, "name": "xyz"},
|
364 |
+
{'params': [self._features_dc], 'lr': training_args.feature_lr, "name": "f_dc"},
|
365 |
+
{'params': [self._features_rest], 'lr': training_args.feature_lr / 20.0, "name": "f_rest"},
|
366 |
+
{'params': [self._opacity], 'lr': training_args.opacity_lr, "name": "opacity"},
|
367 |
+
{'params': [self._scaling], 'lr': training_args.scaling_lr, "name": "scaling"},
|
368 |
+
{'params': [self._rotation], 'lr': training_args.rotation_lr, "name": "rotation"},
|
369 |
+
]
|
370 |
+
|
371 |
+
if training_args.opt_cam:
|
372 |
+
# Learnable parameters for camera, i.e., radius, azimuth and elevation
|
373 |
+
l.append({'params': self.cam_params, 'lr': training_args.rotation_lr * 10, "name": "cam_params"})
|
374 |
+
|
375 |
+
self.optimizer = torch.optim.Adam(l, lr=0.0, eps=1e-15)
|
376 |
+
self.xyz_scheduler_args = get_expon_lr_func(lr_init=training_args.position_lr_init*self.spatial_lr_scale,
|
377 |
+
lr_final=training_args.position_lr_final*self.spatial_lr_scale,
|
378 |
+
lr_delay_mult=training_args.position_lr_delay_mult,
|
379 |
+
max_steps=training_args.position_lr_max_steps)
|
380 |
+
|
381 |
+
def update_learning_rate(self, iteration):
|
382 |
+
''' Learning rate scheduling per step '''
|
383 |
+
for param_group in self.optimizer.param_groups:
|
384 |
+
if param_group["name"] == "xyz":
|
385 |
+
lr = self.xyz_scheduler_args(iteration)
|
386 |
+
param_group['lr'] = lr
|
387 |
+
return lr
|
388 |
+
|
389 |
+
def construct_list_of_attributes(self):
|
390 |
+
l = ['x', 'y', 'z', 'nx', 'ny', 'nz']
|
391 |
+
# All channels except the 3 DC
|
392 |
+
for i in range(self._features_dc.shape[1]*self._features_dc.shape[2]):
|
393 |
+
l.append('f_dc_{}'.format(i))
|
394 |
+
for i in range(self._features_rest.shape[1]*self._features_rest.shape[2]):
|
395 |
+
l.append('f_rest_{}'.format(i))
|
396 |
+
l.append('opacity')
|
397 |
+
for i in range(self._scaling.shape[1]):
|
398 |
+
l.append('scale_{}'.format(i))
|
399 |
+
for i in range(self._rotation.shape[1]):
|
400 |
+
l.append('rot_{}'.format(i))
|
401 |
+
return l
|
402 |
+
|
403 |
+
def save_ply(self, path):
|
404 |
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
405 |
+
|
406 |
+
xyz = self._xyz.detach().cpu().numpy()
|
407 |
+
normals = np.zeros_like(xyz)
|
408 |
+
f_dc = self._features_dc.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()
|
409 |
+
f_rest = self._features_rest.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()
|
410 |
+
opacities = self._opacity.detach().cpu().numpy()
|
411 |
+
scale = self._scaling.detach().cpu().numpy()
|
412 |
+
rotation = self._rotation.detach().cpu().numpy()
|
413 |
+
|
414 |
+
dtype_full = [(attribute, 'f4') for attribute in self.construct_list_of_attributes()]
|
415 |
+
|
416 |
+
elements = np.empty(xyz.shape[0], dtype=dtype_full)
|
417 |
+
attributes = np.concatenate((xyz, normals, f_dc, f_rest, opacities, scale, rotation), axis=1)
|
418 |
+
elements[:] = list(map(tuple, attributes))
|
419 |
+
el = PlyElement.describe(elements, 'vertex')
|
420 |
+
PlyData([el]).write(path)
|
421 |
+
|
422 |
+
def reset_opacity(self):
|
423 |
+
opacities_new = inverse_sigmoid(torch.min(self.get_opacity, torch.ones_like(self.get_opacity)*0.01))
|
424 |
+
optimizable_tensors = self.replace_tensor_to_optimizer(opacities_new, "opacity")
|
425 |
+
self._opacity = optimizable_tensors["opacity"]
|
426 |
+
|
427 |
+
def load_ply(self, path):
|
428 |
+
plydata = PlyData.read(path)
|
429 |
+
|
430 |
+
xyz = np.stack((np.asarray(plydata.elements[0]["x"]),
|
431 |
+
np.asarray(plydata.elements[0]["y"]),
|
432 |
+
np.asarray(plydata.elements[0]["z"])), axis=1)
|
433 |
+
opacities = np.asarray(plydata.elements[0]["opacity"])[..., np.newaxis]
|
434 |
+
|
435 |
+
print("Number of points at loading : ", xyz.shape[0])
|
436 |
+
|
437 |
+
features_dc = np.zeros((xyz.shape[0], 3, 1))
|
438 |
+
features_dc[:, 0, 0] = np.asarray(plydata.elements[0]["f_dc_0"])
|
439 |
+
features_dc[:, 1, 0] = np.asarray(plydata.elements[0]["f_dc_1"])
|
440 |
+
features_dc[:, 2, 0] = np.asarray(plydata.elements[0]["f_dc_2"])
|
441 |
+
|
442 |
+
extra_f_names = [p.name for p in plydata.elements[0].properties if p.name.startswith("f_rest_")]
|
443 |
+
assert len(extra_f_names)==3*(self.max_sh_degree + 1) ** 2 - 3
|
444 |
+
features_extra = np.zeros((xyz.shape[0], len(extra_f_names)))
|
445 |
+
for idx, attr_name in enumerate(extra_f_names):
|
446 |
+
features_extra[:, idx] = np.asarray(plydata.elements[0][attr_name])
|
447 |
+
# Reshape (P,F*SH_coeffs) to (P, F, SH_coeffs except DC)
|
448 |
+
features_extra = features_extra.reshape((features_extra.shape[0], 3, (self.max_sh_degree + 1) ** 2 - 1))
|
449 |
+
|
450 |
+
scale_names = [p.name for p in plydata.elements[0].properties if p.name.startswith("scale_")]
|
451 |
+
scales = np.zeros((xyz.shape[0], len(scale_names)))
|
452 |
+
for idx, attr_name in enumerate(scale_names):
|
453 |
+
scales[:, idx] = np.asarray(plydata.elements[0][attr_name])
|
454 |
+
|
455 |
+
rot_names = [p.name for p in plydata.elements[0].properties if p.name.startswith("rot")]
|
456 |
+
rots = np.zeros((xyz.shape[0], len(rot_names)))
|
457 |
+
for idx, attr_name in enumerate(rot_names):
|
458 |
+
rots[:, idx] = np.asarray(plydata.elements[0][attr_name])
|
459 |
+
|
460 |
+
self._xyz = nn.Parameter(torch.tensor(xyz, dtype=torch.float, device="cuda").requires_grad_(True))
|
461 |
+
self._features_dc = nn.Parameter(torch.tensor(features_dc, dtype=torch.float, device="cuda").transpose(1, 2).contiguous().requires_grad_(True))
|
462 |
+
self._features_rest = nn.Parameter(torch.tensor(features_extra, dtype=torch.float, device="cuda").transpose(1, 2).contiguous().requires_grad_(True))
|
463 |
+
self._opacity = nn.Parameter(torch.tensor(opacities, dtype=torch.float, device="cuda").requires_grad_(True))
|
464 |
+
self._scaling = nn.Parameter(torch.tensor(scales, dtype=torch.float, device="cuda").requires_grad_(True))
|
465 |
+
self._rotation = nn.Parameter(torch.tensor(rots, dtype=torch.float, device="cuda").requires_grad_(True))
|
466 |
+
|
467 |
+
self.active_sh_degree = self.max_sh_degree
|
468 |
+
|
469 |
+
def replace_tensor_to_optimizer(self, tensor, name):
|
470 |
+
optimizable_tensors = {}
|
471 |
+
for group in self.optimizer.param_groups:
|
472 |
+
if len(group["params"]) != 1:
|
473 |
+
continue
|
474 |
+
if group["name"] == name:
|
475 |
+
stored_state = self.optimizer.state.get(group['params'][0], None)
|
476 |
+
stored_state["exp_avg"] = torch.zeros_like(tensor)
|
477 |
+
stored_state["exp_avg_sq"] = torch.zeros_like(tensor)
|
478 |
+
|
479 |
+
del self.optimizer.state[group['params'][0]]
|
480 |
+
group["params"][0] = nn.Parameter(tensor.requires_grad_(True))
|
481 |
+
self.optimizer.state[group['params'][0]] = stored_state
|
482 |
+
|
483 |
+
optimizable_tensors[group["name"]] = group["params"][0]
|
484 |
+
return optimizable_tensors
|
485 |
+
|
486 |
+
def _prune_optimizer(self, mask):
|
487 |
+
optimizable_tensors = {}
|
488 |
+
for group in self.optimizer.param_groups:
|
489 |
+
if len(group["params"]) != 1:
|
490 |
+
continue
|
491 |
+
stored_state = self.optimizer.state.get(group['params'][0], None)
|
492 |
+
if stored_state is not None:
|
493 |
+
stored_state["exp_avg"] = stored_state["exp_avg"][mask]
|
494 |
+
stored_state["exp_avg_sq"] = stored_state["exp_avg_sq"][mask]
|
495 |
+
|
496 |
+
del self.optimizer.state[group['params'][0]]
|
497 |
+
group["params"][0] = nn.Parameter((group["params"][0][mask].requires_grad_(True)))
|
498 |
+
self.optimizer.state[group['params'][0]] = stored_state
|
499 |
+
|
500 |
+
optimizable_tensors[group["name"]] = group["params"][0]
|
501 |
+
else:
|
502 |
+
group["params"][0] = nn.Parameter(group["params"][0][mask].requires_grad_(True))
|
503 |
+
optimizable_tensors[group["name"]] = group["params"][0]
|
504 |
+
return optimizable_tensors
|
505 |
+
|
506 |
+
def prune_points(self, mask):
|
507 |
+
valid_points_mask = ~mask
|
508 |
+
optimizable_tensors = self._prune_optimizer(valid_points_mask)
|
509 |
+
|
510 |
+
self._xyz = optimizable_tensors["xyz"]
|
511 |
+
self._features_dc = optimizable_tensors["f_dc"]
|
512 |
+
self._features_rest = optimizable_tensors["f_rest"]
|
513 |
+
self._opacity = optimizable_tensors["opacity"]
|
514 |
+
self._scaling = optimizable_tensors["scaling"]
|
515 |
+
self._rotation = optimizable_tensors["rotation"]
|
516 |
+
|
517 |
+
self.xyz_gradient_accum = self.xyz_gradient_accum[valid_points_mask]
|
518 |
+
|
519 |
+
self.denom = self.denom[valid_points_mask]
|
520 |
+
self.max_radii2D = self.max_radii2D[valid_points_mask]
|
521 |
+
|
522 |
+
def cat_tensors_to_optimizer(self, tensors_dict):
|
523 |
+
optimizable_tensors = {}
|
524 |
+
for group in self.optimizer.param_groups:
|
525 |
+
if len(group["params"]) != 1:
|
526 |
+
continue
|
527 |
+
assert len(group["params"]) == 1
|
528 |
+
extension_tensor = tensors_dict[group["name"]]
|
529 |
+
stored_state = self.optimizer.state.get(group['params'][0], None)
|
530 |
+
if stored_state is not None:
|
531 |
+
|
532 |
+
stored_state["exp_avg"] = torch.cat((stored_state["exp_avg"], torch.zeros_like(extension_tensor)), dim=0)
|
533 |
+
stored_state["exp_avg_sq"] = torch.cat((stored_state["exp_avg_sq"], torch.zeros_like(extension_tensor)), dim=0)
|
534 |
+
|
535 |
+
del self.optimizer.state[group['params'][0]]
|
536 |
+
group["params"][0] = nn.Parameter(torch.cat((group["params"][0], extension_tensor), dim=0).requires_grad_(True))
|
537 |
+
self.optimizer.state[group['params'][0]] = stored_state
|
538 |
+
|
539 |
+
optimizable_tensors[group["name"]] = group["params"][0]
|
540 |
+
else:
|
541 |
+
group["params"][0] = nn.Parameter(torch.cat((group["params"][0], extension_tensor), dim=0).requires_grad_(True))
|
542 |
+
optimizable_tensors[group["name"]] = group["params"][0]
|
543 |
+
|
544 |
+
return optimizable_tensors
|
545 |
+
|
546 |
+
def densification_postfix(self, new_xyz, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation):
|
547 |
+
d = {"xyz": new_xyz,
|
548 |
+
"f_dc": new_features_dc,
|
549 |
+
"f_rest": new_features_rest,
|
550 |
+
"opacity": new_opacities,
|
551 |
+
"scaling" : new_scaling,
|
552 |
+
"rotation" : new_rotation}
|
553 |
+
|
554 |
+
optimizable_tensors = self.cat_tensors_to_optimizer(d)
|
555 |
+
self._xyz = optimizable_tensors["xyz"]
|
556 |
+
self._features_dc = optimizable_tensors["f_dc"]
|
557 |
+
self._features_rest = optimizable_tensors["f_rest"]
|
558 |
+
self._opacity = optimizable_tensors["opacity"]
|
559 |
+
self._scaling = optimizable_tensors["scaling"]
|
560 |
+
self._rotation = optimizable_tensors["rotation"]
|
561 |
+
|
562 |
+
self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device="cuda")
|
563 |
+
self.denom = torch.zeros((self.get_xyz.shape[0], 1), device="cuda")
|
564 |
+
self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device="cuda")
|
565 |
+
|
566 |
+
def densify_and_split(self, grads, grad_threshold, scene_extent, N=2):
|
567 |
+
n_init_points = self.get_xyz.shape[0]
|
568 |
+
# Extract points that satisfy the gradient condition
|
569 |
+
padded_grad = torch.zeros((n_init_points), device="cuda")
|
570 |
+
padded_grad[:grads.shape[0]] = grads.squeeze()
|
571 |
+
selected_pts_mask = torch.where(padded_grad >= grad_threshold, True, False)
|
572 |
+
selected_pts_mask = torch.logical_and(selected_pts_mask,
|
573 |
+
torch.max(self.get_scaling, dim=1).values > self.percent_dense*scene_extent
|
574 |
+
)
|
575 |
+
|
576 |
+
stds = self.get_scaling[selected_pts_mask].repeat(N,1)
|
577 |
+
means =torch.zeros((stds.size(0), 3),device="cuda")
|
578 |
+
samples = torch.normal(mean=means, std=stds)
|
579 |
+
rots = build_rotation(self._rotation[selected_pts_mask]).repeat(N,1,1)
|
580 |
+
new_xyz = torch.bmm(rots, samples.unsqueeze(-1)).squeeze(-1) + self.get_xyz[selected_pts_mask].repeat(N, 1)
|
581 |
+
new_scaling = self.scaling_inverse_activation(self.get_scaling[selected_pts_mask].repeat(N,1) / (0.8*N))
|
582 |
+
new_rotation = self._rotation[selected_pts_mask].repeat(N,1)
|
583 |
+
new_features_dc = self._features_dc[selected_pts_mask].repeat(N,1,1)
|
584 |
+
new_features_rest = self._features_rest[selected_pts_mask].repeat(N,1,1)
|
585 |
+
new_opacity = self._opacity[selected_pts_mask].repeat(N,1)
|
586 |
+
|
587 |
+
self.densification_postfix(new_xyz, new_features_dc, new_features_rest, new_opacity, new_scaling, new_rotation)
|
588 |
+
|
589 |
+
prune_filter = torch.cat((selected_pts_mask, torch.zeros(N * selected_pts_mask.sum(), device="cuda", dtype=bool)))
|
590 |
+
self.prune_points(prune_filter)
|
591 |
+
|
592 |
+
def densify_and_clone(self, grads, grad_threshold, scene_extent):
|
593 |
+
# Extract points that satisfy the gradient condition
|
594 |
+
selected_pts_mask = torch.where(torch.norm(grads, dim=-1) >= grad_threshold, True, False)
|
595 |
+
selected_pts_mask = torch.logical_and(selected_pts_mask,
|
596 |
+
torch.max(self.get_scaling, dim=1).values <= self.percent_dense*scene_extent
|
597 |
+
)
|
598 |
+
|
599 |
+
new_xyz = self._xyz[selected_pts_mask]
|
600 |
+
new_features_dc = self._features_dc[selected_pts_mask]
|
601 |
+
new_features_rest = self._features_rest[selected_pts_mask]
|
602 |
+
new_opacities = self._opacity[selected_pts_mask]
|
603 |
+
new_scaling = self._scaling[selected_pts_mask]
|
604 |
+
new_rotation = self._rotation[selected_pts_mask]
|
605 |
+
|
606 |
+
self.densification_postfix(new_xyz, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation)
|
607 |
+
|
608 |
+
def densify_and_prune(self, max_grad, min_opacity, extent, max_screen_size):
|
609 |
+
grads = self.xyz_gradient_accum / self.denom
|
610 |
+
grads[grads.isnan()] = 0.0
|
611 |
+
|
612 |
+
self.densify_and_clone(grads, max_grad, extent)
|
613 |
+
self.densify_and_split(grads, max_grad, extent)
|
614 |
+
|
615 |
+
prune_mask = (self.get_opacity < min_opacity).squeeze()
|
616 |
+
if max_screen_size:
|
617 |
+
big_points_vs = self.max_radii2D > max_screen_size
|
618 |
+
big_points_ws = self.get_scaling.max(dim=1).values > 0.1 * extent
|
619 |
+
prune_mask = torch.logical_or(torch.logical_or(prune_mask, big_points_vs), big_points_ws)
|
620 |
+
self.prune_points(prune_mask)
|
621 |
+
|
622 |
+
torch.cuda.empty_cache()
|
623 |
+
|
624 |
+
def prune(self, min_opacity, extent, max_screen_size):
|
625 |
+
|
626 |
+
prune_mask = (self.get_opacity < min_opacity).squeeze()
|
627 |
+
if max_screen_size:
|
628 |
+
big_points_vs = self.max_radii2D > max_screen_size
|
629 |
+
big_points_ws = self.get_scaling.max(dim=1).values > 0.1 * extent
|
630 |
+
prune_mask = torch.logical_or(torch.logical_or(prune_mask, big_points_vs), big_points_ws)
|
631 |
+
self.prune_points(prune_mask)
|
632 |
+
|
633 |
+
torch.cuda.empty_cache()
|
634 |
+
|
635 |
+
|
636 |
+
def add_densification_stats(self, viewspace_point_tensor, update_filter):
|
637 |
+
self.xyz_gradient_accum[update_filter] += torch.norm(viewspace_point_tensor.grad[update_filter,:2], dim=-1, keepdim=True)
|
638 |
+
self.denom[update_filter] += 1
|
639 |
+
|
640 |
+
def getProjectionMatrix(znear, zfar, fovX, fovY):
|
641 |
+
tanHalfFovY = math.tan((fovY / 2))
|
642 |
+
tanHalfFovX = math.tan((fovX / 2))
|
643 |
+
|
644 |
+
P = torch.zeros(4, 4)
|
645 |
+
|
646 |
+
z_sign = 1.0
|
647 |
+
|
648 |
+
P[0, 0] = 1 / tanHalfFovX
|
649 |
+
P[1, 1] = 1 / tanHalfFovY
|
650 |
+
P[3, 2] = z_sign
|
651 |
+
P[2, 2] = z_sign * zfar / (zfar - znear)
|
652 |
+
P[2, 3] = -(zfar * znear) / (zfar - znear)
|
653 |
+
return P
|
654 |
+
|
655 |
+
|
656 |
+
class MiniCam:
|
657 |
+
def __init__(self, c2w, width, height, fovy, fovx, znear, zfar, cam_params=None, opt_pose=False):
|
658 |
+
# c2w (pose) should be in NeRF convention.
|
659 |
+
|
660 |
+
self.image_width = width
|
661 |
+
self.image_height = height
|
662 |
+
self.FoVy = fovy
|
663 |
+
self.FoVx = fovx
|
664 |
+
self.znear = znear
|
665 |
+
self.zfar = zfar
|
666 |
+
self.opt_pose = opt_pose
|
667 |
+
|
668 |
+
self.projection_matrix = (
|
669 |
+
getProjectionMatrix(
|
670 |
+
znear=self.znear, zfar=self.zfar, fovX=self.FoVx, fovY=self.FoVy
|
671 |
+
)
|
672 |
+
.transpose(0, 1)
|
673 |
+
.cuda()
|
674 |
+
)
|
675 |
+
|
676 |
+
if not opt_pose:
|
677 |
+
w2c = np.linalg.inv(c2w)
|
678 |
+
|
679 |
+
# rectify...
|
680 |
+
w2c[1:3, :3] *= -1
|
681 |
+
w2c[:3, 3] *= -1
|
682 |
+
|
683 |
+
self.world_view_transform = torch.tensor(w2c).transpose(0, 1).cuda()
|
684 |
+
self.full_proj_transform = self.world_view_transform @ self.projection_matrix
|
685 |
+
self.camera_center = -torch.tensor(c2w[:3, 3]).cuda()
|
686 |
+
else:
|
687 |
+
# Enable camera pose optimization.
|
688 |
+
self.cam_params = torch.tensor(cam_params, dtype=torch.float32, requires_grad=True)
|
689 |
+
# Place holders, computed when rendering
|
690 |
+
self.world_view_transform = None
|
691 |
+
self.camera_center = None
|
692 |
+
self.full_proj_transform = None
|
693 |
+
|
694 |
+
|
695 |
+
class Renderer:
|
696 |
+
def __init__(self, sh_degree=3, white_background=True, radius=1):
|
697 |
+
|
698 |
+
self.sh_degree = sh_degree
|
699 |
+
self.white_background = white_background
|
700 |
+
self.radius = radius
|
701 |
+
|
702 |
+
self.gaussians = GaussianModel(sh_degree)
|
703 |
+
|
704 |
+
self.bg_color = torch.tensor(
|
705 |
+
[1, 1, 1] if white_background else [0, 0, 0],
|
706 |
+
dtype=torch.float32,
|
707 |
+
device="cuda",
|
708 |
+
)
|
709 |
+
|
710 |
+
def initialize(self, input=None, num_pts=5000, radius=0.5):
|
711 |
+
# load checkpoint
|
712 |
+
if input is None:
|
713 |
+
# init from random point cloud
|
714 |
+
|
715 |
+
phis = np.random.random((num_pts,)) * 2 * np.pi
|
716 |
+
costheta = np.random.random((num_pts,)) * 2 - 1
|
717 |
+
thetas = np.arccos(costheta)
|
718 |
+
mu = np.random.random((num_pts,))
|
719 |
+
radius = radius * np.cbrt(mu)
|
720 |
+
x = radius * np.sin(thetas) * np.cos(phis)
|
721 |
+
y = radius * np.sin(thetas) * np.sin(phis)
|
722 |
+
z = radius * np.cos(thetas)
|
723 |
+
xyz = np.stack((x, y, z), axis=1)
|
724 |
+
# xyz = np.random.random((num_pts, 3)) * 2.6 - 1.3
|
725 |
+
|
726 |
+
shs = np.random.random((num_pts, 3)) / 255.0
|
727 |
+
pcd = BasicPointCloud(
|
728 |
+
points=xyz, colors=SH2RGB(shs), normals=np.zeros((num_pts, 3))
|
729 |
+
)
|
730 |
+
self.gaussians.create_from_pcd(pcd, 10)
|
731 |
+
elif isinstance(input, BasicPointCloud):
|
732 |
+
# load from a provided pcd
|
733 |
+
self.gaussians.create_from_pcd(input, 1)
|
734 |
+
else:
|
735 |
+
# load from saved ply
|
736 |
+
self.gaussians.load_ply(input)
|
737 |
+
|
738 |
+
def render(
|
739 |
+
self,
|
740 |
+
viewpoint_camera,
|
741 |
+
scaling_modifier=1.0,
|
742 |
+
bg_color=None,
|
743 |
+
override_color=None,
|
744 |
+
compute_cov3D_python=False,
|
745 |
+
convert_SHs_python=False,
|
746 |
+
):
|
747 |
+
if viewpoint_camera.opt_pose:
|
748 |
+
# Because c2w matrix is updated in each iter, recompute some parameters when rendering
|
749 |
+
# Create c2w matrix from radius, azimuth and elevation
|
750 |
+
c2w = orbit_camera(viewpoint_camera.cam_params).to("cuda")
|
751 |
+
R = c2w[:3, :3] # 3 x 3
|
752 |
+
T = c2w[:3, 3:4] # 3 x 1
|
753 |
+
R_inv = R.T
|
754 |
+
T_inv = torch.matmul(-R_inv, T)
|
755 |
+
upper = torch.cat([R_inv, T_inv], dim=1) # Upper 3x4 part of the matrix
|
756 |
+
lower = torch.tensor([[0, 0, 0, 1]], device=R.device, dtype=R.dtype) # Last row
|
757 |
+
w2c = torch.cat([upper, lower], dim=0)
|
758 |
+
|
759 |
+
# rectify...
|
760 |
+
w2c[1:3, :3] *= -1
|
761 |
+
w2c[:3, 3] *= -1
|
762 |
+
|
763 |
+
viewpoint_camera.world_view_transform = w2c.transpose(0, 1)
|
764 |
+
viewpoint_camera.full_proj_transform = viewpoint_camera.world_view_transform @ viewpoint_camera.projection_matrix
|
765 |
+
viewpoint_camera.camera_center = -c2w[:3, 3]
|
766 |
+
|
767 |
+
# Create zero tensor. We will use it to make pytorch return gradients of the 2D (screen-space) means
|
768 |
+
screenspace_points = (
|
769 |
+
torch.zeros_like(
|
770 |
+
self.gaussians.get_xyz,
|
771 |
+
dtype=self.gaussians.get_xyz.dtype,
|
772 |
+
requires_grad=True,
|
773 |
+
device="cuda",
|
774 |
+
)
|
775 |
+
+ 0
|
776 |
+
)
|
777 |
+
try:
|
778 |
+
screenspace_points.retain_grad()
|
779 |
+
except:
|
780 |
+
pass
|
781 |
+
|
782 |
+
# Set up rasterization configuration
|
783 |
+
tanfovx = math.tan(viewpoint_camera.FoVx * 0.5)
|
784 |
+
tanfovy = math.tan(viewpoint_camera.FoVy * 0.5)
|
785 |
+
|
786 |
+
raster_settings = GaussianRasterizationSettings(
|
787 |
+
image_height=int(viewpoint_camera.image_height),
|
788 |
+
image_width=int(viewpoint_camera.image_width),
|
789 |
+
tanfovx=tanfovx,
|
790 |
+
tanfovy=tanfovy,
|
791 |
+
bg=self.bg_color if bg_color is None else bg_color,
|
792 |
+
scale_modifier=scaling_modifier,
|
793 |
+
viewmatrix=viewpoint_camera.world_view_transform,
|
794 |
+
perspectivematrix=viewpoint_camera.projection_matrix, # Added for computing gradients for viewmatrix
|
795 |
+
projmatrix=viewpoint_camera.full_proj_transform,
|
796 |
+
sh_degree=self.gaussians.active_sh_degree,
|
797 |
+
campos=viewpoint_camera.camera_center,
|
798 |
+
prefiltered=False,
|
799 |
+
debug=False,
|
800 |
+
)
|
801 |
+
|
802 |
+
rasterizer = GaussianRasterizer(raster_settings=raster_settings)
|
803 |
+
|
804 |
+
means3D = self.gaussians.get_xyz
|
805 |
+
means2D = screenspace_points
|
806 |
+
opacity = self.gaussians.get_opacity
|
807 |
+
|
808 |
+
# If precomputed 3d covariance is provided, use it. If not, then it will be computed from
|
809 |
+
# scaling / rotation by the rasterizer.
|
810 |
+
scales = None
|
811 |
+
rotations = None
|
812 |
+
cov3D_precomp = None
|
813 |
+
if compute_cov3D_python:
|
814 |
+
cov3D_precomp = self.gaussians.get_covariance(scaling_modifier)
|
815 |
+
else:
|
816 |
+
scales = self.gaussians.get_scaling
|
817 |
+
rotations = self.gaussians.get_rotation
|
818 |
+
|
819 |
+
# If precomputed colors are provided, use them. Otherwise, if it is desired to precompute colors
|
820 |
+
# from SHs in Python, do it. If not, then SH -> RGB conversion will be done by rasterizer.
|
821 |
+
shs = None
|
822 |
+
colors_precomp = None
|
823 |
+
if colors_precomp is None:
|
824 |
+
if convert_SHs_python:
|
825 |
+
shs_view = self.gaussians.get_features.transpose(1, 2).view(
|
826 |
+
-1, 3, (self.gaussians.max_sh_degree + 1) ** 2
|
827 |
+
)
|
828 |
+
dir_pp = self.gaussians.get_xyz - viewpoint_camera.camera_center.repeat(
|
829 |
+
self.gaussians.get_features.shape[0], 1
|
830 |
+
)
|
831 |
+
dir_pp_normalized = dir_pp / dir_pp.norm(dim=1, keepdim=True)
|
832 |
+
sh2rgb = eval_sh(
|
833 |
+
self.gaussians.active_sh_degree, shs_view, dir_pp_normalized
|
834 |
+
)
|
835 |
+
colors_precomp = torch.clamp_min(sh2rgb + 0.5, 0.0)
|
836 |
+
else:
|
837 |
+
shs = self.gaussians.get_features
|
838 |
+
else:
|
839 |
+
colors_precomp = override_color
|
840 |
+
|
841 |
+
# Rasterize visible Gaussians to image, obtain their radii (on screen).
|
842 |
+
rendered_image, radii, rendered_depth, rendered_alpha = rasterizer(
|
843 |
+
means3D=means3D,
|
844 |
+
means2D=means2D,
|
845 |
+
shs=shs,
|
846 |
+
colors_precomp=colors_precomp,
|
847 |
+
opacities=opacity,
|
848 |
+
scales=scales,
|
849 |
+
rotations=rotations,
|
850 |
+
cov3D_precomp=cov3D_precomp,
|
851 |
+
viewmat=viewpoint_camera.world_view_transform, # Added for receiving gradients
|
852 |
+
)
|
853 |
+
|
854 |
+
# Those Gaussians that were frustum culled or had a radius of 0 were not visible.
|
855 |
+
# They will be excluded from value updates used in the splitting criteria.
|
856 |
+
ret = {
|
857 |
+
"image": rendered_image.clamp(0, 1),
|
858 |
+
"depth": rendered_depth,
|
859 |
+
"alpha": rendered_alpha,
|
860 |
+
"viewspace_points": screenspace_points,
|
861 |
+
"visibility_filter": radii > 0,
|
862 |
+
"radii": radii,
|
863 |
+
}
|
864 |
+
|
865 |
+
return ret
|
866 |
+
|
diff-gaussian-rasterization-camera/rasterize_points.cu
ADDED
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#include <math.h>
|
13 |
+
#include <torch/extension.h>
|
14 |
+
#include <cstdio>
|
15 |
+
#include <sstream>
|
16 |
+
#include <iostream>
|
17 |
+
#include <tuple>
|
18 |
+
#include <stdio.h>
|
19 |
+
#include <cuda_runtime_api.h>
|
20 |
+
#include <memory>
|
21 |
+
#include "cuda_rasterizer/config.h"
|
22 |
+
#include "cuda_rasterizer/rasterizer.h"
|
23 |
+
#include <fstream>
|
24 |
+
#include <string>
|
25 |
+
#include <functional>
|
26 |
+
|
27 |
+
std::function<char*(size_t N)> resizeFunctional(torch::Tensor& t) {
|
28 |
+
auto lambda = [&t](size_t N) {
|
29 |
+
t.resize_({(long long)N});
|
30 |
+
return reinterpret_cast<char*>(t.contiguous().data_ptr());
|
31 |
+
};
|
32 |
+
return lambda;
|
33 |
+
}
|
34 |
+
|
35 |
+
std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
36 |
+
RasterizeGaussiansCUDA(
|
37 |
+
const torch::Tensor& background,
|
38 |
+
const torch::Tensor& means3D,
|
39 |
+
const torch::Tensor& colors,
|
40 |
+
const torch::Tensor& opacity,
|
41 |
+
const torch::Tensor& scales,
|
42 |
+
const torch::Tensor& rotations,
|
43 |
+
const float scale_modifier,
|
44 |
+
const torch::Tensor& cov3D_precomp,
|
45 |
+
const torch::Tensor& viewmatrix,
|
46 |
+
const torch::Tensor& projmatrix,
|
47 |
+
const float tan_fovx,
|
48 |
+
const float tan_fovy,
|
49 |
+
const int image_height,
|
50 |
+
const int image_width,
|
51 |
+
const torch::Tensor& sh,
|
52 |
+
const int degree,
|
53 |
+
const torch::Tensor& campos,
|
54 |
+
const bool prefiltered,
|
55 |
+
const bool debug)
|
56 |
+
{
|
57 |
+
if (means3D.ndimension() != 2 || means3D.size(1) != 3) {
|
58 |
+
AT_ERROR("means3D must have dimensions (num_points, 3)");
|
59 |
+
}
|
60 |
+
|
61 |
+
const int P = means3D.size(0);
|
62 |
+
const int H = image_height;
|
63 |
+
const int W = image_width;
|
64 |
+
|
65 |
+
auto int_opts = means3D.options().dtype(torch::kInt32);
|
66 |
+
auto float_opts = means3D.options().dtype(torch::kFloat32);
|
67 |
+
|
68 |
+
torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts);
|
69 |
+
torch::Tensor out_depth = torch::full({1, H, W}, 0.0, float_opts);
|
70 |
+
torch::Tensor out_alpha = torch::full({1, H, W}, 0.0, float_opts);
|
71 |
+
torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));
|
72 |
+
|
73 |
+
torch::Device device(torch::kCUDA);
|
74 |
+
torch::TensorOptions options(torch::kByte);
|
75 |
+
torch::Tensor geomBuffer = torch::empty({0}, options.device(device));
|
76 |
+
torch::Tensor binningBuffer = torch::empty({0}, options.device(device));
|
77 |
+
torch::Tensor imgBuffer = torch::empty({0}, options.device(device));
|
78 |
+
std::function<char*(size_t)> geomFunc = resizeFunctional(geomBuffer);
|
79 |
+
std::function<char*(size_t)> binningFunc = resizeFunctional(binningBuffer);
|
80 |
+
std::function<char*(size_t)> imgFunc = resizeFunctional(imgBuffer);
|
81 |
+
|
82 |
+
int rendered = 0;
|
83 |
+
if(P != 0)
|
84 |
+
{
|
85 |
+
int M = 0;
|
86 |
+
if(sh.size(0) != 0)
|
87 |
+
{
|
88 |
+
M = sh.size(1);
|
89 |
+
}
|
90 |
+
|
91 |
+
rendered = CudaRasterizer::Rasterizer::forward(
|
92 |
+
geomFunc,
|
93 |
+
binningFunc,
|
94 |
+
imgFunc,
|
95 |
+
P, degree, M,
|
96 |
+
background.contiguous().data<float>(),
|
97 |
+
W, H,
|
98 |
+
means3D.contiguous().data<float>(),
|
99 |
+
sh.contiguous().data_ptr<float>(),
|
100 |
+
colors.contiguous().data<float>(),
|
101 |
+
opacity.contiguous().data<float>(),
|
102 |
+
scales.contiguous().data_ptr<float>(),
|
103 |
+
scale_modifier,
|
104 |
+
rotations.contiguous().data_ptr<float>(),
|
105 |
+
cov3D_precomp.contiguous().data<float>(),
|
106 |
+
viewmatrix.contiguous().data<float>(),
|
107 |
+
projmatrix.contiguous().data<float>(),
|
108 |
+
campos.contiguous().data<float>(),
|
109 |
+
tan_fovx,
|
110 |
+
tan_fovy,
|
111 |
+
prefiltered,
|
112 |
+
out_color.contiguous().data<float>(),
|
113 |
+
out_depth.contiguous().data<float>(),
|
114 |
+
out_alpha.contiguous().data<float>(),
|
115 |
+
radii.contiguous().data<int>(),
|
116 |
+
debug);
|
117 |
+
}
|
118 |
+
return std::make_tuple(rendered, out_color, out_depth, out_alpha, radii, geomBuffer, binningBuffer, imgBuffer);
|
119 |
+
}
|
120 |
+
|
121 |
+
std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
122 |
+
RasterizeGaussiansBackwardCUDA(
|
123 |
+
const torch::Tensor& background,
|
124 |
+
const torch::Tensor& means3D,
|
125 |
+
const torch::Tensor& radii,
|
126 |
+
const torch::Tensor& colors,
|
127 |
+
const torch::Tensor& scales,
|
128 |
+
const torch::Tensor& rotations,
|
129 |
+
const float scale_modifier,
|
130 |
+
const torch::Tensor& cov3D_precomp,
|
131 |
+
const torch::Tensor& viewmatrix,
|
132 |
+
const torch::Tensor& projmatrix,
|
133 |
+
const float tan_fovx,
|
134 |
+
const float tan_fovy,
|
135 |
+
const torch::Tensor& dL_dout_color,
|
136 |
+
const torch::Tensor& dL_dout_depth,
|
137 |
+
const torch::Tensor& dL_dout_alpha,
|
138 |
+
const torch::Tensor& sh,
|
139 |
+
const int degree,
|
140 |
+
const torch::Tensor& campos,
|
141 |
+
const torch::Tensor& geomBuffer,
|
142 |
+
const int R,
|
143 |
+
const torch::Tensor& binningBuffer,
|
144 |
+
const torch::Tensor& imageBuffer,
|
145 |
+
const torch::Tensor& alphas,
|
146 |
+
const bool debug)
|
147 |
+
{
|
148 |
+
const int P = means3D.size(0);
|
149 |
+
const int H = dL_dout_color.size(1);
|
150 |
+
const int W = dL_dout_color.size(2);
|
151 |
+
|
152 |
+
int M = 0;
|
153 |
+
if(sh.size(0) != 0)
|
154 |
+
{
|
155 |
+
M = sh.size(1);
|
156 |
+
}
|
157 |
+
|
158 |
+
torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options());
|
159 |
+
torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options());
|
160 |
+
torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options());
|
161 |
+
torch::Tensor dL_ddepths = torch::zeros({P, 1}, means3D.options());
|
162 |
+
torch::Tensor dL_dconic = torch::zeros({P, 2, 2}, means3D.options());
|
163 |
+
torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options());
|
164 |
+
torch::Tensor dL_dcov3D = torch::zeros({P, 6}, means3D.options());
|
165 |
+
torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options());
|
166 |
+
torch::Tensor dL_dscales = torch::zeros({P, 3}, means3D.options());
|
167 |
+
torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options());
|
168 |
+
// Created by Qitao
|
169 |
+
torch::Tensor dL_dts = torch::zeros({P, 3}, means3D.options());
|
170 |
+
|
171 |
+
if(P != 0)
|
172 |
+
{
|
173 |
+
CudaRasterizer::Rasterizer::backward(P, degree, M, R,
|
174 |
+
background.contiguous().data<float>(),
|
175 |
+
W, H,
|
176 |
+
means3D.contiguous().data<float>(),
|
177 |
+
sh.contiguous().data<float>(),
|
178 |
+
colors.contiguous().data<float>(),
|
179 |
+
alphas.contiguous().data<float>(),
|
180 |
+
scales.data_ptr<float>(),
|
181 |
+
scale_modifier,
|
182 |
+
rotations.data_ptr<float>(),
|
183 |
+
cov3D_precomp.contiguous().data<float>(),
|
184 |
+
viewmatrix.contiguous().data<float>(),
|
185 |
+
projmatrix.contiguous().data<float>(),
|
186 |
+
campos.contiguous().data<float>(),
|
187 |
+
tan_fovx,
|
188 |
+
tan_fovy,
|
189 |
+
radii.contiguous().data<int>(),
|
190 |
+
reinterpret_cast<char*>(geomBuffer.contiguous().data_ptr()),
|
191 |
+
reinterpret_cast<char*>(binningBuffer.contiguous().data_ptr()),
|
192 |
+
reinterpret_cast<char*>(imageBuffer.contiguous().data_ptr()),
|
193 |
+
dL_dout_color.contiguous().data<float>(),
|
194 |
+
dL_dout_depth.contiguous().data<float>(),
|
195 |
+
dL_dout_alpha.contiguous().data<float>(),
|
196 |
+
dL_dmeans2D.contiguous().data<float>(),
|
197 |
+
dL_dts.contiguous().data<float>(),
|
198 |
+
dL_dconic.contiguous().data<float>(),
|
199 |
+
dL_dopacity.contiguous().data<float>(),
|
200 |
+
dL_dcolors.contiguous().data<float>(),
|
201 |
+
dL_ddepths.contiguous().data<float>(),
|
202 |
+
dL_dmeans3D.contiguous().data<float>(),
|
203 |
+
dL_dcov3D.contiguous().data<float>(),
|
204 |
+
dL_dsh.contiguous().data<float>(),
|
205 |
+
dL_dscales.contiguous().data<float>(),
|
206 |
+
dL_drotations.contiguous().data<float>(),
|
207 |
+
debug);
|
208 |
+
}
|
209 |
+
|
210 |
+
return std::make_tuple(dL_dmeans2D, dL_dts, dL_dcolors, dL_dopacity, dL_dmeans3D, dL_dcov3D, dL_dsh, dL_dscales, dL_drotations);
|
211 |
+
}
|
212 |
+
|
213 |
+
torch::Tensor markVisible(
|
214 |
+
torch::Tensor& means3D,
|
215 |
+
torch::Tensor& viewmatrix,
|
216 |
+
torch::Tensor& projmatrix)
|
217 |
+
{
|
218 |
+
const int P = means3D.size(0);
|
219 |
+
|
220 |
+
torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool));
|
221 |
+
|
222 |
+
if(P != 0)
|
223 |
+
{
|
224 |
+
CudaRasterizer::Rasterizer::markVisible(P,
|
225 |
+
means3D.contiguous().data<float>(),
|
226 |
+
viewmatrix.contiguous().data<float>(),
|
227 |
+
projmatrix.contiguous().data<float>(),
|
228 |
+
present.contiguous().data<bool>());
|
229 |
+
}
|
230 |
+
|
231 |
+
return present;
|
232 |
+
}
|
diff-gaussian-rasterization-camera/rasterize_points.h
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* Copyright (C) 2023, Inria
|
3 |
+
* GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
* All rights reserved.
|
5 |
+
*
|
6 |
+
* This software is free for non-commercial, research and evaluation use
|
7 |
+
* under the terms of the LICENSE.md file.
|
8 |
+
*
|
9 |
+
* For inquiries contact [email protected]
|
10 |
+
*/
|
11 |
+
|
12 |
+
#pragma once
|
13 |
+
#include <torch/extension.h>
|
14 |
+
#include <cstdio>
|
15 |
+
#include <tuple>
|
16 |
+
#include <string>
|
17 |
+
|
18 |
+
std::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
19 |
+
RasterizeGaussiansCUDA(
|
20 |
+
const torch::Tensor& background,
|
21 |
+
const torch::Tensor& means3D,
|
22 |
+
const torch::Tensor& colors,
|
23 |
+
const torch::Tensor& opacity,
|
24 |
+
const torch::Tensor& scales,
|
25 |
+
const torch::Tensor& rotations,
|
26 |
+
const float scale_modifier,
|
27 |
+
const torch::Tensor& cov3D_precomp,
|
28 |
+
const torch::Tensor& viewmatrix,
|
29 |
+
const torch::Tensor& projmatrix,
|
30 |
+
const float tan_fovx,
|
31 |
+
const float tan_fovy,
|
32 |
+
const int image_height,
|
33 |
+
const int image_width,
|
34 |
+
const torch::Tensor& sh,
|
35 |
+
const int degree,
|
36 |
+
const torch::Tensor& campos,
|
37 |
+
const bool prefiltered,
|
38 |
+
const bool debug);
|
39 |
+
|
40 |
+
std::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>
|
41 |
+
RasterizeGaussiansBackwardCUDA(
|
42 |
+
const torch::Tensor& background,
|
43 |
+
const torch::Tensor& means3D,
|
44 |
+
const torch::Tensor& radii,
|
45 |
+
const torch::Tensor& colors,
|
46 |
+
const torch::Tensor& scales,
|
47 |
+
const torch::Tensor& rotations,
|
48 |
+
const float scale_modifier,
|
49 |
+
const torch::Tensor& cov3D_precomp,
|
50 |
+
const torch::Tensor& viewmatrix,
|
51 |
+
const torch::Tensor& projmatrix,
|
52 |
+
const float tan_fovx,
|
53 |
+
const float tan_fovy,
|
54 |
+
const torch::Tensor& dL_dout_color,
|
55 |
+
const torch::Tensor& dL_dout_depth,
|
56 |
+
const torch::Tensor& dL_dout_alpha,
|
57 |
+
const torch::Tensor& sh,
|
58 |
+
const int degree,
|
59 |
+
const torch::Tensor& campos,
|
60 |
+
const torch::Tensor& geomBuffer,
|
61 |
+
const int R,
|
62 |
+
const torch::Tensor& binningBuffer,
|
63 |
+
const torch::Tensor& imageBuffer,
|
64 |
+
const torch::Tensor& alpha,
|
65 |
+
const bool debug);
|
66 |
+
|
67 |
+
torch::Tensor markVisible(
|
68 |
+
torch::Tensor& means3D,
|
69 |
+
torch::Tensor& viewmatrix,
|
70 |
+
torch::Tensor& projmatrix);
|
diff-gaussian-rasterization-camera/setup.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#
|
2 |
+
# Copyright (C) 2023, Inria
|
3 |
+
# GRAPHDECO research group, https://team.inria.fr/graphdeco
|
4 |
+
# All rights reserved.
|
5 |
+
#
|
6 |
+
# This software is free for non-commercial, research and evaluation use
|
7 |
+
# under the terms of the LICENSE.md file.
|
8 |
+
#
|
9 |
+
# For inquiries contact [email protected]
|
10 |
+
#
|
11 |
+
|
12 |
+
from setuptools import setup
|
13 |
+
from torch.utils.cpp_extension import CUDAExtension, BuildExtension
|
14 |
+
import os
|
15 |
+
os.path.dirname(os.path.abspath(__file__))
|
16 |
+
|
17 |
+
setup(
|
18 |
+
name="diff_gaussian_rasterization",
|
19 |
+
packages=['diff_gaussian_rasterization'],
|
20 |
+
ext_modules=[
|
21 |
+
CUDAExtension(
|
22 |
+
name="diff_gaussian_rasterization._C",
|
23 |
+
sources=[
|
24 |
+
"cuda_rasterizer/rasterizer_impl.cu",
|
25 |
+
"cuda_rasterizer/forward.cu",
|
26 |
+
"cuda_rasterizer/backward.cu",
|
27 |
+
"rasterize_points.cu",
|
28 |
+
"ext.cpp"],
|
29 |
+
extra_compile_args={"nvcc": ["-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]})
|
30 |
+
],
|
31 |
+
cmdclass={
|
32 |
+
'build_ext': BuildExtension
|
33 |
+
}
|
34 |
+
)
|
diff-gaussian-rasterization-camera/third_party/.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
diff-gaussian-rasterization-camera/third_party/glm/.appveyor.yml
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
shallow_clone: true
|
2 |
+
|
3 |
+
platform:
|
4 |
+
- x86
|
5 |
+
- x64
|
6 |
+
|
7 |
+
configuration:
|
8 |
+
- Debug
|
9 |
+
- Release
|
10 |
+
|
11 |
+
image:
|
12 |
+
- Visual Studio 2013
|
13 |
+
- Visual Studio 2015
|
14 |
+
- Visual Studio 2017
|
15 |
+
- Visual Studio 2019
|
16 |
+
|
17 |
+
environment:
|
18 |
+
matrix:
|
19 |
+
- GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON
|
20 |
+
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
21 |
+
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
22 |
+
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
|
23 |
+
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
|
24 |
+
|
25 |
+
matrix:
|
26 |
+
exclude:
|
27 |
+
- image: Visual Studio 2013
|
28 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
29 |
+
- image: Visual Studio 2013
|
30 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
|
31 |
+
- image: Visual Studio 2013
|
32 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
|
33 |
+
- image: Visual Studio 2013
|
34 |
+
configuration: Debug
|
35 |
+
- image: Visual Studio 2015
|
36 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
37 |
+
- image: Visual Studio 2015
|
38 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON
|
39 |
+
- image: Visual Studio 2015
|
40 |
+
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON
|
41 |
+
- image: Visual Studio 2015
|
42 |
+
platform: x86
|
43 |
+
- image: Visual Studio 2015
|
44 |
+
configuration: Debug
|
45 |
+
- image: Visual Studio 2017
|
46 |
+
platform: x86
|
47 |
+
- image: Visual Studio 2017
|
48 |
+
configuration: Debug
|
49 |
+
- image: Visual Studio 2019
|
50 |
+
platform: x64
|
51 |
+
|
52 |
+
branches:
|
53 |
+
only:
|
54 |
+
- master
|
55 |
+
|
56 |
+
before_build:
|
57 |
+
- ps: |
|
58 |
+
mkdir build
|
59 |
+
cd build
|
60 |
+
|
61 |
+
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2013") {
|
62 |
+
$env:generator="Visual Studio 12 2013"
|
63 |
+
}
|
64 |
+
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2015") {
|
65 |
+
$env:generator="Visual Studio 14 2015"
|
66 |
+
}
|
67 |
+
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2017") {
|
68 |
+
$env:generator="Visual Studio 15 2017"
|
69 |
+
}
|
70 |
+
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2019") {
|
71 |
+
$env:generator="Visual Studio 16 2019"
|
72 |
+
}
|
73 |
+
if ($env:PLATFORM -eq "x64") {
|
74 |
+
$env:generator="$env:generator Win64"
|
75 |
+
}
|
76 |
+
echo generator="$env:generator"
|
77 |
+
cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER/install" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS"
|
78 |
+
|
79 |
+
build_script:
|
80 |
+
- cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal
|
81 |
+
- cmake --build . --target install --parallel --config %CONFIGURATION% -- /m /v:minimal
|
82 |
+
|
83 |
+
test_script:
|
84 |
+
- ctest --parallel 4 --verbose -C %CONFIGURATION%
|
85 |
+
- cd ..
|
86 |
+
- ps: |
|
87 |
+
mkdir build_test_cmake
|
88 |
+
cd build_test_cmake
|
89 |
+
cmake ..\test\cmake\ -G "$env:generator" -DCMAKE_PREFIX_PATH="$env:APPVEYOR_BUILD_FOLDER/install"
|
90 |
+
- cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal
|
91 |
+
|
92 |
+
deploy: off
|
diff-gaussian-rasterization-camera/third_party/glm/.travis.yml
ADDED
@@ -0,0 +1,388 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
language: cpp
|
2 |
+
|
3 |
+
branches:
|
4 |
+
only:
|
5 |
+
- master
|
6 |
+
- stable
|
7 |
+
|
8 |
+
jobs:
|
9 |
+
include:
|
10 |
+
- name: "Xcode 7.3 C++98 pure release"
|
11 |
+
os: osx
|
12 |
+
osx_image: xcode7.3
|
13 |
+
env:
|
14 |
+
- MATRIX_EVAL=""
|
15 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
|
16 |
+
|
17 |
+
- name: "Xcode 7.3 C++98 sse2 release"
|
18 |
+
os: osx
|
19 |
+
osx_image: xcode7.3
|
20 |
+
env:
|
21 |
+
- MATRIX_EVAL=""
|
22 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
23 |
+
|
24 |
+
- name: "Xcode 7.3 C++98 ms release"
|
25 |
+
os: osx
|
26 |
+
osx_image: xcode7.3
|
27 |
+
env:
|
28 |
+
- MATRIX_EVAL=""
|
29 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
|
30 |
+
|
31 |
+
- name: "XCode 7.3 C++11 pure release"
|
32 |
+
os: osx
|
33 |
+
osx_image: xcode7.3
|
34 |
+
env:
|
35 |
+
- MATRIX_EVAL=""
|
36 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON"
|
37 |
+
|
38 |
+
- name: "XCode 7.3 C++11 sse2 release"
|
39 |
+
os: osx
|
40 |
+
osx_image: xcode7.3
|
41 |
+
env:
|
42 |
+
- MATRIX_EVAL=""
|
43 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
|
44 |
+
|
45 |
+
- name: "XCode 10.3 C++11 sse2 release"
|
46 |
+
os: osx
|
47 |
+
osx_image: xcode10.3
|
48 |
+
env:
|
49 |
+
- MATRIX_EVAL=""
|
50 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
|
51 |
+
|
52 |
+
- name: "XCode 12.2 C++11 sse2 release"
|
53 |
+
os: osx
|
54 |
+
osx_image: xcode12.2
|
55 |
+
env:
|
56 |
+
- MATRIX_EVAL=""
|
57 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
|
58 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
59 |
+
- CMAKE_ENV="--parallel"
|
60 |
+
|
61 |
+
- name: "XCode 12.2 C++11 sse2 debug"
|
62 |
+
os: osx
|
63 |
+
osx_image: xcode12.2
|
64 |
+
env:
|
65 |
+
- MATRIX_EVAL=""
|
66 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON"
|
67 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
68 |
+
- CMAKE_ENV="--parallel"
|
69 |
+
|
70 |
+
- name: "XCode 12.2 C++11 avx debug"
|
71 |
+
os: osx
|
72 |
+
osx_image: xcode12.2
|
73 |
+
env:
|
74 |
+
- MATRIX_EVAL=""
|
75 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
|
76 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
77 |
+
- CMAKE_ENV="--parallel"
|
78 |
+
|
79 |
+
- name: "XCode 12.2 C++14 avx debug"
|
80 |
+
os: osx
|
81 |
+
osx_image: xcode12.2
|
82 |
+
env:
|
83 |
+
- MATRIX_EVAL=""
|
84 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
|
85 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
86 |
+
- CMAKE_ENV="--parallel"
|
87 |
+
|
88 |
+
- name: "XCode 12.2 C++14 pure debug"
|
89 |
+
os: osx
|
90 |
+
osx_image: xcode12.2
|
91 |
+
env:
|
92 |
+
- MATRIX_EVAL=""
|
93 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON"
|
94 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
95 |
+
- CMAKE_ENV="--parallel"
|
96 |
+
|
97 |
+
- name: "XCode 12.2 C++17 pure debug"
|
98 |
+
os: osx
|
99 |
+
osx_image: xcode12.2
|
100 |
+
env:
|
101 |
+
- MATRIX_EVAL=""
|
102 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON"
|
103 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
104 |
+
- CMAKE_ENV="--parallel"
|
105 |
+
|
106 |
+
- name: "XCode 12.2 C++17 sse2 debug"
|
107 |
+
os: osx
|
108 |
+
osx_image: xcode12.2
|
109 |
+
env:
|
110 |
+
- MATRIX_EVAL=""
|
111 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
112 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
113 |
+
- CMAKE_ENV="--parallel"
|
114 |
+
|
115 |
+
- name: "XCode 12.2 C++17 sse2 release"
|
116 |
+
os: osx
|
117 |
+
osx_image: xcode12.2
|
118 |
+
env:
|
119 |
+
- MATRIX_EVAL=""
|
120 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
121 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
122 |
+
- CMAKE_ENV="--parallel"
|
123 |
+
|
124 |
+
- name: "XCode 12.2 C++17 avx release"
|
125 |
+
os: osx
|
126 |
+
osx_image: xcode12.2
|
127 |
+
env:
|
128 |
+
- MATRIX_EVAL=""
|
129 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON"
|
130 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
131 |
+
- CMAKE_ENV="--parallel"
|
132 |
+
|
133 |
+
- name: "GCC 4.9 C++98 pure release"
|
134 |
+
os: linux
|
135 |
+
dist: Xenial
|
136 |
+
addons:
|
137 |
+
apt:
|
138 |
+
sources:
|
139 |
+
- ubuntu-toolchain-r-test
|
140 |
+
packages:
|
141 |
+
- g++-4.9
|
142 |
+
env:
|
143 |
+
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
144 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
|
145 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
146 |
+
- CMAKE_ENV="--parallel"
|
147 |
+
|
148 |
+
- name: "GCC 4.9 C++98 pure debug"
|
149 |
+
os: linux
|
150 |
+
dist: Xenial
|
151 |
+
addons:
|
152 |
+
apt:
|
153 |
+
sources:
|
154 |
+
- ubuntu-toolchain-r-test
|
155 |
+
packages:
|
156 |
+
- g++-4.9
|
157 |
+
env:
|
158 |
+
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
159 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON"
|
160 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
161 |
+
- CMAKE_ENV="--parallel"
|
162 |
+
|
163 |
+
- name: "GCC 4.9 C++98 ms debug"
|
164 |
+
os: linux
|
165 |
+
dist: Xenial
|
166 |
+
addons:
|
167 |
+
apt:
|
168 |
+
sources:
|
169 |
+
- ubuntu-toolchain-r-test
|
170 |
+
packages:
|
171 |
+
- g++-4.9
|
172 |
+
env:
|
173 |
+
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
174 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
|
175 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
176 |
+
- CMAKE_ENV="--parallel"
|
177 |
+
|
178 |
+
- name: "GCC 4.9 C++11 ms debug"
|
179 |
+
os: linux
|
180 |
+
dist: Xenial
|
181 |
+
addons:
|
182 |
+
apt:
|
183 |
+
sources:
|
184 |
+
- ubuntu-toolchain-r-test
|
185 |
+
packages:
|
186 |
+
- g++-4.9
|
187 |
+
env:
|
188 |
+
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
189 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
|
190 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
191 |
+
- CMAKE_ENV="--parallel"
|
192 |
+
|
193 |
+
- name: "GCC 4.9 C++11 pure debug"
|
194 |
+
os: linux
|
195 |
+
dist: Xenial
|
196 |
+
addons:
|
197 |
+
apt:
|
198 |
+
sources:
|
199 |
+
- ubuntu-toolchain-r-test
|
200 |
+
packages:
|
201 |
+
- g++-4.9
|
202 |
+
env:
|
203 |
+
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
204 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON"
|
205 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
206 |
+
- CMAKE_ENV="--parallel"
|
207 |
+
|
208 |
+
- name: "GCC 6 C++14 pure debug"
|
209 |
+
os: linux
|
210 |
+
dist: bionic
|
211 |
+
addons:
|
212 |
+
apt:
|
213 |
+
sources:
|
214 |
+
- ubuntu-toolchain-r-test
|
215 |
+
packages:
|
216 |
+
- g++-6
|
217 |
+
env:
|
218 |
+
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
|
219 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
|
220 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
221 |
+
- CMAKE_ENV="--parallel"
|
222 |
+
|
223 |
+
- name: "GCC 6 C++14 ms debug"
|
224 |
+
os: linux
|
225 |
+
dist: bionic
|
226 |
+
addons:
|
227 |
+
apt:
|
228 |
+
sources:
|
229 |
+
- ubuntu-toolchain-r-test
|
230 |
+
packages:
|
231 |
+
- g++-6
|
232 |
+
env:
|
233 |
+
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
|
234 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
|
235 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
236 |
+
- CMAKE_ENV="--parallel"
|
237 |
+
|
238 |
+
- name: "GCC 7 C++17 ms debug"
|
239 |
+
os: linux
|
240 |
+
dist: bionic
|
241 |
+
addons:
|
242 |
+
apt:
|
243 |
+
sources:
|
244 |
+
- ubuntu-toolchain-r-test
|
245 |
+
packages:
|
246 |
+
- g++-7
|
247 |
+
env:
|
248 |
+
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
|
249 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON"
|
250 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
251 |
+
- CMAKE_ENV="--parallel"
|
252 |
+
|
253 |
+
- name: "GCC 7 C++17 pure debug"
|
254 |
+
os: linux
|
255 |
+
dist: bionic
|
256 |
+
addons:
|
257 |
+
apt:
|
258 |
+
sources:
|
259 |
+
- ubuntu-toolchain-r-test
|
260 |
+
packages:
|
261 |
+
- g++-7
|
262 |
+
env:
|
263 |
+
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
|
264 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
|
265 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
266 |
+
- CMAKE_ENV="--parallel"
|
267 |
+
|
268 |
+
- name: "GCC 10 C++17 pure debug"
|
269 |
+
os: linux
|
270 |
+
dist: bionic
|
271 |
+
addons:
|
272 |
+
apt:
|
273 |
+
sources:
|
274 |
+
- ubuntu-toolchain-r-test
|
275 |
+
packages:
|
276 |
+
- g++-10
|
277 |
+
env:
|
278 |
+
- MATRIX_EVAL="CC=gcc-10 && CXX=g++-10"
|
279 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
|
280 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
281 |
+
- CMAKE_ENV="--parallel"
|
282 |
+
|
283 |
+
- name: "GCC 10 C++17 pure release"
|
284 |
+
os: linux
|
285 |
+
dist: bionic
|
286 |
+
addons:
|
287 |
+
apt:
|
288 |
+
sources:
|
289 |
+
- ubuntu-toolchain-r-test
|
290 |
+
packages:
|
291 |
+
- g++-10
|
292 |
+
env:
|
293 |
+
- MATRIX_EVAL="CC=gcc-10 && CXX=g++-10"
|
294 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
|
295 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
296 |
+
- CMAKE_ENV="--parallel"
|
297 |
+
|
298 |
+
- name: "Clang C++14 pure release"
|
299 |
+
os: linux
|
300 |
+
dist: Xenial
|
301 |
+
env:
|
302 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
303 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
|
304 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
305 |
+
- CMAKE_ENV="--parallel"
|
306 |
+
|
307 |
+
- name: "Clang C++14 pure debug"
|
308 |
+
os: linux
|
309 |
+
dist: Xenial
|
310 |
+
env:
|
311 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
312 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON"
|
313 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
314 |
+
- CMAKE_ENV="--parallel"
|
315 |
+
|
316 |
+
- name: "Clang C++14 sse2 debug"
|
317 |
+
os: linux
|
318 |
+
dist: Xenial
|
319 |
+
env:
|
320 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
321 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
322 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
323 |
+
- CMAKE_ENV="--parallel"
|
324 |
+
|
325 |
+
- name: "Clang C++14 sse2 debug"
|
326 |
+
os: linux
|
327 |
+
dist: focal
|
328 |
+
env:
|
329 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
330 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
331 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
332 |
+
- CMAKE_ENV="--parallel"
|
333 |
+
|
334 |
+
- name: "Clang C++17 sse2 debug"
|
335 |
+
os: linux
|
336 |
+
dist: focal
|
337 |
+
env:
|
338 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
339 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON"
|
340 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
341 |
+
- CMAKE_ENV="--parallel"
|
342 |
+
|
343 |
+
- name: "Clang C++17 avx2 debug"
|
344 |
+
os: linux
|
345 |
+
dist: focal
|
346 |
+
env:
|
347 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
348 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX2=ON"
|
349 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
350 |
+
- CMAKE_ENV="--parallel"
|
351 |
+
|
352 |
+
- name: "Clang C++17 pure debug"
|
353 |
+
os: linux
|
354 |
+
dist: focal
|
355 |
+
env:
|
356 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
357 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
|
358 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
359 |
+
- CMAKE_ENV="--parallel"
|
360 |
+
|
361 |
+
- name: "Clang C++17 pure release"
|
362 |
+
os: linux
|
363 |
+
dist: focal
|
364 |
+
env:
|
365 |
+
- MATRIX_EVAL="CC=clang && CXX=clang++"
|
366 |
+
- CMAKE_BUILD_ENV="-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON"
|
367 |
+
- CTEST_ENV="--parallel 4 --output-on-failure"
|
368 |
+
- CMAKE_ENV="--parallel"
|
369 |
+
|
370 |
+
before_script:
|
371 |
+
- cmake --version
|
372 |
+
- eval "${MATRIX_EVAL}"
|
373 |
+
|
374 |
+
script:
|
375 |
+
- ${CC} --version
|
376 |
+
- mkdir ./build
|
377 |
+
- cd ./build
|
378 |
+
- cmake -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/install -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} ..
|
379 |
+
- cmake --build . ${CMAKE_ENV}
|
380 |
+
- ctest ${CTEST_ENV}
|
381 |
+
- cmake --build . --target install ${CMAKE_ENV}
|
382 |
+
- cd $TRAVIS_BUILD_DIR
|
383 |
+
- mkdir ./build_test_cmake
|
384 |
+
- cd ./build_test_cmake
|
385 |
+
- cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/install
|
386 |
+
- cmake --build .
|
387 |
+
|
388 |
+
|
diff-gaussian-rasterization-camera/third_party/glm/CMakeLists.txt
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
|
2 |
+
cmake_policy(VERSION 3.2)
|
3 |
+
|
4 |
+
|
5 |
+
file(READ "glm/detail/setup.hpp" GLM_SETUP_FILE)
|
6 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
7 |
+
set(GLM_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
8 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_MINOR[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
9 |
+
set(GLM_VERSION_MINOR "${CMAKE_MATCH_1}")
|
10 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_PATCH[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
11 |
+
set(GLM_VERSION_PATCH "${CMAKE_MATCH_1}")
|
12 |
+
string(REGEX MATCH "#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)" _ ${GLM_SETUP_FILE})
|
13 |
+
set(GLM_VERSION_REVISION "${CMAKE_MATCH_1}")
|
14 |
+
|
15 |
+
set(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})
|
16 |
+
project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
|
17 |
+
message(STATUS "GLM: Version " ${GLM_VERSION})
|
18 |
+
|
19 |
+
add_subdirectory(glm)
|
20 |
+
add_library(glm::glm ALIAS glm)
|
21 |
+
|
22 |
+
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
23 |
+
|
24 |
+
include(CPack)
|
25 |
+
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "CMakeLists.txt" EXCLUDE)
|
26 |
+
install(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)
|
27 |
+
include(CMakePackageConfigHelpers)
|
28 |
+
write_basic_package_version_file("glmConfigVersion.cmake" COMPATIBILITY AnyNewerVersion)
|
29 |
+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)
|
30 |
+
|
31 |
+
include(CTest)
|
32 |
+
if(BUILD_TESTING)
|
33 |
+
add_subdirectory(test)
|
34 |
+
endif()
|
35 |
+
|
36 |
+
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
37 |
+
|
38 |
+
if (NOT TARGET uninstall)
|
39 |
+
configure_file(cmake/cmake_uninstall.cmake.in
|
40 |
+
cmake_uninstall.cmake IMMEDIATE @ONLY)
|
41 |
+
|
42 |
+
add_custom_target(uninstall
|
43 |
+
"${CMAKE_COMMAND}" -P
|
44 |
+
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake")
|
45 |
+
endif()
|
diff-gaussian-rasterization-camera/third_party/glm/cmake/cmake_uninstall.cmake.in
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
2 |
+
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt")
|
3 |
+
endif()
|
4 |
+
|
5 |
+
file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
|
6 |
+
string(REGEX REPLACE "\n" ";" files "${files}")
|
7 |
+
foreach(file ${files})
|
8 |
+
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
|
9 |
+
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
10 |
+
exec_program(
|
11 |
+
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
12 |
+
OUTPUT_VARIABLE rm_out
|
13 |
+
RETURN_VALUE rm_retval
|
14 |
+
)
|
15 |
+
if(NOT "${rm_retval}" STREQUAL 0)
|
16 |
+
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
|
17 |
+
endif()
|
18 |
+
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
19 |
+
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
|
20 |
+
endif()
|
21 |
+
endforeach()
|
diff-gaussian-rasterization-camera/third_party/glm/copying.txt
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
================================================================================
|
2 |
+
OpenGL Mathematics (GLM)
|
3 |
+
--------------------------------------------------------------------------------
|
4 |
+
GLM is licensed under The Happy Bunny License or MIT License
|
5 |
+
|
6 |
+
================================================================================
|
7 |
+
The Happy Bunny License (Modified MIT License)
|
8 |
+
--------------------------------------------------------------------------------
|
9 |
+
Copyright (c) 2005 - G-Truc Creation
|
10 |
+
|
11 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
+
of this software and associated documentation files (the "Software"), to deal
|
13 |
+
in the Software without restriction, including without limitation the rights
|
14 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
+
copies of the Software, and to permit persons to whom the Software is
|
16 |
+
furnished to do so, subject to the following conditions:
|
17 |
+
|
18 |
+
The above copyright notice and this permission notice shall be included in
|
19 |
+
all copies or substantial portions of the Software.
|
20 |
+
|
21 |
+
Restrictions:
|
22 |
+
By making use of the Software for military purposes, you choose to make a
|
23 |
+
Bunny unhappy.
|
24 |
+
|
25 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
26 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
28 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
29 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
30 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
31 |
+
THE SOFTWARE.
|
32 |
+
|
33 |
+
================================================================================
|
34 |
+
The MIT License
|
35 |
+
--------------------------------------------------------------------------------
|
36 |
+
Copyright (c) 2005 - G-Truc Creation
|
37 |
+
|
38 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
39 |
+
of this software and associated documentation files (the "Software"), to deal
|
40 |
+
in the Software without restriction, including without limitation the rights
|
41 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
42 |
+
copies of the Software, and to permit persons to whom the Software is
|
43 |
+
furnished to do so, subject to the following conditions:
|
44 |
+
|
45 |
+
The above copyright notice and this permission notice shall be included in
|
46 |
+
all copies or substantial portions of the Software.
|
47 |
+
|
48 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
49 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
50 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
51 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
52 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
53 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
54 |
+
THE SOFTWARE.
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00002_source.html
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: _fixes.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">_fixes.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include <cmath></span></div>
|
92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
93 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#ifdef max</span></div>
|
94 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#undef max</span></div>
|
95 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#endif</span></div>
|
96 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
|
97 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifdef min</span></div>
|
98 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#undef min</span></div>
|
99 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#endif</span></div>
|
100 |
+
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
|
101 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifdef isnan</span></div>
|
102 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#undef isnan</span></div>
|
103 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div>
|
104 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
105 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#ifdef isinf</span></div>
|
106 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#undef isinf</span></div>
|
107 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
|
108 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
|
109 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef log2</span></div>
|
110 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#undef log2</span></div>
|
111 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
|
112 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
113 |
+
</div><!-- fragment --></div><!-- contents -->
|
114 |
+
<!-- start footer part -->
|
115 |
+
<hr class="footer"/><address class="footer"><small>
|
116 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
117 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
118 |
+
</a> 1.8.10
|
119 |
+
</small></address>
|
120 |
+
</body>
|
121 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00015.html
ADDED
@@ -0,0 +1,267 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: common.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">common.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00015_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
102 |
+
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">abs</a> (genType x)</td></tr>
|
103 |
+
<tr class="memdesc:ga439e60a72eadecfeda2df5449c613a64"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:ga439e60a72eadecfeda2df5449c613a64"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
106 |
+
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a> (vec< L, T, Q > const &x)</td></tr>
|
107 |
+
<tr class="memdesc:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">More...</a><br /></td></tr>
|
108 |
+
<tr class="separator:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memSeparator" colspan="2"> </td></tr>
|
109 |
+
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
110 |
+
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a> (vec< L, T, Q > const &x)</td></tr>
|
111 |
+
<tr class="memdesc:gafb9d2a645a23aca12d4d6de0104b7657"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is greater than or equal to x. <a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">More...</a><br /></td></tr>
|
112 |
+
<tr class="separator:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memSeparator" colspan="2"> </td></tr>
|
113 |
+
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
114 |
+
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
|
115 |
+
<tr class="memdesc:ga7cd77683da6361e297c56443fc70806d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">More...</a><br /></td></tr>
|
116 |
+
<tr class="separator:ga7cd77683da6361e297c56443fc70806d"><td class="memSeparator" colspan="2"> </td></tr>
|
117 |
+
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
118 |
+
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafba2e0674deb5953878d89483cd6323d">clamp</a> (vec< L, T, Q > const &x, T minVal, T maxVal)</td></tr>
|
119 |
+
<tr class="memdesc:gafba2e0674deb5953878d89483cd6323d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gafba2e0674deb5953878d89483cd6323d">More...</a><br /></td></tr>
|
120 |
+
<tr class="separator:gafba2e0674deb5953878d89483cd6323d"><td class="memSeparator" colspan="2"> </td></tr>
|
121 |
+
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
122 |
+
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)</td></tr>
|
123 |
+
<tr class="memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">More...</a><br /></td></tr>
|
124 |
+
<tr class="separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memSeparator" colspan="2"> </td></tr>
|
125 |
+
<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
|
126 |
+
<tr class="memdesc:ga1425c1c3160ec51214b03a0469a3013d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">More...</a><br /></td></tr>
|
127 |
+
<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
|
128 |
+
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
129 |
+
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, int, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a> (vec< L, float, Q > const &v)</td></tr>
|
130 |
+
<tr class="memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">More...</a><br /></td></tr>
|
131 |
+
<tr class="separator:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memSeparator" colspan="2"> </td></tr>
|
132 |
+
<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
|
133 |
+
<tr class="memdesc:ga70e0271c34af52f3100c7960e18c3f2b"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">More...</a><br /></td></tr>
|
134 |
+
<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
|
135 |
+
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
136 |
+
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, uint, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a> (vec< L, float, Q > const &v)</td></tr>
|
137 |
+
<tr class="memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">More...</a><br /></td></tr>
|
138 |
+
<tr class="separator:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memSeparator" colspan="2"> </td></tr>
|
139 |
+
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
140 |
+
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a> (vec< L, T, Q > const &x)</td></tr>
|
141 |
+
<tr class="memdesc:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is less then or equal to x. <a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">More...</a><br /></td></tr>
|
142 |
+
<tr class="separator:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memSeparator" colspan="2"> </td></tr>
|
143 |
+
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
144 |
+
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
|
145 |
+
<tr class="memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="mdescLeft"> </td><td class="mdescRight">Computes and returns a * b + c. <a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">More...</a><br /></td></tr>
|
146 |
+
<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
|
147 |
+
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
148 |
+
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
|
149 |
+
<tr class="memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">More...</a><br /></td></tr>
|
150 |
+
<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
|
151 |
+
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
152 |
+
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a> (vec< L, T, Q > const &x)</td></tr>
|
153 |
+
<tr class="memdesc:ga2df623004f634b440d61e018d62c751b"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga2df623004f634b440d61e018d62c751b">More...</a><br /></td></tr>
|
154 |
+
<tr class="separator:ga2df623004f634b440d61e018d62c751b"><td class="memSeparator" colspan="2"> </td></tr>
|
155 |
+
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
156 |
+
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a> (genType x, int &exp)</td></tr>
|
157 |
+
<tr class="memdesc:gaddf5ef73283c171730e0bcc11833fa81"><td class="mdescLeft"> </td><td class="mdescRight">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) <a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">More...</a><br /></td></tr>
|
158 |
+
<tr class="separator:gaddf5ef73283c171730e0bcc11833fa81"><td class="memSeparator" colspan="2"> </td></tr>
|
159 |
+
<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
|
160 |
+
<tr class="memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">More...</a><br /></td></tr>
|
161 |
+
<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
|
162 |
+
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
163 |
+
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a> (vec< L, int, Q > const &v)</td></tr>
|
164 |
+
<tr class="memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">More...</a><br /></td></tr>
|
165 |
+
<tr class="separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memSeparator" colspan="2"> </td></tr>
|
166 |
+
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
167 |
+
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a> (vec< L, T, Q > const &x)</td></tr>
|
168 |
+
<tr class="memdesc:ga2885587c23a106301f20443896365b62"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga2885587c23a106301f20443896365b62">More...</a><br /></td></tr>
|
169 |
+
<tr class="separator:ga2885587c23a106301f20443896365b62"><td class="memSeparator" colspan="2"> </td></tr>
|
170 |
+
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
171 |
+
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a> (vec< L, T, Q > const &x)</td></tr>
|
172 |
+
<tr class="memdesc:ga29ef934c00306490de837b4746b4e14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">More...</a><br /></td></tr>
|
173 |
+
<tr class="separator:ga29ef934c00306490de837b4746b4e14d"><td class="memSeparator" colspan="2"> </td></tr>
|
174 |
+
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
175 |
+
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a> (genType const &x, int const &exp)</td></tr>
|
176 |
+
<tr class="memdesc:gac3010e0a0c35a1b514540f2fb579c58c"><td class="mdescLeft"> </td><td class="mdescRight">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) <a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">More...</a><br /></td></tr>
|
177 |
+
<tr class="separator:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memSeparator" colspan="2"> </td></tr>
|
178 |
+
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
179 |
+
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">max</a> (genType x, genType y)</td></tr>
|
180 |
+
<tr class="memdesc:gae02d42887fc5570451f880e3c624b9ac"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">More...</a><br /></td></tr>
|
181 |
+
<tr class="separator:gae02d42887fc5570451f880e3c624b9ac"><td class="memSeparator" colspan="2"> </td></tr>
|
182 |
+
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
183 |
+
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">max</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
184 |
+
<tr class="memdesc:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">More...</a><br /></td></tr>
|
185 |
+
<tr class="separator:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memSeparator" colspan="2"> </td></tr>
|
186 |
+
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
187 |
+
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
188 |
+
<tr class="memdesc:gac1fec0c3303b572a6d4697a637213870"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">More...</a><br /></td></tr>
|
189 |
+
<tr class="separator:gac1fec0c3303b572a6d4697a637213870"><td class="memSeparator" colspan="2"> </td></tr>
|
190 |
+
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
191 |
+
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">min</a> (genType x, genType y)</td></tr>
|
192 |
+
<tr class="memdesc:ga6cf8098827054a270ee36b18e30d471d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">More...</a><br /></td></tr>
|
193 |
+
<tr class="separator:ga6cf8098827054a270ee36b18e30d471d"><td class="memSeparator" colspan="2"> </td></tr>
|
194 |
+
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
195 |
+
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">min</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
196 |
+
<tr class="memdesc:gaa7d015eba1f9f48519251f4abe69b14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">More...</a><br /></td></tr>
|
197 |
+
<tr class="separator:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memSeparator" colspan="2"> </td></tr>
|
198 |
+
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
199 |
+
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
200 |
+
<tr class="memdesc:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">More...</a><br /></td></tr>
|
201 |
+
<tr class="separator:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memSeparator" colspan="2"> </td></tr>
|
202 |
+
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
|
203 |
+
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>
|
204 |
+
<tr class="memdesc:ga8e93f374aae27d1a88b921860351f8d4"><td class="mdescLeft"> </td><td class="mdescRight">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. <a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">More...</a><br /></td></tr>
|
205 |
+
<tr class="separator:ga8e93f374aae27d1a88b921860351f8d4"><td class="memSeparator" colspan="2"> </td></tr>
|
206 |
+
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
207 |
+
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
208 |
+
<tr class="memdesc:ga9b197a452cd52db3c5c18bac72bd7798"><td class="mdescLeft"> </td><td class="mdescRight">Modulus. <a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">More...</a><br /></td></tr>
|
209 |
+
<tr class="separator:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memSeparator" colspan="2"> </td></tr>
|
210 |
+
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
211 |
+
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
|
212 |
+
<tr class="memdesc:ga85e33f139b8db1b39b590a5713b9e679"><td class="mdescLeft"> </td><td class="mdescRight">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). <a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">More...</a><br /></td></tr>
|
213 |
+
<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
|
214 |
+
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
215 |
+
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a> (vec< L, T, Q > const &x)</td></tr>
|
216 |
+
<tr class="memdesc:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">More...</a><br /></td></tr>
|
217 |
+
<tr class="separator:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memSeparator" colspan="2"> </td></tr>
|
218 |
+
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
219 |
+
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a> (vec< L, T, Q > const &x)</td></tr>
|
220 |
+
<tr class="memdesc:ga76b81785045a057989a84d99aeeb1578"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">More...</a><br /></td></tr>
|
221 |
+
<tr class="separator:ga76b81785045a057989a84d99aeeb1578"><td class="memSeparator" colspan="2"> </td></tr>
|
222 |
+
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
223 |
+
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a> (vec< L, T, Q > const &x)</td></tr>
|
224 |
+
<tr class="memdesc:ga1e2e5cfff800056540e32f6c9b604b28"><td class="mdescLeft"> </td><td class="mdescRight">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. <a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">More...</a><br /></td></tr>
|
225 |
+
<tr class="separator:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memSeparator" colspan="2"> </td></tr>
|
226 |
+
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
227 |
+
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
|
228 |
+
<tr class="memdesc:ga562edf7eca082cc5b7a0aaf180436daf"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. <a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">More...</a><br /></td></tr>
|
229 |
+
<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
|
230 |
+
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
231 |
+
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
|
232 |
+
<tr class="memdesc:ga015a1261ff23e12650211aa872863cce"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. <a href="a00241.html#ga015a1261ff23e12650211aa872863cce">More...</a><br /></td></tr>
|
233 |
+
<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
|
234 |
+
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
235 |
+
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">step</a> (T edge, vec< L, T, Q > const &x)</td></tr>
|
236 |
+
<tr class="memdesc:ga8f9a911a48ef244b51654eaefc81c551"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">More...</a><br /></td></tr>
|
237 |
+
<tr class="separator:ga8f9a911a48ef244b51654eaefc81c551"><td class="memSeparator" colspan="2"> </td></tr>
|
238 |
+
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
239 |
+
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a> (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</td></tr>
|
240 |
+
<tr class="memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">More...</a><br /></td></tr>
|
241 |
+
<tr class="separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memSeparator" colspan="2"> </td></tr>
|
242 |
+
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
243 |
+
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a> (vec< L, T, Q > const &x)</td></tr>
|
244 |
+
<tr class="memdesc:gaf9375e3e06173271d49e6ffa3a334259"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. <a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">More...</a><br /></td></tr>
|
245 |
+
<tr class="separator:gaf9375e3e06173271d49e6ffa3a334259"><td class="memSeparator" colspan="2"> </td></tr>
|
246 |
+
<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
|
247 |
+
<tr class="memdesc:gab2bae0d15dcdca6093f88f76b3975d97"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">More...</a><br /></td></tr>
|
248 |
+
<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
|
249 |
+
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
250 |
+
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a> (vec< L, uint, Q > const &v)</td></tr>
|
251 |
+
<tr class="memdesc:ga97f46b5f7b42fe44482e13356eb394ae"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">More...</a><br /></td></tr>
|
252 |
+
<tr class="separator:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memSeparator" colspan="2"> </td></tr>
|
253 |
+
</table>
|
254 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
255 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
256 |
+
<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
|
257 |
+
|
258 |
+
<p>Definition in file <a class="el" href="a00015_source.html">common.hpp</a>.</p>
|
259 |
+
</div></div><!-- contents -->
|
260 |
+
<!-- start footer part -->
|
261 |
+
<hr class="footer"/><address class="footer"><small>
|
262 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
263 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
264 |
+
</a> 1.8.10
|
265 |
+
</small></address>
|
266 |
+
</body>
|
267 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00017_source.html
ADDED
@@ -0,0 +1,282 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: compatibility.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">compatibility.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00017.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
94 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
|
95 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
96 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
|
97 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
|
98 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
99 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
100 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</span></div>
|
101 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># else</span></div>
|
102 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_compatibility extension included")</span></div>
|
103 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># endif</span></div>
|
104 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
|
105 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
|
106 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_VC</span></div>
|
107 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># include <cfloat></span></div>
|
108 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
|
109 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># include <cmath></span></div>
|
110 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)</span></div>
|
111 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># undef isfinite</span></div>
|
112 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># endif</span></div>
|
113 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#endif//GLM_COMPILER</span></div>
|
114 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
|
115 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
116 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div>
|
117 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
|
118 |
+
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00315.html#ga5494ba3a95ea6594c86fc75236886864"> 41</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(T x, T y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
119 |
+
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00315.html#gaa551c0a0e16d2d4608e49f7696df897f"> 42</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
120 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
121 |
+
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00315.html#ga44a8b5fd776320f1713413dec959b32a"> 44</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
122 |
+
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00315.html#ga89ac8e000199292ec7875519d27e214b"> 45</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
123 |
+
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00315.html#gaf68de5baf72d16135368b8ef4f841604"> 46</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y, <span class="keyword">const</span> vec<2, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
124 |
+
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3"> 47</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y, <span class="keyword">const</span> vec<3, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
125 |
+
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00315.html#gab5477ab69c40de4db5d58d3359529724"> 48</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y, <span class="keyword">const</span> vec<4, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
126 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
127 |
+
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7"> 50</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(T x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
128 |
+
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00315.html#gaee97b8001c794a78a44f5d59f62a8aba"> 51</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<2, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
129 |
+
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00315.html#ga39bfe3a421286ee31680d45c31ccc161"> 52</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<3, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
130 |
+
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183"> 53</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<4, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
131 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
|
132 |
+
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00315.html#gac63011205bf6d0be82589dc56dd26708"> 55</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(T x, T y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
133 |
+
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00315.html#ga83bc41bd6f89113ee8006576b12bfc50"> 56</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
134 |
+
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00315.html#gac39314f5087e7e51e592897cabbc1927"> 57</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
135 |
+
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3"> 58</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
136 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
|
137 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType> GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(genType <span class="keyword">const</span>& x); </div>
|
138 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_DECL vec<1, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<1, T, Q>& x); </div>
|
139 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_DECL vec<2, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<2, T, Q>& x); </div>
|
140 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_DECL vec<3, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<3, T, Q>& x); </div>
|
141 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_DECL vec<4, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<4, T, Q>& x); </div>
|
142 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
|
143 |
+
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00315.html#gaddcd7aa2e30e61af5b38660613d3979e"> 66</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00315.html#gaddcd7aa2e30e61af5b38660613d3979e">bool1</a>; </div>
|
144 |
+
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9"> 67</a></span>  <span class="keyword">typedef</span> vec<2, bool, highp> <a class="code" href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9">bool2</a>; </div>
|
145 |
+
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00315.html#ga99629f818737f342204071ef8296b2ed"> 68</a></span>  <span class="keyword">typedef</span> vec<3, bool, highp> <a class="code" href="a00315.html#ga99629f818737f342204071ef8296b2ed">bool3</a>; </div>
|
146 |
+
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3"> 69</a></span>  <span class="keyword">typedef</span> vec<4, bool, highp> <a class="code" href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3">bool4</a>; </div>
|
147 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
|
148 |
+
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00315.html#ga7f895c936f0c29c8729afbbf22806090"> 71</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00315.html#ga7f895c936f0c29c8729afbbf22806090">bool1x1</a>; </div>
|
149 |
+
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00315.html#gadb3703955e513632f98ba12fe051ba3e"> 72</a></span>  <span class="keyword">typedef</span> mat<2, 2, bool, highp> <a class="code" href="a00315.html#gadb3703955e513632f98ba12fe051ba3e">bool2x2</a>; </div>
|
150 |
+
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0"> 73</a></span>  <span class="keyword">typedef</span> mat<2, 3, bool, highp> <a class="code" href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0">bool2x3</a>; </div>
|
151 |
+
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f"> 74</a></span>  <span class="keyword">typedef</span> mat<2, 4, bool, highp> <a class="code" href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f">bool2x4</a>; </div>
|
152 |
+
<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755"> 75</a></span>  <span class="keyword">typedef</span> mat<3, 2, bool, highp> <a class="code" href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755">bool3x2</a>; </div>
|
153 |
+
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c"> 76</a></span>  <span class="keyword">typedef</span> mat<3, 3, bool, highp> <a class="code" href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c">bool3x3</a>; </div>
|
154 |
+
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf"> 77</a></span>  <span class="keyword">typedef</span> mat<3, 4, bool, highp> <a class="code" href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf">bool3x4</a>; </div>
|
155 |
+
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0"> 78</a></span>  <span class="keyword">typedef</span> mat<4, 2, bool, highp> <a class="code" href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0">bool4x2</a>; </div>
|
156 |
+
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe"> 79</a></span>  <span class="keyword">typedef</span> mat<4, 3, bool, highp> <a class="code" href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe">bool4x3</a>; </div>
|
157 |
+
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4"> 80</a></span>  <span class="keyword">typedef</span> mat<4, 4, bool, highp> <a class="code" href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4">bool4x4</a>; </div>
|
158 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
|
159 |
+
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3"> 82</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3">int1</a>; </div>
|
160 |
+
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a"> 83</a></span>  <span class="keyword">typedef</span> vec<2, int, highp> <a class="code" href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a">int2</a>; </div>
|
161 |
+
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00315.html#ga909c38a425f215a50c847145d7da09f0"> 84</a></span>  <span class="keyword">typedef</span> vec<3, int, highp> <a class="code" href="a00315.html#ga909c38a425f215a50c847145d7da09f0">int3</a>; </div>
|
162 |
+
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a"> 85</a></span>  <span class="keyword">typedef</span> vec<4, int, highp> <a class="code" href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a">int4</a>; </div>
|
163 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
|
164 |
+
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00315.html#ga056ffe02d3a45af626f8e62221881c7a"> 87</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00315.html#ga056ffe02d3a45af626f8e62221881c7a">int1x1</a>; </div>
|
165 |
+
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d"> 88</a></span>  <span class="keyword">typedef</span> mat<2, 2, int, highp> <a class="code" href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d">int2x2</a>; </div>
|
166 |
+
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3"> 89</a></span>  <span class="keyword">typedef</span> mat<2, 3, int, highp> <a class="code" href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3">int2x3</a>; </div>
|
167 |
+
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807"> 90</a></span>  <span class="keyword">typedef</span> mat<2, 4, int, highp> <a class="code" href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807">int2x4</a>; </div>
|
168 |
+
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8"> 91</a></span>  <span class="keyword">typedef</span> mat<3, 2, int, highp> <a class="code" href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8">int3x2</a>; </div>
|
169 |
+
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00315.html#ga15c9649286f0bf431bdf9b3509580048"> 92</a></span>  <span class="keyword">typedef</span> mat<3, 3, int, highp> <a class="code" href="a00315.html#ga15c9649286f0bf431bdf9b3509580048">int3x3</a>; </div>
|
170 |
+
<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f"> 93</a></span>  <span class="keyword">typedef</span> mat<3, 4, int, highp> <a class="code" href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f">int3x4</a>; </div>
|
171 |
+
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1"> 94</a></span>  <span class="keyword">typedef</span> mat<4, 2, int, highp> <a class="code" href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1">int4x2</a>; </div>
|
172 |
+
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d"> 95</a></span>  <span class="keyword">typedef</span> mat<4, 3, int, highp> <a class="code" href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d">int4x3</a>; </div>
|
173 |
+
<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8"> 96</a></span>  <span class="keyword">typedef</span> mat<4, 4, int, highp> <a class="code" href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8">int4x4</a>; </div>
|
174 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
|
175 |
+
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead"> 98</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a>; </div>
|
176 |
+
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00315.html#ga02d3c013982c183906c61d74aa3166ce"> 99</a></span>  <span class="keyword">typedef</span> vec<2, float, highp> <a class="code" href="a00315.html#ga02d3c013982c183906c61d74aa3166ce">float2</a>; </div>
|
177 |
+
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0"> 100</a></span>  <span class="keyword">typedef</span> vec<3, float, highp> <a class="code" href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0">float3</a>; </div>
|
178 |
+
<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00315.html#gae2da7345087db3815a25d8837a727ef1"> 101</a></span>  <span class="keyword">typedef</span> vec<4, float, highp> <a class="code" href="a00315.html#gae2da7345087db3815a25d8837a727ef1">float4</a>; </div>
|
179 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
|
180 |
+
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00315.html#ga73720b8dc4620835b17f74d428f98c0c"> 103</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00315.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a>; </div>
|
181 |
+
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f"> 104</a></span>  <span class="keyword">typedef</span> mat<2, 2, float, highp> <a class="code" href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f">float2x2</a>; </div>
|
182 |
+
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe"> 105</a></span>  <span class="keyword">typedef</span> mat<2, 3, float, highp> <a class="code" href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe">float2x3</a>; </div>
|
183 |
+
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4"> 106</a></span>  <span class="keyword">typedef</span> mat<2, 4, float, highp> <a class="code" href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4">float2x4</a>; </div>
|
184 |
+
<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576"> 107</a></span>  <span class="keyword">typedef</span> mat<3, 2, float, highp> <a class="code" href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576">float3x2</a>; </div>
|
185 |
+
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3"> 108</a></span>  <span class="keyword">typedef</span> mat<3, 3, float, highp> <a class="code" href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3">float3x3</a>; </div>
|
186 |
+
<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332"> 109</a></span>  <span class="keyword">typedef</span> mat<3, 4, float, highp> <a class="code" href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332">float3x4</a>; </div>
|
187 |
+
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e"> 110</a></span>  <span class="keyword">typedef</span> mat<4, 2, float, highp> <a class="code" href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e">float4x2</a>; </div>
|
188 |
+
<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac"> 111</a></span>  <span class="keyword">typedef</span> mat<4, 3, float, highp> <a class="code" href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac">float4x3</a>; </div>
|
189 |
+
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf"> 112</a></span>  <span class="keyword">typedef</span> mat<4, 4, float, highp> <a class="code" href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf">float4x4</a>; </div>
|
190 |
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
|
191 |
+
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="a00315.html#ga20b861a9b6e2a300323671c57a02525b"> 114</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00315.html#ga20b861a9b6e2a300323671c57a02525b">double1</a>; </div>
|
192 |
+
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00315.html#ga31b729b04facccda73f07ed26958b3c2"> 115</a></span>  <span class="keyword">typedef</span> vec<2, double, highp> <a class="code" href="a00315.html#ga31b729b04facccda73f07ed26958b3c2">double2</a>; </div>
|
193 |
+
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472"> 116</a></span>  <span class="keyword">typedef</span> vec<3, double, highp> <a class="code" href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472">double3</a>; </div>
|
194 |
+
<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6"> 117</a></span>  <span class="keyword">typedef</span> vec<4, double, highp> <a class="code" href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6">double4</a>; </div>
|
195 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
|
196 |
+
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8"> 119</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a>; </div>
|
197 |
+
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd"> 120</a></span>  <span class="keyword">typedef</span> mat<2, 2, double, highp> <a class="code" href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd">double2x2</a>; </div>
|
198 |
+
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00315.html#ga3655bc324008553ca61f39952d0b2d08"> 121</a></span>  <span class="keyword">typedef</span> mat<2, 3, double, highp> <a class="code" href="a00315.html#ga3655bc324008553ca61f39952d0b2d08">double2x3</a>; </div>
|
199 |
+
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a"> 122</a></span>  <span class="keyword">typedef</span> mat<2, 4, double, highp> <a class="code" href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a">double2x4</a>; </div>
|
200 |
+
<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975"> 123</a></span>  <span class="keyword">typedef</span> mat<3, 2, double, highp> <a class="code" href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975">double3x2</a>; </div>
|
201 |
+
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180"> 124</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, highp> <a class="code" href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180">double3x3</a>; </div>
|
202 |
+
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00315.html#ga2ef022e453d663d70aec414b2a80f756"> 125</a></span>  <span class="keyword">typedef</span> mat<3, 4, double, highp> <a class="code" href="a00315.html#ga2ef022e453d663d70aec414b2a80f756">double3x4</a>; </div>
|
203 |
+
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00315.html#gabca29ccceea53669618b751aae0ba83d"> 126</a></span>  <span class="keyword">typedef</span> mat<4, 2, double, highp> <a class="code" href="a00315.html#gabca29ccceea53669618b751aae0ba83d">double4x2</a>; </div>
|
204 |
+
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c"> 127</a></span>  <span class="keyword">typedef</span> mat<4, 3, double, highp> <a class="code" href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c">double4x3</a>; </div>
|
205 |
+
<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00315.html#gaab541bed2e788e4537852a2492860806"> 128</a></span>  <span class="keyword">typedef</span> mat<4, 4, double, highp> <a class="code" href="a00315.html#gaab541bed2e788e4537852a2492860806">double4x4</a>; </div>
|
206 |
+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
|
207 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }<span class="comment">//namespace glm</span></div>
|
208 |
+
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
|
209 |
+
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#include "compatibility.inl"</span></div>
|
210 |
+
<div class="ttc" id="a00315_html_gaab541bed2e788e4537852a2492860806"><div class="ttname"><a href="a00315.html#gaab541bed2e788e4537852a2492860806">glm::double4x4</a></div><div class="ttdeci">mat< 4, 4, double, highp > double4x4</div><div class="ttdoc">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00128">compatibility.hpp:128</a></div></div>
|
211 |
+
<div class="ttc" id="a00315_html_gaacac46ddc7d15d0f9529d05c92946a0f"><div class="ttname"><a href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f">glm::int3x4</a></div><div class="ttdeci">mat< 3, 4, int, highp > int3x4</div><div class="ttdoc">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00093">compatibility.hpp:93</a></div></div>
|
212 |
+
<div class="ttc" id="a00373_html_gac61629f3a4aa14057e7a8cae002291db"><div class="ttname"><a href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">glm::atan</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > atan(vec< L, T, Q > const &y, vec< L, T, Q > const &x)</div><div class="ttdoc">Arc tangent. </div></div>
|
213 |
+
<div class="ttc" id="a00315_html_gaddcd7aa2e30e61af5b38660613d3979e"><div class="ttname"><a href="a00315.html#gaddcd7aa2e30e61af5b38660613d3979e">glm::bool1</a></div><div class="ttdeci">bool bool1</div><div class="ttdoc">boolean type with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00066">compatibility.hpp:66</a></div></div>
|
214 |
+
<div class="ttc" id="a00315_html_gac0a51b4812038aa81d73ffcc37f741ac"><div class="ttname"><a href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac">glm::float4x3</a></div><div class="ttdeci">mat< 4, 3, float, highp > float4x3</div><div class="ttdoc">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00111">compatibility.hpp:111</a></div></div>
|
215 |
+
<div class="ttc" id="a00315_html_gad3051649b3715d828a4ab92cdae7c3bf"><div class="ttname"><a href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf">glm::float4x4</a></div><div class="ttdeci">mat< 4, 4, float, highp > float4x4</div><div class="ttdoc">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00112">compatibility.hpp:112</a></div></div>
|
216 |
+
<div class="ttc" id="a00315_html_gacd33061fc64a7b2dcfd7322c49d9557a"><div class="ttname"><a href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a">glm::double2x4</a></div><div class="ttdeci">mat< 2, 4, double, highp > double2x4</div><div class="ttdoc">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00122">compatibility.hpp:122</a></div></div>
|
217 |
+
<div class="ttc" id="a00315_html_gae57d0201096834d25f2b91b319e7cdbd"><div class="ttname"><a href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd">glm::double2x2</a></div><div class="ttdeci">mat< 2, 2, double, highp > double2x2</div><div class="ttdoc">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00120">compatibility.hpp:120</a></div></div>
|
218 |
+
<div class="ttc" id="a00315_html_ga5ec08fc39c9d783dfcc488be240fe975"><div class="ttname"><a href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975">glm::double3x2</a></div><div class="ttdeci">mat< 3, 2, double, highp > double3x2</div><div class="ttdoc">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00123">compatibility.hpp:123</a></div></div>
|
219 |
+
<div class="ttc" id="a00315_html_gaba86c28da7bf5bdac64fecf7d56e8ff3"><div class="ttname"><a href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">glm::atan2</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > atan2(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)</div><div class="ttdoc">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00058">compatibility.hpp:58</a></div></div>
|
220 |
+
<div class="ttc" id="a00315_html_ga45f16a4dd0db1f199afaed9fd12fe9a8"><div class="ttname"><a href="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">glm::double1x1</a></div><div class="ttdeci">double double1x1</div><div class="ttdoc">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00119">compatibility.hpp:119</a></div></div>
|
221 |
+
<div class="ttc" id="a00315_html_gab5477ab69c40de4db5d58d3359529724"><div class="ttname"><a href="a00315.html#gab5477ab69c40de4db5d58d3359529724">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)</div><div class="ttdoc">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00048">compatibility.hpp:48</a></div></div>
|
222 |
+
<div class="ttc" id="a00315_html_ga4bad5bb20c6ddaecfe4006c93841d180"><div class="ttname"><a href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180">glm::double3x3</a></div><div class="ttdeci">mat< 3, 3, double, highp > double3x3</div><div class="ttdoc">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00124">compatibility.hpp:124</a></div></div>
|
223 |
+
<div class="ttc" id="a00315_html_gae2da7345087db3815a25d8837a727ef1"><div class="ttname"><a href="a00315.html#gae2da7345087db3815a25d8837a727ef1">glm::float4</a></div><div class="ttdeci">vec< 4, float, highp > float4</div><div class="ttdoc">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00101">compatibility.hpp:101</a></div></div>
|
224 |
+
<div class="ttc" id="a00315_html_ga056ffe02d3a45af626f8e62221881c7a"><div class="ttname"><a href="a00315.html#ga056ffe02d3a45af626f8e62221881c7a">glm::int1x1</a></div><div class="ttdeci">int int1x1</div><div class="ttdoc">integer matrix with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00087">compatibility.hpp:87</a></div></div>
|
225 |
+
<div class="ttc" id="a00315_html_ga02d3c013982c183906c61d74aa3166ce"><div class="ttname"><a href="a00315.html#ga02d3c013982c183906c61d74aa3166ce">glm::float2</a></div><div class="ttdeci">vec< 2, float, highp > float2</div><div class="ttdoc">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00099">compatibility.hpp:99</a></div></div>
|
226 |
+
<div class="ttc" id="a00315_html_ga19925badbe10ce61df1d0de00be0b5ad"><div class="ttname"><a href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">glm::isfinite</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 4, bool, Q > isfinite(const vec< 4, T, Q > &x)</div><div class="ttdoc">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...</div></div>
|
227 |
+
<div class="ttc" id="a00315_html_ga9ae6ee155d0f90cb1ae5b6c4546738a0"><div class="ttname"><a href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0">glm::bool2x3</a></div><div class="ttdeci">mat< 2, 3, bool, highp > bool2x3</div><div class="ttdoc">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00073">compatibility.hpp:73</a></div></div>
|
228 |
+
<div class="ttc" id="a00315_html_ga197ded5ad8354f6b6fb91189d7a269b3"><div class="ttname"><a href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3">glm::int2x3</a></div><div class="ttdeci">mat< 2, 3, int, highp > int2x3</div><div class="ttdoc">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00089">compatibility.hpp:89</a></div></div>
|
229 |
+
<div class="ttc" id="a00315_html_ga0670a2111b5e4a6410bd027fa0232fc3"><div class="ttname"><a href="a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3">glm::int1</a></div><div class="ttdeci">int int1</div><div class="ttdoc">integer vector with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00082">compatibility.hpp:82</a></div></div>
|
230 |
+
<div class="ttc" id="a00315_html_ga821ff110fc8533a053cbfcc93e078cc0"><div class="ttname"><a href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0">glm::float3</a></div><div class="ttdeci">vec< 3, float, highp > float3</div><div class="ttdoc">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00100">compatibility.hpp:100</a></div></div>
|
231 |
+
<div class="ttc" id="a00315_html_gafec3cfd901ab334a92e0242b8f2269b4"><div class="ttname"><a href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4">glm::float2x4</a></div><div class="ttdeci">mat< 2, 4, float, highp > float2x4</div><div class="ttdoc">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00106">compatibility.hpp:106</a></div></div>
|
232 |
+
<div class="ttc" id="a00315_html_gadb3703955e513632f98ba12fe051ba3e"><div class="ttname"><a href="a00315.html#gadb3703955e513632f98ba12fe051ba3e">glm::bool2x2</a></div><div class="ttdeci">mat< 2, 2, bool, highp > bool2x2</div><div class="ttdoc">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00072">compatibility.hpp:72</a></div></div>
|
233 |
+
<div class="ttc" id="a00315_html_ga7d2a7d13986602ae2896bfaa394235d4"><div class="ttname"><a href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4">glm::bool4x4</a></div><div class="ttdeci">mat< 4, 4, bool, highp > bool4x4</div><div class="ttdoc">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00080">compatibility.hpp:80</a></div></div>
|
234 |
+
<div class="ttc" id="a00315_html_gaf5208d01f6c6fbcb7bb55d610b9c0ead"><div class="ttname"><a href="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">glm::float1</a></div><div class="ttdeci">float float1</div><div class="ttdoc">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00098">compatibility.hpp:98</a></div></div>
|
235 |
+
<div class="ttc" id="a00315_html_ga73720b8dc4620835b17f74d428f98c0c"><div class="ttname"><a href="a00315.html#ga73720b8dc4620835b17f74d428f98c0c">glm::float1x1</a></div><div class="ttdeci">float float1x1</div><div class="ttdoc">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00103">compatibility.hpp:103</a></div></div>
|
236 |
+
<div class="ttc" id="a00315_html_gabca29ccceea53669618b751aae0ba83d"><div class="ttname"><a href="a00315.html#gabca29ccceea53669618b751aae0ba83d">glm::double4x2</a></div><div class="ttdeci">mat< 4, 2, double, highp > double4x2</div><div class="ttdoc">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00126">compatibility.hpp:126</a></div></div>
|
237 |
+
<div class="ttc" id="a00315_html_gae4a2c53f14aeec9a17c2b81142b7e82d"><div class="ttname"><a href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d">glm::int4x3</a></div><div class="ttdeci">mat< 4, 3, int, highp > int4x3</div><div class="ttdoc">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00095">compatibility.hpp:95</a></div></div>
|
238 |
+
<div class="ttc" id="a00315_html_ga9ed830f52408b2f83c085063a3eaf1d0"><div class="ttname"><a href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0">glm::bool4x2</a></div><div class="ttdeci">mat< 4, 2, bool, highp > bool4x2</div><div class="ttdoc">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00078">compatibility.hpp:78</a></div></div>
|
239 |
+
<div class="ttc" id="a00315_html_ga33d43ecbb60a85a1366ff83f8a0ec85f"><div class="ttname"><a href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f">glm::float2x2</a></div><div class="ttdeci">mat< 2, 2, float, highp > float2x2</div><div class="ttdoc">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00104">compatibility.hpp:104</a></div></div>
|
240 |
+
<div class="ttc" id="a00315_html_ga909c38a425f215a50c847145d7da09f0"><div class="ttname"><a href="a00315.html#ga909c38a425f215a50c847145d7da09f0">glm::int3</a></div><div class="ttdeci">vec< 3, int, highp > int3</div><div class="ttdoc">integer vector with 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00084">compatibility.hpp:84</a></div></div>
|
241 |
+
<div class="ttc" id="a00315_html_ga308b9af0c221145bcfe9bfc129d9098e"><div class="ttname"><a href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e">glm::float4x2</a></div><div class="ttdeci">mat< 4, 2, float, highp > float4x2</div><div class="ttdoc">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00110">compatibility.hpp:110</a></div></div>
|
242 |
+
<div class="ttc" id="a00315_html_ga3655bc324008553ca61f39952d0b2d08"><div class="ttname"><a href="a00315.html#ga3655bc324008553ca61f39952d0b2d08">glm::double2x3</a></div><div class="ttdeci">mat< 2, 3, double, highp > double2x3</div><div class="ttdoc">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00121">compatibility.hpp:121</a></div></div>
|
243 |
+
<div class="ttc" id="a00315_html_ga939b0cff15cee3030f75c1b2e36f89fe"><div class="ttname"><a href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe">glm::float2x3</a></div><div class="ttdeci">mat< 2, 3, float, highp > float2x3</div><div class="ttdoc">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00105">compatibility.hpp:105</a></div></div>
|
244 |
+
<div class="ttc" id="a00315_html_gaa4cbe16a92cf3664376c7a2fc5126aa8"><div class="ttname"><a href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8">glm::int3x2</a></div><div class="ttdeci">mat< 3, 2, int, highp > int3x2</div><div class="ttdoc">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00091">compatibility.hpp:91</a></div></div>
|
245 |
+
<div class="ttc" id="a00315_html_ga13c3200b82708f73faac6d7f09ec91a3"><div class="ttname"><a href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3">glm::bool4</a></div><div class="ttdeci">vec< 4, bool, highp > bool4</div><div class="ttdoc">boolean type with 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00069">compatibility.hpp:69</a></div></div>
|
246 |
+
<div class="ttc" id="a00315_html_ga97a39dd9bc7d572810d80b8467cbffa1"><div class="ttname"><a href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1">glm::int4x2</a></div><div class="ttdeci">mat< 4, 2, int, highp > int4x2</div><div class="ttdoc">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00094">compatibility.hpp:94</a></div></div>
|
247 |
+
<div class="ttc" id="a00315_html_ga7f895c936f0c29c8729afbbf22806090"><div class="ttname"><a href="a00315.html#ga7f895c936f0c29c8729afbbf22806090">glm::bool1x1</a></div><div class="ttdeci">bool bool1x1</div><div class="ttdoc">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00071">compatibility.hpp:71</a></div></div>
|
248 |
+
<div class="ttc" id="a00315_html_ga356f8c3a7e7d6376d3d4b0a026407183"><div class="ttname"><a href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">glm::saturate</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > saturate(const vec< 4, T, Q > &x)</div><div class="ttdoc">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00053">compatibility.hpp:53</a></div></div>
|
249 |
+
<div class="ttc" id="a00315_html_ga99629f818737f342204071ef8296b2ed"><div class="ttname"><a href="a00315.html#ga99629f818737f342204071ef8296b2ed">glm::bool3</a></div><div class="ttdeci">vec< 3, bool, highp > bool3</div><div class="ttdoc">boolean type with 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00068">compatibility.hpp:68</a></div></div>
|
250 |
+
<div class="ttc" id="a00241_html_ga7cd77683da6361e297c56443fc70806d"><div class="ttname"><a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
|
251 |
+
<div class="ttc" id="a00315_html_ga4e5ce477c15836b21e3c42daac68554d"><div class="ttname"><a href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d">glm::int2x2</a></div><div class="ttdeci">mat< 2, 2, int, highp > int2x2</div><div class="ttdoc">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00088">compatibility.hpp:88</a></div></div>
|
252 |
+
<div class="ttc" id="a00315_html_gafe3a8fd56354caafe24bfe1b1e3ad22a"><div class="ttname"><a href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a">glm::int2</a></div><div class="ttdeci">vec< 2, int, highp > int2</div><div class="ttdoc">integer vector with 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00083">compatibility.hpp:83</a></div></div>
|
253 |
+
<div class="ttc" id="a00315_html_ga04dee1552424198b8f58b377c2ee00d8"><div class="ttname"><a href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8">glm::int4x4</a></div><div class="ttdeci">mat< 4, 4, int, highp > int4x4</div><div class="ttdoc">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00096">compatibility.hpp:96</a></div></div>
|
254 |
+
<div class="ttc" id="a00315_html_gac7d7311f7e0fa8b6163d96dab033a755"><div class="ttname"><a href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755">glm::bool3x2</a></div><div class="ttdeci">mat< 3, 2, bool, highp > bool3x2</div><div class="ttdoc">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00075">compatibility.hpp:75</a></div></div>
|
255 |
+
<div class="ttc" id="a00315_html_gafad66a02ccd360c86d6ab9ff9cfbc19c"><div class="ttname"><a href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c">glm::double4x3</a></div><div class="ttdeci">mat< 4, 3, double, highp > double4x3</div><div class="ttdoc">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00127">compatibility.hpp:127</a></div></div>
|
256 |
+
<div class="ttc" id="a00315_html_gad0f5dc7f22c2065b1b06d57f1c0658fe"><div class="ttname"><a href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe">glm::bool4x3</a></div><div class="ttdeci">mat< 4, 3, bool, highp > bool4x3</div><div class="ttdoc">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00079">compatibility.hpp:79</a></div></div>
|
257 |
+
<div class="ttc" id="a00315_html_ga20b861a9b6e2a300323671c57a02525b"><div class="ttname"><a href="a00315.html#ga20b861a9b6e2a300323671c57a02525b">glm::double1</a></div><div class="ttdeci">double double1</div><div class="ttdoc">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00114">compatibility.hpp:114</a></div></div>
|
258 |
+
<div class="ttc" id="a00315_html_ga3d8b9028a1053a44a98902cd1c389472"><div class="ttname"><a href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472">glm::double3</a></div><div class="ttdeci">vec< 3, double, highp > double3</div><div class="ttdoc">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00116">compatibility.hpp:116</a></div></div>
|
259 |
+
<div class="ttc" id="a00315_html_gaf92f58af24f35617518aeb3d4f63fda6"><div class="ttname"><a href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6">glm::double4</a></div><div class="ttdeci">vec< 4, double, highp > double4</div><div class="ttdoc">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00117">compatibility.hpp:117</a></div></div>
|
260 |
+
<div class="ttc" id="a00315_html_ga15c9649286f0bf431bdf9b3509580048"><div class="ttname"><a href="a00315.html#ga15c9649286f0bf431bdf9b3509580048">glm::int3x3</a></div><div class="ttdeci">mat< 3, 3, int, highp > int3x3</div><div class="ttdoc">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00092">compatibility.hpp:92</a></div></div>
|
261 |
+
<div class="ttc" id="a00315_html_ga6c97b99aac3e302053ffb58aace9033c"><div class="ttname"><a href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c">glm::bool3x3</a></div><div class="ttdeci">mat< 3, 3, bool, highp > bool3x3</div><div class="ttdoc">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00076">compatibility.hpp:76</a></div></div>
|
262 |
+
<div class="ttc" id="a00315_html_gaa6c69f04ba95f3faedf95dae874de576"><div class="ttname"><a href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576">glm::float3x2</a></div><div class="ttdeci">mat< 3, 2, float, highp > float3x2</div><div class="ttdoc">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00107">compatibility.hpp:107</a></div></div>
|
263 |
+
<div class="ttc" id="a00315_html_gaecdef18c819c205aeee9f94dc93de56a"><div class="ttname"><a href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a">glm::int4</a></div><div class="ttdeci">vec< 4, int, highp > int4</div><div class="ttdoc">integer vector with 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00085">compatibility.hpp:85</a></div></div>
|
264 |
+
<div class="ttc" id="a00315_html_ga31b729b04facccda73f07ed26958b3c2"><div class="ttname"><a href="a00315.html#ga31b729b04facccda73f07ed26958b3c2">glm::double2</a></div><div class="ttdeci">vec< 2, double, highp > double2</div><div class="ttdoc">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00115">compatibility.hpp:115</a></div></div>
|
265 |
+
<div class="ttc" id="a00315_html_ga6ceb5d38a58becdf420026e12a6562f3"><div class="ttname"><a href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3">glm::float3x3</a></div><div class="ttdeci">mat< 3, 3, float, highp > float3x3</div><div class="ttdoc">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00108">compatibility.hpp:108</a></div></div>
|
266 |
+
<div class="ttc" id="a00241_html_ga8e93f374aae27d1a88b921860351f8d4"><div class="ttname"><a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
|
267 |
+
<div class="ttc" id="a00315_html_gaa09ab65ec9c3c54305ff502e2b1fe6d9"><div class="ttname"><a href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9">glm::bool2</a></div><div class="ttdeci">vec< 2, bool, highp > bool2</div><div class="ttdoc">boolean type with 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00067">compatibility.hpp:67</a></div></div>
|
268 |
+
<div class="ttc" id="a00315_html_gae7d6b679463d37d6c527d478fb470fdf"><div class="ttname"><a href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf">glm::bool3x4</a></div><div class="ttdeci">mat< 3, 4, bool, highp > bool3x4</div><div class="ttdoc">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00077">compatibility.hpp:77</a></div></div>
|
269 |
+
<div class="ttc" id="a00315_html_ga2749d59a7fddbac44f34ba78e57ef807"><div class="ttname"><a href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807">glm::int2x4</a></div><div class="ttdeci">mat< 2, 4, int, highp > int2x4</div><div class="ttdoc">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00090">compatibility.hpp:90</a></div></div>
|
270 |
+
<div class="ttc" id="a00315_html_ga4d7fa65be8e8e4ad6d920b45c44e471f"><div class="ttname"><a href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f">glm::bool2x4</a></div><div class="ttdeci">mat< 2, 4, bool, highp > bool2x4</div><div class="ttdoc">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00074">compatibility.hpp:74</a></div></div>
|
271 |
+
<div class="ttc" id="a00315_html_ga2ef022e453d663d70aec414b2a80f756"><div class="ttname"><a href="a00315.html#ga2ef022e453d663d70aec414b2a80f756">glm::double3x4</a></div><div class="ttdeci">mat< 3, 4, double, highp > double3x4</div><div class="ttdoc">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00125">compatibility.hpp:125</a></div></div>
|
272 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
273 |
+
<div class="ttc" id="a00315_html_ga4d2679c321b793ca3784fe0315bb5332"><div class="ttname"><a href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332">glm::float3x4</a></div><div class="ttdeci">mat< 3, 4, float, highp > float3x4</div><div class="ttdoc">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00017_source.html#l00109">compatibility.hpp:109</a></div></div>
|
274 |
+
</div><!-- fragment --></div><!-- contents -->
|
275 |
+
<!-- start footer part -->
|
276 |
+
<hr class="footer"/><address class="footer"><small>
|
277 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
278 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
279 |
+
</a> 1.8.10
|
280 |
+
</small></address>
|
281 |
+
</body>
|
282 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00020_source.html
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: compute_vector_relational.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">compute_vector_relational.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
92 |
+
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
93 |
+
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//#include "compute_common.hpp"</span></div>
|
94 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "setup.hpp"</span></div>
|
95 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <limits></span></div>
|
96 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div>
|
97 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
|
98 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span>detail</div>
|
99 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
|
100 |
+
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keywordtype">bool</span> isFloat></div>
|
101 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">struct </span>compute_equal</div>
|
102 |
+
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  {</div>
|
103 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> <span class="keywordtype">bool</span> call(T a, T b)</div>
|
104 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  {</div>
|
105 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keywordflow">return</span> a == b;</div>
|
106 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  }</div>
|
107 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  };</div>
|
108 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*</span></div>
|
109 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> template <typename T></span></div>
|
110 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> struct compute_equal<T, true></span></div>
|
111 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> {</span></div>
|
112 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)</span></div>
|
113 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> {</span></div>
|
114 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> return detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);</span></div>
|
115 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> //return std::memcmp(&a, &b, sizeof(T)) == 0;</span></div>
|
116 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> }</span></div>
|
117 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> };</span></div>
|
118 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">*/</span></div>
|
119 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }<span class="comment">//namespace detail</span></div>
|
120 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }<span class="comment">//namespace glm</span></div>
|
121 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
122 |
+
</div><!-- fragment --></div><!-- contents -->
|
123 |
+
<!-- start footer part -->
|
124 |
+
<hr class="footer"/><address class="footer"><small>
|
125 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
126 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
127 |
+
</a> 1.8.10
|
128 |
+
</small></address>
|
129 |
+
</body>
|
130 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00023.html
ADDED
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: easing.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">easing.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00318.html">GLM_GTX_easing</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00023_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:ga93cddcdb6347a44d5927cc2bf2570816"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
102 |
+
<tr class="memitem:ga93cddcdb6347a44d5927cc2bf2570816"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga93cddcdb6347a44d5927cc2bf2570816">backEaseIn</a> (genType const &a)</td></tr>
|
103 |
+
<tr class="separator:ga93cddcdb6347a44d5927cc2bf2570816"><td class="memSeparator" colspan="2"> </td></tr>
|
104 |
+
<tr class="memitem:ga33777c9dd98f61d9472f96aafdf2bd36"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
105 |
+
<tr class="memitem:ga33777c9dd98f61d9472f96aafdf2bd36"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36">backEaseIn</a> (genType const &a, genType const &o)</td></tr>
|
106 |
+
<tr class="separator:ga33777c9dd98f61d9472f96aafdf2bd36"><td class="memSeparator" colspan="2"> </td></tr>
|
107 |
+
<tr class="memitem:gace6d24722a2f6722b56398206eb810bb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
108 |
+
<tr class="memitem:gace6d24722a2f6722b56398206eb810bb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gace6d24722a2f6722b56398206eb810bb">backEaseInOut</a> (genType const &a)</td></tr>
|
109 |
+
<tr class="separator:gace6d24722a2f6722b56398206eb810bb"><td class="memSeparator" colspan="2"> </td></tr>
|
110 |
+
<tr class="memitem:ga68a7b760f2afdfab298d5cd6d7611fb1"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
111 |
+
<tr class="memitem:ga68a7b760f2afdfab298d5cd6d7611fb1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1">backEaseInOut</a> (genType const &a, genType const &o)</td></tr>
|
112 |
+
<tr class="separator:ga68a7b760f2afdfab298d5cd6d7611fb1"><td class="memSeparator" colspan="2"> </td></tr>
|
113 |
+
<tr class="memitem:gabf25069fa906413c858fd46903d520b9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
114 |
+
<tr class="memitem:gabf25069fa906413c858fd46903d520b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gabf25069fa906413c858fd46903d520b9">backEaseOut</a> (genType const &a)</td></tr>
|
115 |
+
<tr class="separator:gabf25069fa906413c858fd46903d520b9"><td class="memSeparator" colspan="2"> </td></tr>
|
116 |
+
<tr class="memitem:ga640c1ac6fe9d277a197da69daf60ee4f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
117 |
+
<tr class="memitem:ga640c1ac6fe9d277a197da69daf60ee4f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f">backEaseOut</a> (genType const &a, genType const &o)</td></tr>
|
118 |
+
<tr class="separator:ga640c1ac6fe9d277a197da69daf60ee4f"><td class="memSeparator" colspan="2"> </td></tr>
|
119 |
+
<tr class="memitem:gaac30767f2e430b0c3fc859a4d59c7b5b"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
120 |
+
<tr class="memitem:gaac30767f2e430b0c3fc859a4d59c7b5b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b">bounceEaseIn</a> (genType const &a)</td></tr>
|
121 |
+
<tr class="separator:gaac30767f2e430b0c3fc859a4d59c7b5b"><td class="memSeparator" colspan="2"> </td></tr>
|
122 |
+
<tr class="memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
123 |
+
<tr class="memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e">bounceEaseInOut</a> (genType const &a)</td></tr>
|
124 |
+
<tr class="separator:gadf9f38eff1e5f4c2fa5b629a25ae413e"><td class="memSeparator" colspan="2"> </td></tr>
|
125 |
+
<tr class="memitem:ga94007005ff0dcfa0749ebfa2aec540b2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
126 |
+
<tr class="memitem:ga94007005ff0dcfa0749ebfa2aec540b2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2">bounceEaseOut</a> (genType const &a)</td></tr>
|
127 |
+
<tr class="separator:ga94007005ff0dcfa0749ebfa2aec540b2"><td class="memSeparator" colspan="2"> </td></tr>
|
128 |
+
<tr class="memitem:ga34508d4b204a321ec26d6086aa047997"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
129 |
+
<tr class="memitem:ga34508d4b204a321ec26d6086aa047997"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga34508d4b204a321ec26d6086aa047997">circularEaseIn</a> (genType const &a)</td></tr>
|
130 |
+
<tr class="memdesc:ga34508d4b204a321ec26d6086aa047997"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after shifted quadrant IV of unit circle. <a href="a00318.html#ga34508d4b204a321ec26d6086aa047997">More...</a><br /></td></tr>
|
131 |
+
<tr class="separator:ga34508d4b204a321ec26d6086aa047997"><td class="memSeparator" colspan="2"> </td></tr>
|
132 |
+
<tr class="memitem:ga0c1027637a5b02d4bb3612aa12599d69"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
133 |
+
<tr class="memitem:ga0c1027637a5b02d4bb3612aa12599d69"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga0c1027637a5b02d4bb3612aa12599d69">circularEaseInOut</a> (genType const &a)</td></tr>
|
134 |
+
<tr class="memdesc:ga0c1027637a5b02d4bb3612aa12599d69"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. <a href="a00318.html#ga0c1027637a5b02d4bb3612aa12599d69">More...</a><br /></td></tr>
|
135 |
+
<tr class="separator:ga0c1027637a5b02d4bb3612aa12599d69"><td class="memSeparator" colspan="2"> </td></tr>
|
136 |
+
<tr class="memitem:ga26fefde9ced9b72745fe21f1a3fe8da7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
137 |
+
<tr class="memitem:ga26fefde9ced9b72745fe21f1a3fe8da7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7">circularEaseOut</a> (genType const &a)</td></tr>
|
138 |
+
<tr class="memdesc:ga26fefde9ced9b72745fe21f1a3fe8da7"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after shifted quadrant II of unit circle. <a href="a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7">More...</a><br /></td></tr>
|
139 |
+
<tr class="separator:ga26fefde9ced9b72745fe21f1a3fe8da7"><td class="memSeparator" colspan="2"> </td></tr>
|
140 |
+
<tr class="memitem:gaff52f746102b94864d105563ba8895ae"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaff52f746102b94864d105563ba8895ae"></a>
|
141 |
+
template<typename genType > </td></tr>
|
142 |
+
<tr class="memitem:gaff52f746102b94864d105563ba8895ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gaff52f746102b94864d105563ba8895ae">cubicEaseIn</a> (genType const &a)</td></tr>
|
143 |
+
<tr class="memdesc:gaff52f746102b94864d105563ba8895ae"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the cubic y = x^3. <br /></td></tr>
|
144 |
+
<tr class="separator:gaff52f746102b94864d105563ba8895ae"><td class="memSeparator" colspan="2"> </td></tr>
|
145 |
+
<tr class="memitem:ga55134072b42d75452189321d4a2ad91c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
146 |
+
<tr class="memitem:ga55134072b42d75452189321d4a2ad91c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga55134072b42d75452189321d4a2ad91c">cubicEaseInOut</a> (genType const &a)</td></tr>
|
147 |
+
<tr class="memdesc:ga55134072b42d75452189321d4a2ad91c"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1]. <a href="a00318.html#ga55134072b42d75452189321d4a2ad91c">More...</a><br /></td></tr>
|
148 |
+
<tr class="separator:ga55134072b42d75452189321d4a2ad91c"><td class="memSeparator" colspan="2"> </td></tr>
|
149 |
+
<tr class="memitem:ga40d746385d8bcc5973f5bc6a2340ca91"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
150 |
+
<tr class="memitem:ga40d746385d8bcc5973f5bc6a2340ca91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91">cubicEaseOut</a> (genType const &a)</td></tr>
|
151 |
+
<tr class="memdesc:ga40d746385d8bcc5973f5bc6a2340ca91"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the cubic y = (x - 1)^3 + 1. <a href="a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91">More...</a><br /></td></tr>
|
152 |
+
<tr class="separator:ga40d746385d8bcc5973f5bc6a2340ca91"><td class="memSeparator" colspan="2"> </td></tr>
|
153 |
+
<tr class="memitem:ga230918eccee4e113d10ec5b8cdc58695"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
154 |
+
<tr class="memitem:ga230918eccee4e113d10ec5b8cdc58695"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga230918eccee4e113d10ec5b8cdc58695">elasticEaseIn</a> (genType const &a)</td></tr>
|
155 |
+
<tr class="memdesc:ga230918eccee4e113d10ec5b8cdc58695"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) <a href="a00318.html#ga230918eccee4e113d10ec5b8cdc58695">More...</a><br /></td></tr>
|
156 |
+
<tr class="separator:ga230918eccee4e113d10ec5b8cdc58695"><td class="memSeparator" colspan="2"> </td></tr>
|
157 |
+
<tr class="memitem:ga2db4ac8959559b11b4029e54812908d6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
158 |
+
<tr class="memitem:ga2db4ac8959559b11b4029e54812908d6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga2db4ac8959559b11b4029e54812908d6">elasticEaseInOut</a> (genType const &a)</td></tr>
|
159 |
+
<tr class="memdesc:ga2db4ac8959559b11b4029e54812908d6"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. <a href="a00318.html#ga2db4ac8959559b11b4029e54812908d6">More...</a><br /></td></tr>
|
160 |
+
<tr class="separator:ga2db4ac8959559b11b4029e54812908d6"><td class="memSeparator" colspan="2"> </td></tr>
|
161 |
+
<tr class="memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
162 |
+
<tr class="memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365">elasticEaseOut</a> (genType const &a)</td></tr>
|
163 |
+
<tr class="memdesc:gace9c9d1bdf88bf2ab1e7cdefa54c7365"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. <a href="a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365">More...</a><br /></td></tr>
|
164 |
+
<tr class="separator:gace9c9d1bdf88bf2ab1e7cdefa54c7365"><td class="memSeparator" colspan="2"> </td></tr>
|
165 |
+
<tr class="memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
166 |
+
<tr class="memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c">exponentialEaseIn</a> (genType const &a)</td></tr>
|
167 |
+
<tr class="memdesc:ga7f24ee9219ab4c84dc8de24be84c1e3c"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the exponential function y = 2^(10(x - 1)) <a href="a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c">More...</a><br /></td></tr>
|
168 |
+
<tr class="separator:ga7f24ee9219ab4c84dc8de24be84c1e3c"><td class="memSeparator" colspan="2"> </td></tr>
|
169 |
+
<tr class="memitem:ga232fb6dc093c5ce94bee105ff2947501"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
170 |
+
<tr class="memitem:ga232fb6dc093c5ce94bee105ff2947501"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga232fb6dc093c5ce94bee105ff2947501">exponentialEaseInOut</a> (genType const &a)</td></tr>
|
171 |
+
<tr class="memdesc:ga232fb6dc093c5ce94bee105ff2947501"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]. <a href="a00318.html#ga232fb6dc093c5ce94bee105ff2947501">More...</a><br /></td></tr>
|
172 |
+
<tr class="separator:ga232fb6dc093c5ce94bee105ff2947501"><td class="memSeparator" colspan="2"> </td></tr>
|
173 |
+
<tr class="memitem:ga517f2bcfd15bc2c25c466ae50808efc3"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
174 |
+
<tr class="memitem:ga517f2bcfd15bc2c25c466ae50808efc3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3">exponentialEaseOut</a> (genType const &a)</td></tr>
|
175 |
+
<tr class="memdesc:ga517f2bcfd15bc2c25c466ae50808efc3"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the exponential function y = -2^(-10x) + 1. <a href="a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3">More...</a><br /></td></tr>
|
176 |
+
<tr class="separator:ga517f2bcfd15bc2c25c466ae50808efc3"><td class="memSeparator" colspan="2"> </td></tr>
|
177 |
+
<tr class="memitem:ga290c3e47cb0a49f2e8abe90b1872b649"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
178 |
+
<tr class="memitem:ga290c3e47cb0a49f2e8abe90b1872b649"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649">linearInterpolation</a> (genType const &a)</td></tr>
|
179 |
+
<tr class="memdesc:ga290c3e47cb0a49f2e8abe90b1872b649"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the line y = x. <a href="a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649">More...</a><br /></td></tr>
|
180 |
+
<tr class="separator:ga290c3e47cb0a49f2e8abe90b1872b649"><td class="memSeparator" colspan="2"> </td></tr>
|
181 |
+
<tr class="memitem:gaf42089d35855695132d217cd902304a0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
182 |
+
<tr class="memitem:gaf42089d35855695132d217cd902304a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gaf42089d35855695132d217cd902304a0">quadraticEaseIn</a> (genType const &a)</td></tr>
|
183 |
+
<tr class="memdesc:gaf42089d35855695132d217cd902304a0"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the parabola y = x^2. <a href="a00318.html#gaf42089d35855695132d217cd902304a0">More...</a><br /></td></tr>
|
184 |
+
<tr class="separator:gaf42089d35855695132d217cd902304a0"><td class="memSeparator" colspan="2"> </td></tr>
|
185 |
+
<tr class="memitem:ga03e8fc2d7945a4e63ee33b2159c14cea"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
186 |
+
<tr class="memitem:ga03e8fc2d7945a4e63ee33b2159c14cea"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea">quadraticEaseInOut</a> (genType const &a)</td></tr>
|
187 |
+
<tr class="memdesc:ga03e8fc2d7945a4e63ee33b2159c14cea"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1]. <a href="a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea">More...</a><br /></td></tr>
|
188 |
+
<tr class="separator:ga03e8fc2d7945a4e63ee33b2159c14cea"><td class="memSeparator" colspan="2"> </td></tr>
|
189 |
+
<tr class="memitem:ga283717bc2d937547ad34ec0472234ee3"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
190 |
+
<tr class="memitem:ga283717bc2d937547ad34ec0472234ee3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga283717bc2d937547ad34ec0472234ee3">quadraticEaseOut</a> (genType const &a)</td></tr>
|
191 |
+
<tr class="memdesc:ga283717bc2d937547ad34ec0472234ee3"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the parabola y = -x^2 + 2x. <a href="a00318.html#ga283717bc2d937547ad34ec0472234ee3">More...</a><br /></td></tr>
|
192 |
+
<tr class="separator:ga283717bc2d937547ad34ec0472234ee3"><td class="memSeparator" colspan="2"> </td></tr>
|
193 |
+
<tr class="memitem:ga808b41f14514f47dad5dcc69eb924afd"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
194 |
+
<tr class="memitem:ga808b41f14514f47dad5dcc69eb924afd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga808b41f14514f47dad5dcc69eb924afd">quarticEaseIn</a> (genType const &a)</td></tr>
|
195 |
+
<tr class="memdesc:ga808b41f14514f47dad5dcc69eb924afd"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the quartic x^4. <a href="a00318.html#ga808b41f14514f47dad5dcc69eb924afd">More...</a><br /></td></tr>
|
196 |
+
<tr class="separator:ga808b41f14514f47dad5dcc69eb924afd"><td class="memSeparator" colspan="2"> </td></tr>
|
197 |
+
<tr class="memitem:ga6d000f852de12b197e154f234b20c505"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
198 |
+
<tr class="memitem:ga6d000f852de12b197e154f234b20c505"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga6d000f852de12b197e154f234b20c505">quarticEaseInOut</a> (genType const &a)</td></tr>
|
199 |
+
<tr class="memdesc:ga6d000f852de12b197e154f234b20c505"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1]. <a href="a00318.html#ga6d000f852de12b197e154f234b20c505">More...</a><br /></td></tr>
|
200 |
+
<tr class="separator:ga6d000f852de12b197e154f234b20c505"><td class="memSeparator" colspan="2"> </td></tr>
|
201 |
+
<tr class="memitem:ga4dfb33fa7664aa888eb647999d329b98"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
202 |
+
<tr class="memitem:ga4dfb33fa7664aa888eb647999d329b98"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga4dfb33fa7664aa888eb647999d329b98">quarticEaseOut</a> (genType const &a)</td></tr>
|
203 |
+
<tr class="memdesc:ga4dfb33fa7664aa888eb647999d329b98"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the quartic y = 1 - (x - 1)^4. <a href="a00318.html#ga4dfb33fa7664aa888eb647999d329b98">More...</a><br /></td></tr>
|
204 |
+
<tr class="separator:ga4dfb33fa7664aa888eb647999d329b98"><td class="memSeparator" colspan="2"> </td></tr>
|
205 |
+
<tr class="memitem:ga097579d8e087dcf48037588140a21640"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
206 |
+
<tr class="memitem:ga097579d8e087dcf48037588140a21640"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga097579d8e087dcf48037588140a21640">quinticEaseIn</a> (genType const &a)</td></tr>
|
207 |
+
<tr class="memdesc:ga097579d8e087dcf48037588140a21640"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the quintic y = x^5. <a href="a00318.html#ga097579d8e087dcf48037588140a21640">More...</a><br /></td></tr>
|
208 |
+
<tr class="separator:ga097579d8e087dcf48037588140a21640"><td class="memSeparator" colspan="2"> </td></tr>
|
209 |
+
<tr class="memitem:ga2a82d5c46df7e2d21cc0108eb7b83934"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
210 |
+
<tr class="memitem:ga2a82d5c46df7e2d21cc0108eb7b83934"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934">quinticEaseInOut</a> (genType const &a)</td></tr>
|
211 |
+
<tr class="memdesc:ga2a82d5c46df7e2d21cc0108eb7b83934"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]. <a href="a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934">More...</a><br /></td></tr>
|
212 |
+
<tr class="separator:ga2a82d5c46df7e2d21cc0108eb7b83934"><td class="memSeparator" colspan="2"> </td></tr>
|
213 |
+
<tr class="memitem:ga7dbd4d5c8da3f5353121f615e7b591d7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
214 |
+
<tr class="memitem:ga7dbd4d5c8da3f5353121f615e7b591d7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7">quinticEaseOut</a> (genType const &a)</td></tr>
|
215 |
+
<tr class="memdesc:ga7dbd4d5c8da3f5353121f615e7b591d7"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after the quintic y = (x - 1)^5 + 1. <a href="a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7">More...</a><br /></td></tr>
|
216 |
+
<tr class="separator:ga7dbd4d5c8da3f5353121f615e7b591d7"><td class="memSeparator" colspan="2"> </td></tr>
|
217 |
+
<tr class="memitem:gafb338ac6f6b2bcafee50e3dca5201dbf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
218 |
+
<tr class="memitem:gafb338ac6f6b2bcafee50e3dca5201dbf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf">sineEaseIn</a> (genType const &a)</td></tr>
|
219 |
+
<tr class="memdesc:gafb338ac6f6b2bcafee50e3dca5201dbf"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after quarter-cycle of sine wave. <a href="a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf">More...</a><br /></td></tr>
|
220 |
+
<tr class="separator:gafb338ac6f6b2bcafee50e3dca5201dbf"><td class="memSeparator" colspan="2"> </td></tr>
|
221 |
+
<tr class="memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
222 |
+
<tr class="memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7">sineEaseInOut</a> (genType const &a)</td></tr>
|
223 |
+
<tr class="memdesc:gaa46e3d5fbf7a15caa28eff9ef192d7c7"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after half sine wave. <a href="a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7">More...</a><br /></td></tr>
|
224 |
+
<tr class="separator:gaa46e3d5fbf7a15caa28eff9ef192d7c7"><td class="memSeparator" colspan="2"> </td></tr>
|
225 |
+
<tr class="memitem:gab3e454f883afc1606ef91363881bf5a3"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
226 |
+
<tr class="memitem:gab3e454f883afc1606ef91363881bf5a3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00318.html#gab3e454f883afc1606ef91363881bf5a3">sineEaseOut</a> (genType const &a)</td></tr>
|
227 |
+
<tr class="memdesc:gab3e454f883afc1606ef91363881bf5a3"><td class="mdescLeft"> </td><td class="mdescRight">Modelled after quarter-cycle of sine wave (different phase) <a href="a00318.html#gab3e454f883afc1606ef91363881bf5a3">More...</a><br /></td></tr>
|
228 |
+
<tr class="separator:gab3e454f883afc1606ef91363881bf5a3"><td class="memSeparator" colspan="2"> </td></tr>
|
229 |
+
</table>
|
230 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
231 |
+
<div class="textblock"><p><a class="el" href="a00318.html">GLM_GTX_easing</a> </p>
|
232 |
+
<dl class="section author"><dt>Author</dt><dd>Robert Chisholm</dd></dl>
|
233 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
234 |
+
|
235 |
+
<p>Definition in file <a class="el" href="a00023_source.html">easing.hpp</a>.</p>
|
236 |
+
</div></div><!-- contents -->
|
237 |
+
<!-- start footer part -->
|
238 |
+
<hr class="footer"/><address class="footer"><small>
|
239 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
240 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
241 |
+
</a> 1.8.10
|
242 |
+
</small></address>
|
243 |
+
</body>
|
244 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00025_source.html
ADDED
@@ -0,0 +1,380 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: euler_angles.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">euler_angles.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00025.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
94 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependency:</span></div>
|
95 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
96 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
|
97 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
98 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
99 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</span></div>
|
100 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># else</span></div>
|
101 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_euler_angles extension included")</span></div>
|
102 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"># endif</span></div>
|
103 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
|
104 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
|
105 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
106 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
|
107 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
|
108 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
109 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gafba6282e4ed3ff8b5c75331abfba3489">eulerAngleX</a>(</div>
|
110 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T <span class="keyword">const</span>& angleX);</div>
|
111 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
|
112 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
113 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gab84bf4746805fd69b8ecbb230e3974c5">eulerAngleY</a>(</div>
|
114 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  T <span class="keyword">const</span>& angleY);</div>
|
115 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
|
116 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
117 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251">eulerAngleZ</a>(</div>
|
118 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  T <span class="keyword">const</span>& angleZ);</div>
|
119 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
|
120 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
121 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga994b8186b3b80d91cf90bc403164692f">derivedEulerAngleX</a>(</div>
|
122 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  T <span class="keyword">const</span> & angleX, T <span class="keyword">const</span> & angularVelocityX);</div>
|
123 |
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
|
124 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
125 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10">derivedEulerAngleY</a>(</div>
|
126 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  T <span class="keyword">const</span> & angleY, T <span class="keyword">const</span> & angularVelocityY);</div>
|
127 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
|
128 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
129 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gae8b397348201c42667be983ba3f344df">derivedEulerAngleZ</a>(</div>
|
130 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  T <span class="keyword">const</span> & angleZ, T <span class="keyword">const</span> & angularVelocityZ);</div>
|
131 |
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
|
132 |
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
133 |
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga64036577ee17a2d24be0dbc05881d4e2">eulerAngleXY</a>(</div>
|
134 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  T <span class="keyword">const</span>& angleX,</div>
|
135 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  T <span class="keyword">const</span>& angleY);</div>
|
136 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
|
137 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
138 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d">eulerAngleYX</a>(</div>
|
139 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  T <span class="keyword">const</span>& angleY,</div>
|
140 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  T <span class="keyword">const</span>& angleX);</div>
|
141 |
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
|
142 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
143 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9">eulerAngleXZ</a>(</div>
|
144 |
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  T <span class="keyword">const</span>& angleX,</div>
|
145 |
+
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  T <span class="keyword">const</span>& angleZ);</div>
|
146 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
|
147 |
+
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
148 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga483903115cd4059228961046a28d69b5">eulerAngleZX</a>(</div>
|
149 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  T <span class="keyword">const</span>& <a class="code" href="a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8">angle</a>,</div>
|
150 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  T <span class="keyword">const</span>& angleX);</div>
|
151 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
|
152 |
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
153 |
+
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga220379e10ac8cca55e275f0c9018fed9">eulerAngleYZ</a>(</div>
|
154 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  T <span class="keyword">const</span>& angleY,</div>
|
155 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  T <span class="keyword">const</span>& angleZ);</div>
|
156 |
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
|
157 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
158 |
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga400b2bd5984999efab663f3a68e1d020">eulerAngleZY</a>(</div>
|
159 |
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  T <span class="keyword">const</span>& angleZ,</div>
|
160 |
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  T <span class="keyword">const</span>& angleY);</div>
|
161 |
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
|
162 |
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
163 |
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645">eulerAngleXYZ</a>(</div>
|
164 |
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  T <span class="keyword">const</span>& t1,</div>
|
165 |
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  T <span class="keyword">const</span>& t2,</div>
|
166 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  T <span class="keyword">const</span>& t3);</div>
|
167 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
|
168 |
+
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
169 |
+
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10">eulerAngleYXZ</a>(</div>
|
170 |
+
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga8da38cdfdc452dafa660c2f46506bad5">yaw</a>,</div>
|
171 |
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga7603e81477b46ddb448896909bc04928">pitch</a>,</div>
|
172 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13">roll</a>);</div>
|
173 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
|
174 |
+
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
175 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga60171c79a17aec85d7891ae1d1533ec9">eulerAngleXZX</a>(</div>
|
176 |
+
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  T <span class="keyword">const</span> & t1,</div>
|
177 |
+
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  T <span class="keyword">const</span> & t2,</div>
|
178 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  T <span class="keyword">const</span> & t3);</div>
|
179 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
180 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
181 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga29bd0787a28a6648159c0d6e69706066">eulerAngleXYX</a>(</div>
|
182 |
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  T <span class="keyword">const</span> & t1,</div>
|
183 |
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  T <span class="keyword">const</span> & t2,</div>
|
184 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  T <span class="keyword">const</span> & t3);</div>
|
185 |
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
186 |
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
187 |
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga750fba9894117f87bcc529d7349d11de">eulerAngleYXY</a>(</div>
|
188 |
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  T <span class="keyword">const</span> & t1,</div>
|
189 |
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  T <span class="keyword">const</span> & t2,</div>
|
190 |
+
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  T <span class="keyword">const</span> & t3);</div>
|
191 |
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
|
192 |
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
193 |
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga5e5e40abc27630749b42b3327c76d6e4">eulerAngleYZY</a>(</div>
|
194 |
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T <span class="keyword">const</span> & t1,</div>
|
195 |
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  T <span class="keyword">const</span> & t2,</div>
|
196 |
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  T <span class="keyword">const</span> & t3);</div>
|
197 |
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
|
198 |
+
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
199 |
+
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gacd795f1dbecaf74974f9c76bbcca6830">eulerAngleZYZ</a>(</div>
|
200 |
+
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  T <span class="keyword">const</span> & t1,</div>
|
201 |
+
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  T <span class="keyword">const</span> & t2,</div>
|
202 |
+
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  T <span class="keyword">const</span> & t3);</div>
|
203 |
+
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
|
204 |
+
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
205 |
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga178f966c52b01e4d65e31ebd007e3247">eulerAngleZXZ</a>(</div>
|
206 |
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  T <span class="keyword">const</span> & t1,</div>
|
207 |
+
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T <span class="keyword">const</span> & t2,</div>
|
208 |
+
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  T <span class="keyword">const</span> & t3);</div>
|
209 |
+
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
|
210 |
+
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
211 |
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga996dce12a60d8a674ba6737a535fa910">eulerAngleXZY</a>(</div>
|
212 |
+
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  T <span class="keyword">const</span> & t1,</div>
|
213 |
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  T <span class="keyword">const</span> & t2,</div>
|
214 |
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  T <span class="keyword">const</span> & t3);</div>
|
215 |
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
|
216 |
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
217 |
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848">eulerAngleYZX</a>(</div>
|
218 |
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  T <span class="keyword">const</span> & t1,</div>
|
219 |
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  T <span class="keyword">const</span> & t2,</div>
|
220 |
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  T <span class="keyword">const</span> & t3);</div>
|
221 |
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
|
222 |
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
223 |
+
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#ga2e61f1e39069c47530acab9167852dd6">eulerAngleZYX</a>(</div>
|
224 |
+
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  T <span class="keyword">const</span> & t1,</div>
|
225 |
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  T <span class="keyword">const</span> & t2,</div>
|
226 |
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  T <span class="keyword">const</span> & t3);</div>
|
227 |
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
|
228 |
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
229 |
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gab4505c54d2dd654df4569fd1f04c43aa">eulerAngleZXY</a>(</div>
|
230 |
+
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  T <span class="keyword">const</span> & t1,</div>
|
231 |
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  T <span class="keyword">const</span> & t2,</div>
|
232 |
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  T <span class="keyword">const</span> & t3);</div>
|
233 |
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
|
234 |
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
235 |
+
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  GLM_FUNC_DECL mat<4, 4, T, defaultp> <a class="code" href="a00319.html#gae6aa26ccb020d281b449619e419a609e">yawPitchRoll</a>(</div>
|
236 |
+
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga8da38cdfdc452dafa660c2f46506bad5">yaw</a>,</div>
|
237 |
+
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga7603e81477b46ddb448896909bc04928">pitch</a>,</div>
|
238 |
+
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  T <span class="keyword">const</span>& <a class="code" href="a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13">roll</a>);</div>
|
239 |
+
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
|
240 |
+
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
241 |
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL mat<2, 2, T, defaultp> <a class="code" href="a00319.html#gae16738a9f1887cf4e4db6a124637608d">orientate2</a>(T <span class="keyword">const</span>& <a class="code" href="a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8">angle</a>);</div>
|
242 |
+
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
243 |
+
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
244 |
+
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  GLM_FUNC_DECL mat<3, 3, T, defaultp> <a class="code" href="a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb">orientate3</a>(T <span class="keyword">const</span>& <a class="code" href="a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8">angle</a>);</div>
|
245 |
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
|
246 |
+
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
247 |
+
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  GLM_FUNC_DECL mat<3, 3, T, Q> <a class="code" href="a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb">orientate3</a>(vec<3, T, Q> <span class="keyword">const</span>& angles);</div>
|
248 |
+
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
|
249 |
+
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
250 |
+
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  GLM_FUNC_DECL mat<4, 4, T, Q> <a class="code" href="a00319.html#ga4a044653f71a4ecec68e0b623382b48a">orientate4</a>(vec<3, T, Q> <span class="keyword">const</span>& angles);</div>
|
251 |
+
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
|
252 |
+
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
253 |
+
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gacea701562f778c1da4d3a0a1cf091000">extractEulerAngleXYZ</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span>& M,</div>
|
254 |
+
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  T & t1,</div>
|
255 |
+
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  T & t2,</div>
|
256 |
+
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  T & t3);</div>
|
257 |
+
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
|
258 |
+
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
259 |
+
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gaf0937518e63037335a0e8358b6f053c5">extractEulerAngleYXZ</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
260 |
+
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  T & t1,</div>
|
261 |
+
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  T & t2,</div>
|
262 |
+
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  T & t3);</div>
|
263 |
+
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
|
264 |
+
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
265 |
+
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0">extractEulerAngleXZX</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
266 |
+
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  T & t1,</div>
|
267 |
+
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  T & t2,</div>
|
268 |
+
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  T & t3);</div>
|
269 |
+
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
|
270 |
+
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
271 |
+
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7">extractEulerAngleXYX</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
272 |
+
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  T & t1,</div>
|
273 |
+
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  T & t2,</div>
|
274 |
+
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  T & t3);</div>
|
275 |
+
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
|
276 |
+
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
277 |
+
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gaab8868556361a190db94374e9983ed39">extractEulerAngleYXY</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
278 |
+
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  T & t1,</div>
|
279 |
+
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  T & t2,</div>
|
280 |
+
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  T & t3);</div>
|
281 |
+
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
|
282 |
+
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
283 |
+
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#ga11dad972c109e4bf8694c915017c44a6">extractEulerAngleYZY</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
284 |
+
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  T & t1,</div>
|
285 |
+
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  T & t2,</div>
|
286 |
+
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  T & t3);</div>
|
287 |
+
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
|
288 |
+
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
289 |
+
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gafdfa880a64b565223550c2d3938b1aeb">extractEulerAngleZYZ</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
290 |
+
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  T & t1,</div>
|
291 |
+
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  T & t2,</div>
|
292 |
+
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  T & t3);</div>
|
293 |
+
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
|
294 |
+
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
295 |
+
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#ga59359fef9bad92afaca55e193f91e702">extractEulerAngleZXZ</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
296 |
+
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  T & t1,</div>
|
297 |
+
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  T & t2,</div>
|
298 |
+
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  T & t3);</div>
|
299 |
+
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
|
300 |
+
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
301 |
+
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed">extractEulerAngleXZY</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
302 |
+
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  T & t1,</div>
|
303 |
+
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  T & t2,</div>
|
304 |
+
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  T & t3);</div>
|
305 |
+
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
|
306 |
+
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
307 |
+
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#ga9049b78466796c0de2971756e25b93d3">extractEulerAngleYZX</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
308 |
+
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  T & t1,</div>
|
309 |
+
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  T & t2,</div>
|
310 |
+
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  T & t3);</div>
|
311 |
+
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
|
312 |
+
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
313 |
+
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665">extractEulerAngleZYX</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
314 |
+
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  T & t1,</div>
|
315 |
+
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  T & t2,</div>
|
316 |
+
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  T & t3);</div>
|
317 |
+
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
|
318 |
+
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
319 |
+
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363">extractEulerAngleZXY</a>(mat<4, 4, T, defaultp> <span class="keyword">const</span> & M,</div>
|
320 |
+
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  T & t1,</div>
|
321 |
+
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  T & t2,</div>
|
322 |
+
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  T & t3);</div>
|
323 |
+
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
|
324 |
+
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }<span class="comment">//namespace glm</span></div>
|
325 |
+
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
|
326 |
+
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#include "euler_angles.inl"</span></div>
|
327 |
+
<div class="ttc" id="a00319_html_ga64036577ee17a2d24be0dbc05881d4e2"><div class="ttname"><a href="a00319.html#ga64036577ee17a2d24be0dbc05881d4e2">glm::eulerAngleXY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXY(T const &angleX, T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </div></div>
|
328 |
+
<div class="ttc" id="a00319_html_ga5e5e40abc27630749b42b3327c76d6e4"><div class="ttname"><a href="a00319.html#ga5e5e40abc27630749b42b3327c76d6e4">glm::eulerAngleYZY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZY(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). </div></div>
|
329 |
+
<div class="ttc" id="a00319_html_gaf0937518e63037335a0e8358b6f053c5"><div class="ttname"><a href="a00319.html#gaf0937518e63037335a0e8358b6f053c5">glm::extractEulerAngleYXZ</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleYXZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Y * X * Z) Euler angles from the rotation matrix M. </div></div>
|
330 |
+
<div class="ttc" id="a00319_html_ga1975e0f0e9bed7f716dc9946da2ab645"><div class="ttname"><a href="a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645">glm::eulerAngleXYZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYZ(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </div></div>
|
331 |
+
<div class="ttc" id="a00319_html_ga996dce12a60d8a674ba6737a535fa910"><div class="ttname"><a href="a00319.html#ga996dce12a60d8a674ba6737a535fa910">glm::eulerAngleXZY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZY(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). </div></div>
|
332 |
+
<div class="ttc" id="a00319_html_gae8b397348201c42667be983ba3f344df"><div class="ttname"><a href="a00319.html#gae8b397348201c42667be983ba3f344df">glm::derivedEulerAngleZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleZ(T const &angleZ, T const &angularVelocityZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. </div></div>
|
333 |
+
<div class="ttc" id="a00319_html_ga4f57e6dd25c3cffbbd4daa6ef3f4486d"><div class="ttname"><a href="a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d">glm::eulerAngleYX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYX(T const &angleY, T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </div></div>
|
334 |
+
<div class="ttc" id="a00319_html_gab84bf4746805fd69b8ecbb230e3974c5"><div class="ttname"><a href="a00319.html#gab84bf4746805fd69b8ecbb230e3974c5">glm::eulerAngleY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleY(T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </div></div>
|
335 |
+
<div class="ttc" id="a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8"><div class="ttname"><a href="a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(qua< T, Q > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
|
336 |
+
<div class="ttc" id="a00319_html_gafdfa880a64b565223550c2d3938b1aeb"><div class="ttname"><a href="a00319.html#gafdfa880a64b565223550c2d3938b1aeb">glm::extractEulerAngleZYZ</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleZYZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. </div></div>
|
337 |
+
<div class="ttc" id="a00319_html_ga994b8186b3b80d91cf90bc403164692f"><div class="ttname"><a href="a00319.html#ga994b8186b3b80d91cf90bc403164692f">glm::derivedEulerAngleX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleX(T const &angleX, T const &angularVelocityX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. </div></div>
|
338 |
+
<div class="ttc" id="a00319_html_gaf1077a72171d0f3b08f022ab5ff88af7"><div class="ttname"><a href="a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7">glm::extractEulerAngleXYX</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleXYX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (X * Y * X) Euler angles from the rotation matrix M. </div></div>
|
339 |
+
<div class="ttc" id="a00319_html_gab4505c54d2dd654df4569fd1f04c43aa"><div class="ttname"><a href="a00319.html#gab4505c54d2dd654df4569fd1f04c43aa">glm::eulerAngleZXY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXY(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). </div></div>
|
340 |
+
<div class="ttc" id="a00299_html_ga0cc5ad970d0b00829b139fe0fe5a1e13"><div class="ttname"><a href="a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13">glm::roll</a></div><div class="ttdeci">GLM_FUNC_DECL T roll(qua< T, Q > const &x)</div><div class="ttdoc">Returns roll value of euler angles expressed in radians. </div></div>
|
341 |
+
<div class="ttc" id="a00319_html_gafba6282e4ed3ff8b5c75331abfba3489"><div class="ttname"><a href="a00319.html#gafba6282e4ed3ff8b5c75331abfba3489">glm::eulerAngleX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleX(T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </div></div>
|
342 |
+
<div class="ttc" id="a00319_html_gae16738a9f1887cf4e4db6a124637608d"><div class="ttname"><a href="a00319.html#gae16738a9f1887cf4e4db6a124637608d">glm::orientate2</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 2, 2, T, defaultp > orientate2(T const &angle)</div><div class="ttdoc">Creates a 2D 2 * 2 rotation matrix from an euler angle. </div></div>
|
343 |
+
<div class="ttc" id="a00319_html_ga29bd0787a28a6648159c0d6e69706066"><div class="ttname"><a href="a00319.html#ga29bd0787a28a6648159c0d6e69706066">glm::eulerAngleXYX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXYX(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). </div></div>
|
344 |
+
<div class="ttc" id="a00319_html_gab8ba99a9814f6d9edf417b6c6d5b0c10"><div class="ttname"><a href="a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10">glm::eulerAngleYXZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXZ(T const &yaw, T const &pitch, T const &roll)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
|
345 |
+
<div class="ttc" id="a00319_html_gacf0bc6c031f25fa3ee0055b62c8260d0"><div class="ttname"><a href="a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0">glm::extractEulerAngleXZX</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleXZX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (X * Z * X) Euler angles from the rotation matrix M. </div></div>
|
346 |
+
<div class="ttc" id="a00299_html_ga8da38cdfdc452dafa660c2f46506bad5"><div class="ttname"><a href="a00299.html#ga8da38cdfdc452dafa660c2f46506bad5">glm::yaw</a></div><div class="ttdeci">GLM_FUNC_DECL T yaw(qua< T, Q > const &x)</div><div class="ttdoc">Returns yaw value of euler angles expressed in radians. </div></div>
|
347 |
+
<div class="ttc" id="a00319_html_gaab8868556361a190db94374e9983ed39"><div class="ttname"><a href="a00319.html#gaab8868556361a190db94374e9983ed39">glm::extractEulerAngleYXY</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleYXY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Y * X * Y) Euler angles from the rotation matrix M. </div></div>
|
348 |
+
<div class="ttc" id="a00319_html_ga81fbbca2ba0c778b9662d5355b4e2363"><div class="ttname"><a href="a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363">glm::extractEulerAngleZXY</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleZXY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Z * X * Y) Euler angles from the rotation matrix M. </div></div>
|
349 |
+
<div class="ttc" id="a00319_html_gabe5a65d8eb1cd873c8de121cce1a15ed"><div class="ttname"><a href="a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed">glm::extractEulerAngleXZY</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleXZY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (X * Z * Y) Euler angles from the rotation matrix M. </div></div>
|
350 |
+
<div class="ttc" id="a00319_html_ga9049b78466796c0de2971756e25b93d3"><div class="ttname"><a href="a00319.html#ga9049b78466796c0de2971756e25b93d3">glm::extractEulerAngleYZX</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleYZX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Y * Z * X) Euler angles from the rotation matrix M. </div></div>
|
351 |
+
<div class="ttc" id="a00319_html_ga60171c79a17aec85d7891ae1d1533ec9"><div class="ttname"><a href="a00319.html#ga60171c79a17aec85d7891ae1d1533ec9">glm::eulerAngleXZX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZX(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). </div></div>
|
352 |
+
<div class="ttc" id="a00319_html_ga2e61f1e39069c47530acab9167852dd6"><div class="ttname"><a href="a00319.html#ga2e61f1e39069c47530acab9167852dd6">glm::eulerAngleZYX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYX(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). </div></div>
|
353 |
+
<div class="ttc" id="a00319_html_ga4a044653f71a4ecec68e0b623382b48a"><div class="ttname"><a href="a00319.html#ga4a044653f71a4ecec68e0b623382b48a">glm::orientate4</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, Q > orientate4(vec< 3, T, Q > const &angles)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
|
354 |
+
<div class="ttc" id="a00319_html_ga2d6c11a4abfa60c565483cee2d3f7665"><div class="ttname"><a href="a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665">glm::extractEulerAngleZYX</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleZYX(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Z * Y * X) Euler angles from the rotation matrix M. </div></div>
|
355 |
+
<div class="ttc" id="a00319_html_ga5b3935248bb6c3ec6b0d9297d406e251"><div class="ttname"><a href="a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251">glm::eulerAngleZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZ(T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </div></div>
|
356 |
+
<div class="ttc" id="a00319_html_ga750fba9894117f87bcc529d7349d11de"><div class="ttname"><a href="a00319.html#ga750fba9894117f87bcc529d7349d11de">glm::eulerAngleYXY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYXY(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). </div></div>
|
357 |
+
<div class="ttc" id="a00319_html_ga11dad972c109e4bf8694c915017c44a6"><div class="ttname"><a href="a00319.html#ga11dad972c109e4bf8694c915017c44a6">glm::extractEulerAngleYZY</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleYZY(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. </div></div>
|
358 |
+
<div class="ttc" id="a00319_html_gae6aa26ccb020d281b449619e419a609e"><div class="ttname"><a href="a00319.html#gae6aa26ccb020d281b449619e419a609e">glm::yawPitchRoll</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > yawPitchRoll(T const &yaw, T const &pitch, T const &roll)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
|
359 |
+
<div class="ttc" id="a00319_html_gaa39bd323c65c2fc0a1508be33a237ce9"><div class="ttname"><a href="a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9">glm::eulerAngleXZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleXZ(T const &angleX, T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </div></div>
|
360 |
+
<div class="ttc" id="a00319_html_gacea701562f778c1da4d3a0a1cf091000"><div class="ttname"><a href="a00319.html#gacea701562f778c1da4d3a0a1cf091000">glm::extractEulerAngleXYZ</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleXYZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </div></div>
|
361 |
+
<div class="ttc" id="a00319_html_ga178f966c52b01e4d65e31ebd007e3247"><div class="ttname"><a href="a00319.html#ga178f966c52b01e4d65e31ebd007e3247">glm::eulerAngleZXZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZXZ(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). </div></div>
|
362 |
+
<div class="ttc" id="a00319_html_ga08bef16357b8f9b3051b3dcaec4b7848"><div class="ttname"><a href="a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848">glm::eulerAngleYZX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZX(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). </div></div>
|
363 |
+
<div class="ttc" id="a00319_html_ga400b2bd5984999efab663f3a68e1d020"><div class="ttname"><a href="a00319.html#ga400b2bd5984999efab663f3a68e1d020">glm::eulerAngleZY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZY(T const &angleZ, T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </div></div>
|
364 |
+
<div class="ttc" id="a00319_html_gacd795f1dbecaf74974f9c76bbcca6830"><div class="ttname"><a href="a00319.html#gacd795f1dbecaf74974f9c76bbcca6830">glm::eulerAngleZYZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZYZ(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). </div></div>
|
365 |
+
<div class="ttc" id="a00319_html_ga220379e10ac8cca55e275f0c9018fed9"><div class="ttname"><a href="a00319.html#ga220379e10ac8cca55e275f0c9018fed9">glm::eulerAngleYZ</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleYZ(T const &angleY, T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </div></div>
|
366 |
+
<div class="ttc" id="a00319_html_ga7238c8e15c7720e3ca6a45ab151eeabb"><div class="ttname"><a href="a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb">glm::orientate3</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 3, 3, T, Q > orientate3(vec< 3, T, Q > const &angles)</div><div class="ttdoc">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </div></div>
|
367 |
+
<div class="ttc" id="a00319_html_ga59359fef9bad92afaca55e193f91e702"><div class="ttname"><a href="a00319.html#ga59359fef9bad92afaca55e193f91e702">glm::extractEulerAngleZXZ</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleZXZ(mat< 4, 4, T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (Z * X * Z) Euler angles from the rotation matrix M. </div></div>
|
368 |
+
<div class="ttc" id="a00319_html_ga0a4c56ecce7abcb69508ebe6313e9d10"><div class="ttname"><a href="a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10">glm::derivedEulerAngleY</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > derivedEulerAngleY(T const &angleY, T const &angularVelocityY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. </div></div>
|
369 |
+
<div class="ttc" id="a00299_html_ga7603e81477b46ddb448896909bc04928"><div class="ttname"><a href="a00299.html#ga7603e81477b46ddb448896909bc04928">glm::pitch</a></div><div class="ttdeci">GLM_FUNC_DECL T pitch(qua< T, Q > const &x)</div><div class="ttdoc">Returns pitch value of euler angles expressed in radians. </div></div>
|
370 |
+
<div class="ttc" id="a00319_html_ga483903115cd4059228961046a28d69b5"><div class="ttname"><a href="a00319.html#ga483903115cd4059228961046a28d69b5">glm::eulerAngleZX</a></div><div class="ttdeci">GLM_FUNC_DECL mat< 4, 4, T, defaultp > eulerAngleZX(T const &angle, T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </div></div>
|
371 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
372 |
+
</div><!-- fragment --></div><!-- contents -->
|
373 |
+
<!-- start footer part -->
|
374 |
+
<hr class="footer"/><address class="footer"><small>
|
375 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
376 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
377 |
+
</a> 1.8.10
|
378 |
+
</small></address>
|
379 |
+
</body>
|
380 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00030_source.html
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: exterior_product.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">exterior_product.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00030.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
94 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
|
95 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
|
96 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/qualifier.hpp"</span></div>
|
97 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
|
98 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
99 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</span></div>
|
101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># else</span></div>
|
102 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_exterior_product extension included")</span></div>
|
103 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># endif</span></div>
|
104 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
|
105 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
106 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
107 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
|
108 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
|
109 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
110 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL T <a class="code" href="a00322.html#gac36e72b934ea6a9dd313772d7e78fa93">cross</a>(vec<2, T, Q> <span class="keyword">const</span>& v, vec<2, T, Q> <span class="keyword">const</span>& u);</div>
|
111 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
|
112 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> } <span class="comment">//namespace glm</span></div>
|
113 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
|
114 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "exterior_product.inl"</span></div>
|
115 |
+
<div class="ttc" id="a00322_html_gac36e72b934ea6a9dd313772d7e78fa93"><div class="ttname"><a href="a00322.html#gac36e72b934ea6a9dd313772d7e78fa93">glm::cross</a></div><div class="ttdeci">GLM_FUNC_DECL T cross(vec< 2, T, Q > const &v, vec< 2, T, Q > const &u)</div><div class="ttdoc">Returns the cross product of x and y. </div></div>
|
116 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
117 |
+
</div><!-- fragment --></div><!-- contents -->
|
118 |
+
<!-- start footer part -->
|
119 |
+
<hr class="footer"/><address class="footer"><small>
|
120 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
121 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
122 |
+
</a> 1.8.10
|
123 |
+
</small></address>
|
124 |
+
</body>
|
125 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00038.html
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: gradient_paint.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">gradient_paint.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00327.html">GLM_GTX_gradient_paint</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00038_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:ga849241df1e55129b8ce9476200307419"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
102 |
+
<tr class="memitem:ga849241df1e55129b8ce9476200307419"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00327.html#ga849241df1e55129b8ce9476200307419">linearGradient</a> (vec< 2, T, Q > const &Point0, vec< 2, T, Q > const &Point1, vec< 2, T, Q > const &Position)</td></tr>
|
103 |
+
<tr class="memdesc:ga849241df1e55129b8ce9476200307419"><td class="mdescLeft"> </td><td class="mdescRight">Return a color from a linear gradient. <a href="a00327.html#ga849241df1e55129b8ce9476200307419">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:ga849241df1e55129b8ce9476200307419"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
<tr class="memitem:gaaecb1e93de4cbe0758b882812d4da294"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
106 |
+
<tr class="memitem:gaaecb1e93de4cbe0758b882812d4da294"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00327.html#gaaecb1e93de4cbe0758b882812d4da294">radialGradient</a> (vec< 2, T, Q > const &Center, T const &Radius, vec< 2, T, Q > const &Focal, vec< 2, T, Q > const &Position)</td></tr>
|
107 |
+
<tr class="memdesc:gaaecb1e93de4cbe0758b882812d4da294"><td class="mdescLeft"> </td><td class="mdescRight">Return a color from a radial gradient. <a href="a00327.html#gaaecb1e93de4cbe0758b882812d4da294">More...</a><br /></td></tr>
|
108 |
+
<tr class="separator:gaaecb1e93de4cbe0758b882812d4da294"><td class="memSeparator" colspan="2"> </td></tr>
|
109 |
+
</table>
|
110 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
111 |
+
<div class="textblock"><p><a class="el" href="a00327.html">GLM_GTX_gradient_paint</a> </p>
|
112 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
113 |
+
<dd>
|
114 |
+
<a class="el" href="a00347.html" title="Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. ">GLM_GTX_optimum_pow</a> (dependence) </dd></dl>
|
115 |
+
|
116 |
+
<p>Definition in file <a class="el" href="a00038_source.html">gradient_paint.hpp</a>.</p>
|
117 |
+
</div></div><!-- contents -->
|
118 |
+
<!-- start footer part -->
|
119 |
+
<hr class="footer"/><address class="footer"><small>
|
120 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
121 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
122 |
+
</a> 1.8.10
|
123 |
+
</small></address>
|
124 |
+
</body>
|
125 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00039.html
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: handed_coordinate_space.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">handed_coordinate_space.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00328.html">GLM_GTX_handed_coordinate_space</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00039_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:ga6f1bad193b9a3b048543d1935cf04dd3"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
102 |
+
<tr class="memitem:ga6f1bad193b9a3b048543d1935cf04dd3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3">leftHanded</a> (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)</td></tr>
|
103 |
+
<tr class="memdesc:ga6f1bad193b9a3b048543d1935cf04dd3"><td class="mdescLeft"> </td><td class="mdescRight">Return if a trihedron left handed or not. <a href="a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:ga6f1bad193b9a3b048543d1935cf04dd3"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
<tr class="memitem:ga99386a5ab5491871b947076e21699cc8"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
106 |
+
<tr class="memitem:ga99386a5ab5491871b947076e21699cc8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00328.html#ga99386a5ab5491871b947076e21699cc8">rightHanded</a> (vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)</td></tr>
|
107 |
+
<tr class="memdesc:ga99386a5ab5491871b947076e21699cc8"><td class="mdescLeft"> </td><td class="mdescRight">Return if a trihedron right handed or not. <a href="a00328.html#ga99386a5ab5491871b947076e21699cc8">More...</a><br /></td></tr>
|
108 |
+
<tr class="separator:ga99386a5ab5491871b947076e21699cc8"><td class="memSeparator" colspan="2"> </td></tr>
|
109 |
+
</table>
|
110 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
111 |
+
<div class="textblock"><p><a class="el" href="a00328.html">GLM_GTX_handed_coordinate_space</a> </p>
|
112 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
113 |
+
|
114 |
+
<p>Definition in file <a class="el" href="a00039_source.html">handed_coordinate_space.hpp</a>.</p>
|
115 |
+
</div></div><!-- contents -->
|
116 |
+
<!-- start footer part -->
|
117 |
+
<hr class="footer"/><address class="footer"><small>
|
118 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
119 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
120 |
+
</a> 1.8.10
|
121 |
+
</small></address>
|
122 |
+
</body>
|
123 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00039_source.html
ADDED
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: handed_coordinate_space.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">handed_coordinate_space.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00039.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
94 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
|
95 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
96 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
97 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
98 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
99 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</span></div>
|
100 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># else</span></div>
|
101 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")</span></div>
|
102 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
103 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
|
104 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
|
105 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
106 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
|
107 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
|
108 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
109 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00328.html#ga99386a5ab5491871b947076e21699cc8">rightHanded</a>(</div>
|
110 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& tangent,</div>
|
111 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vec<3, T, Q> <span class="keyword">const</span>& binormal,</div>
|
112 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vec<3, T, Q> <span class="keyword">const</span>& normal);</div>
|
113 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
|
114 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
115 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3">leftHanded</a>(</div>
|
116 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  vec<3, T, Q> <span class="keyword">const</span>& tangent,</div>
|
117 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  vec<3, T, Q> <span class="keyword">const</span>& binormal,</div>
|
118 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  vec<3, T, Q> <span class="keyword">const</span>& normal);</div>
|
119 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
|
120 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }<span class="comment">// namespace glm</span></div>
|
121 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
122 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "handed_coordinate_space.inl"</span></div>
|
123 |
+
<div class="ttc" id="a00328_html_ga6f1bad193b9a3b048543d1935cf04dd3"><div class="ttname"><a href="a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3">glm::leftHanded</a></div><div class="ttdeci">GLM_FUNC_DECL bool leftHanded(vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)</div><div class="ttdoc">Return if a trihedron left handed or not. </div></div>
|
124 |
+
<div class="ttc" id="a00328_html_ga99386a5ab5491871b947076e21699cc8"><div class="ttname"><a href="a00328.html#ga99386a5ab5491871b947076e21699cc8">glm::rightHanded</a></div><div class="ttdeci">GLM_FUNC_DECL bool rightHanded(vec< 3, T, Q > const &tangent, vec< 3, T, Q > const &binormal, vec< 3, T, Q > const &normal)</div><div class="ttdoc">Return if a trihedron right handed or not. </div></div>
|
125 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
126 |
+
</div><!-- fragment --></div><!-- contents -->
|
127 |
+
<!-- start footer part -->
|
128 |
+
<hr class="footer"/><address class="footer"><small>
|
129 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
130 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
131 |
+
</a> 1.8.10
|
132 |
+
</small></address>
|
133 |
+
</body>
|
134 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00040_source.html
ADDED
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: hash.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">hash.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00040.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
94 |
+
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
95 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
96 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")</span></div>
|
97 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"># else</span></div>
|
98 |
+
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_hash extension included")</span></div>
|
99 |
+
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># endif</span></div>
|
100 |
+
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
|
101 |
+
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
|
102 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <functional></span></div>
|
103 |
+
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
|
104 |
+
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
|
105 |
+
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
|
106 |
+
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
|
107 |
+
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
|
108 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
|
109 |
+
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
|
110 |
+
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "../gtx/dual_quaternion.hpp"</span></div>
|
111 |
+
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
|
112 |
+
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
|
113 |
+
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
|
114 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
|
115 |
+
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
|
116 |
+
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
|
117 |
+
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
|
118 |
+
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
|
119 |
+
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
|
120 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
|
121 |
+
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
|
122 |
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
|
123 |
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
|
124 |
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#if !GLM_HAS_CXX11_STL</span></div>
|
125 |
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"># error "GLM_GTX_hash requires C++11 standard library support"</span></div>
|
126 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div>
|
127 |
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
|
128 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">namespace </span><a class="code" href="a00240.html">std</a></div>
|
129 |
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div>
|
130 |
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
131 |
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::vec<1, T,Q> ></div>
|
132 |
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
|
133 |
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::vec<1, T, Q> <span class="keyword">const</span>& v) <span class="keyword">const</span>;</div>
|
134 |
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  };</div>
|
135 |
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
|
136 |
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
137 |
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::vec<2, T,Q> ></div>
|
138 |
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div>
|
139 |
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::vec<2, T, Q> <span class="keyword">const</span>& v) <span class="keyword">const</span>;</div>
|
140 |
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  };</div>
|
141 |
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
|
142 |
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
143 |
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::vec<3, T,Q> ></div>
|
144 |
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div>
|
145 |
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::vec<3, T, Q> <span class="keyword">const</span>& v) <span class="keyword">const</span>;</div>
|
146 |
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  };</div>
|
147 |
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
|
148 |
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
149 |
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::vec<4, T,Q> ></div>
|
150 |
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div>
|
151 |
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::vec<4, T, Q> <span class="keyword">const</span>& v) <span class="keyword">const</span>;</div>
|
152 |
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div>
|
153 |
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
|
154 |
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
155 |
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::qua<T,Q>></div>
|
156 |
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div>
|
157 |
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::qua<T, Q> <span class="keyword">const</span>& q) <span class="keyword">const</span>;</div>
|
158 |
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  };</div>
|
159 |
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
|
160 |
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
161 |
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::tdualquat<T,Q> ></div>
|
162 |
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div>
|
163 |
+
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tdualquat<T,Q> <span class="keyword">const</span>& q) <span class="keyword">const</span>;</div>
|
164 |
+
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  };</div>
|
165 |
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
|
166 |
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
167 |
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<2, 2, T,Q> ></div>
|
168 |
+
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div>
|
169 |
+
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<2, 2, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
170 |
+
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  };</div>
|
171 |
+
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
|
172 |
+
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
173 |
+
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<2, 3, T,Q> ></div>
|
174 |
+
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div>
|
175 |
+
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<2, 3, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
176 |
+
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  };</div>
|
177 |
+
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
|
178 |
+
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
179 |
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<2, 4, T,Q> ></div>
|
180 |
+
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div>
|
181 |
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<2, 4, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
182 |
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  };</div>
|
183 |
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
|
184 |
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
185 |
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<3, 2, T,Q> ></div>
|
186 |
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div>
|
187 |
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<3, 2, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
188 |
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  };</div>
|
189 |
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
|
190 |
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
191 |
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<3, 3, T,Q> ></div>
|
192 |
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div>
|
193 |
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<3, 3, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
194 |
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  };</div>
|
195 |
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
|
196 |
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
197 |
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<3, 4, T,Q> ></div>
|
198 |
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div>
|
199 |
+
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<3, 4, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
200 |
+
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  };</div>
|
201 |
+
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
|
202 |
+
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
203 |
+
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<4, 2, T,Q> ></div>
|
204 |
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div>
|
205 |
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<4, 2, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
206 |
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  };</div>
|
207 |
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
208 |
+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
209 |
+
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<4, 3, T,Q> ></div>
|
210 |
+
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div>
|
211 |
+
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<4, 3, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
212 |
+
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  };</div>
|
213 |
+
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
|
214 |
+
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, glm::qualifier Q></div>
|
215 |
+
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00236.html">glm</a>::mat<4, 4, T,Q> ></div>
|
216 |
+
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div>
|
217 |
+
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::mat<4, 4, T,Q> <span class="keyword">const</span>& m) <span class="keyword">const</span>;</div>
|
218 |
+
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  };</div>
|
219 |
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> } <span class="comment">// namespace std</span></div>
|
220 |
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
|
221 |
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#include "hash.inl"</span></div>
|
222 |
+
<div class="ttc" id="a00240_html"><div class="ttname"><a href="a00240.html">std</a></div><div class="ttdef"><b>Definition:</b> <a href="a00040_source.html#l00049">hash.hpp:49</a></div></div>
|
223 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
224 |
+
</div><!-- fragment --></div><!-- contents -->
|
225 |
+
<!-- start footer part -->
|
226 |
+
<hr class="footer"/><address class="footer"><small>
|
227 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
228 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
229 |
+
</a> 1.8.10
|
230 |
+
</small></address>
|
231 |
+
</body>
|
232 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00042.html
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: integer.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#typedef-members">Typedefs</a> |
|
89 |
+
<a href="#func-members">Functions</a> </div>
|
90 |
+
<div class="headertitle">
|
91 |
+
<div class="title">gtx/integer.hpp File Reference</div> </div>
|
92 |
+
</div><!--header-->
|
93 |
+
<div class="contents">
|
94 |
+
|
95 |
+
<p><a class="el" href="a00330.html">GLM_GTX_integer</a>
|
96 |
+
<a href="#details">More...</a></p>
|
97 |
+
|
98 |
+
<p><a href="a00042_source.html">Go to the source code of this file.</a></p>
|
99 |
+
<table class="memberdecls">
|
100 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
101 |
+
Typedefs</h2></td></tr>
|
102 |
+
<tr class="memitem:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memItemLeft" align="right" valign="top">typedef signed int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40">sint</a></td></tr>
|
103 |
+
<tr class="memdesc:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="mdescLeft"> </td><td class="mdescRight">32bit signed integer. <a href="a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
</table><table class="memberdecls">
|
106 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
107 |
+
Functions</h2></td></tr>
|
108 |
+
<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
109 |
+
<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00330.html#ga8cbd3120905f398ec321b5d1836e08fb">factorial</a> (genType const &x)</td></tr>
|
110 |
+
<tr class="memdesc:ga8cbd3120905f398ec321b5d1836e08fb"><td class="mdescLeft"> </td><td class="mdescRight">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. <a href="a00330.html#ga8cbd3120905f398ec321b5d1836e08fb">More...</a><br /></td></tr>
|
111 |
+
<tr class="separator:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memSeparator" colspan="2"> </td></tr>
|
112 |
+
<tr class="memitem:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga7011b4e1c1e1ed492149b028feacc00e">floor_log2</a> (unsigned int x)</td></tr>
|
113 |
+
<tr class="memdesc:ga7011b4e1c1e1ed492149b028feacc00e"><td class="mdescLeft"> </td><td class="mdescRight">Returns the floor log2 of x. <a href="a00330.html#ga7011b4e1c1e1ed492149b028feacc00e">More...</a><br /></td></tr>
|
114 |
+
<tr class="separator:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memSeparator" colspan="2"> </td></tr>
|
115 |
+
<tr class="memitem:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#gaabfbb41531ab7ad8d06fc176edfba785">mod</a> (int x, int y)</td></tr>
|
116 |
+
<tr class="memdesc:gaabfbb41531ab7ad8d06fc176edfba785"><td class="mdescLeft"> </td><td class="mdescRight">Modulus. <a href="a00330.html#gaabfbb41531ab7ad8d06fc176edfba785">More...</a><br /></td></tr>
|
117 |
+
<tr class="separator:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memSeparator" colspan="2"> </td></tr>
|
118 |
+
<tr class="memitem:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga63fc8d63e7da1706439233b386ba8b6f">mod</a> (uint x, uint y)</td></tr>
|
119 |
+
<tr class="memdesc:ga63fc8d63e7da1706439233b386ba8b6f"><td class="mdescLeft"> </td><td class="mdescRight">Modulus. <a href="a00330.html#ga63fc8d63e7da1706439233b386ba8b6f">More...</a><br /></td></tr>
|
120 |
+
<tr class="separator:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memSeparator" colspan="2"> </td></tr>
|
121 |
+
<tr class="memitem:ga78dff8bdb361bf0061194c93e003d189"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga78dff8bdb361bf0061194c93e003d189">nlz</a> (uint x)</td></tr>
|
122 |
+
<tr class="memdesc:ga78dff8bdb361bf0061194c93e003d189"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of leading zeros. <a href="a00330.html#ga78dff8bdb361bf0061194c93e003d189">More...</a><br /></td></tr>
|
123 |
+
<tr class="separator:ga78dff8bdb361bf0061194c93e003d189"><td class="memSeparator" colspan="2"> </td></tr>
|
124 |
+
<tr class="memitem:ga465016030a81d513fa2fac881ebdaa83"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga465016030a81d513fa2fac881ebdaa83">pow</a> (int x, uint y)</td></tr>
|
125 |
+
<tr class="memdesc:ga465016030a81d513fa2fac881ebdaa83"><td class="mdescLeft"> </td><td class="mdescRight">Returns x raised to the y power. <a href="a00330.html#ga465016030a81d513fa2fac881ebdaa83">More...</a><br /></td></tr>
|
126 |
+
<tr class="separator:ga465016030a81d513fa2fac881ebdaa83"><td class="memSeparator" colspan="2"> </td></tr>
|
127 |
+
<tr class="memitem:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0">pow</a> (uint x, uint y)</td></tr>
|
128 |
+
<tr class="memdesc:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="mdescLeft"> </td><td class="mdescRight">Returns x raised to the y power. <a href="a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0">More...</a><br /></td></tr>
|
129 |
+
<tr class="separator:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memSeparator" colspan="2"> </td></tr>
|
130 |
+
<tr class="memitem:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga7ce36693a75879ccd9bb10167cfa722d">sqrt</a> (int x)</td></tr>
|
131 |
+
<tr class="memdesc:ga7ce36693a75879ccd9bb10167cfa722d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the positive square root of x. <a href="a00330.html#ga7ce36693a75879ccd9bb10167cfa722d">More...</a><br /></td></tr>
|
132 |
+
<tr class="separator:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memSeparator" colspan="2"> </td></tr>
|
133 |
+
<tr class="memitem:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc">sqrt</a> (uint x)</td></tr>
|
134 |
+
<tr class="memdesc:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="mdescLeft"> </td><td class="mdescRight">Returns the positive square root of x. <a href="a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc">More...</a><br /></td></tr>
|
135 |
+
<tr class="separator:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memSeparator" colspan="2"> </td></tr>
|
136 |
+
</table>
|
137 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
138 |
+
<div class="textblock"><p><a class="el" href="a00330.html">GLM_GTX_integer</a> </p>
|
139 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
140 |
+
|
141 |
+
<p>Definition in file <a class="el" href="a00042_source.html">gtx/integer.hpp</a>.</p>
|
142 |
+
</div></div><!-- contents -->
|
143 |
+
<!-- start footer part -->
|
144 |
+
<hr class="footer"/><address class="footer"><small>
|
145 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
146 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
147 |
+
</a> 1.8.10
|
148 |
+
</small></address>
|
149 |
+
</body>
|
150 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00049_source.html
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: mat2x3.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">mat2x3.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00049.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "<a class="code" href="a00065.html">./ext/matrix_double2x3.hpp</a>"</span></div>
|
94 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00066.html">./ext/matrix_double2x3_precision.hpp</a>"</span></div>
|
95 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00084.html">./ext/matrix_float2x3.hpp</a>"</span></div>
|
96 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">./ext/matrix_float2x3_precision.hpp</a>"</span></div>
|
97 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
|
98 |
+
<div class="ttc" id="a00084_html"><div class="ttname"><a href="a00084.html">matrix_float2x3.hpp</a></div><div class="ttdoc">Core features </div></div>
|
99 |
+
<div class="ttc" id="a00066_html"><div class="ttname"><a href="a00066.html">matrix_double2x3_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
100 |
+
<div class="ttc" id="a00065_html"><div class="ttname"><a href="a00065.html">matrix_double2x3.hpp</a></div><div class="ttdoc">Core features </div></div>
|
101 |
+
<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">matrix_float2x3_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
102 |
+
</div><!-- fragment --></div><!-- contents -->
|
103 |
+
<!-- start footer part -->
|
104 |
+
<hr class="footer"/><address class="footer"><small>
|
105 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
106 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
107 |
+
</a> 1.8.10
|
108 |
+
</small></address>
|
109 |
+
</body>
|
110 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00050_source.html
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: mat2x4.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">mat2x4.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00050.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "<a class="code" href="a00067.html">./ext/matrix_double2x4.hpp</a>"</span></div>
|
94 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00068.html">./ext/matrix_double2x4_precision.hpp</a>"</span></div>
|
95 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00086.html">./ext/matrix_float2x4.hpp</a>"</span></div>
|
96 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00087.html">./ext/matrix_float2x4_precision.hpp</a>"</span></div>
|
97 |
+
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
|
98 |
+
<div class="ttc" id="a00068_html"><div class="ttname"><a href="a00068.html">matrix_double2x4_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
99 |
+
<div class="ttc" id="a00067_html"><div class="ttname"><a href="a00067.html">matrix_double2x4.hpp</a></div><div class="ttdoc">Core features </div></div>
|
100 |
+
<div class="ttc" id="a00087_html"><div class="ttname"><a href="a00087.html">matrix_float2x4_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
101 |
+
<div class="ttc" id="a00086_html"><div class="ttname"><a href="a00086.html">matrix_float2x4.hpp</a></div><div class="ttdoc">Core features </div></div>
|
102 |
+
</div><!-- fragment --></div><!-- contents -->
|
103 |
+
<!-- start footer part -->
|
104 |
+
<hr class="footer"/><address class="footer"><small>
|
105 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
106 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
107 |
+
</a> 1.8.10
|
108 |
+
</small></address>
|
109 |
+
</body>
|
110 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00054.html
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: mat4x2.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">mat4x2.hpp File Reference</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
|
92 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
93 |
+
<a href="#details">More...</a></p>
|
94 |
+
|
95 |
+
<p><a href="a00054_source.html">Go to the source code of this file.</a></p>
|
96 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
97 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
98 |
+
|
99 |
+
<p>Definition in file <a class="el" href="a00054_source.html">mat4x2.hpp</a>.</p>
|
100 |
+
</div></div><!-- contents -->
|
101 |
+
<!-- start footer part -->
|
102 |
+
<hr class="footer"/><address class="footer"><small>
|
103 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
104 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
105 |
+
</a> 1.8.10
|
106 |
+
</small></address>
|
107 |
+
</body>
|
108 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00055.html
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: mat4x3.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">mat4x3.hpp File Reference</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
|
92 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
93 |
+
<a href="#details">More...</a></p>
|
94 |
+
|
95 |
+
<p><a href="a00055_source.html">Go to the source code of this file.</a></p>
|
96 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
97 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
98 |
+
|
99 |
+
<p>Definition in file <a class="el" href="a00055_source.html">mat4x3.hpp</a>.</p>
|
100 |
+
</div></div><!-- contents -->
|
101 |
+
<!-- start footer part -->
|
102 |
+
<hr class="footer"/><address class="footer"><small>
|
103 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
104 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
105 |
+
</a> 1.8.10
|
106 |
+
</small></address>
|
107 |
+
</body>
|
108 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00055_source.html
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: mat4x3.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">mat4x3.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00055.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "<a class="code" href="a00077.html">./ext/matrix_double4x3.hpp</a>"</span></div>
|
94 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00078.html">./ext/matrix_double4x3_precision.hpp</a>"</span></div>
|
95 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00096.html">./ext/matrix_float4x3.hpp</a>"</span></div>
|
96 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00097.html">./ext/matrix_float4x3_precision.hpp</a>"</span></div>
|
97 |
+
<div class="ttc" id="a00096_html"><div class="ttname"><a href="a00096.html">matrix_float4x3.hpp</a></div><div class="ttdoc">Core features </div></div>
|
98 |
+
<div class="ttc" id="a00078_html"><div class="ttname"><a href="a00078.html">matrix_double4x3_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
99 |
+
<div class="ttc" id="a00077_html"><div class="ttname"><a href="a00077.html">matrix_double4x3.hpp</a></div><div class="ttdoc">Core features </div></div>
|
100 |
+
<div class="ttc" id="a00097_html"><div class="ttname"><a href="a00097.html">matrix_float4x3_precision.hpp</a></div><div class="ttdoc">Core features </div></div>
|
101 |
+
</div><!-- fragment --></div><!-- contents -->
|
102 |
+
<!-- start footer part -->
|
103 |
+
<hr class="footer"/><address class="footer"><small>
|
104 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
105 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
106 |
+
</a> 1.8.10
|
107 |
+
</small></address>
|
108 |
+
</body>
|
109 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00058.html
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_access.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.html">gtc</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_access.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00293.html">GLM_GTC_matrix_access</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00058_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
102 |
+
<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::col_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00293.html#ga96022eb0d3fae39d89fc7a954e59b374">column</a> (genType const &m, length_t index)</td></tr>
|
103 |
+
<tr class="memdesc:ga96022eb0d3fae39d89fc7a954e59b374"><td class="mdescLeft"> </td><td class="mdescRight">Get a specific column of a matrix. <a href="a00293.html#ga96022eb0d3fae39d89fc7a954e59b374">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
106 |
+
<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00293.html#ga9e757377523890e8b80c5843dbe4dd15">column</a> (genType const &m, length_t index, typename genType::col_type const &x)</td></tr>
|
107 |
+
<tr class="memdesc:ga9e757377523890e8b80c5843dbe4dd15"><td class="mdescLeft"> </td><td class="mdescRight">Set a specific column to a matrix. <a href="a00293.html#ga9e757377523890e8b80c5843dbe4dd15">More...</a><br /></td></tr>
|
108 |
+
<tr class="separator:ga9e757377523890e8b80c5843dbe4dd15"><td class="memSeparator" colspan="2"> </td></tr>
|
109 |
+
<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
110 |
+
<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::row_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba">row</a> (genType const &m, length_t index)</td></tr>
|
111 |
+
<tr class="memdesc:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="mdescLeft"> </td><td class="mdescRight">Get a specific row of a matrix. <a href="a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba">More...</a><br /></td></tr>
|
112 |
+
<tr class="separator:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memSeparator" colspan="2"> </td></tr>
|
113 |
+
<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
114 |
+
<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00293.html#gaadcc64829aadf4103477679e48c7594f">row</a> (genType const &m, length_t index, typename genType::row_type const &x)</td></tr>
|
115 |
+
<tr class="memdesc:gaadcc64829aadf4103477679e48c7594f"><td class="mdescLeft"> </td><td class="mdescRight">Set a specific row to a matrix. <a href="a00293.html#gaadcc64829aadf4103477679e48c7594f">More...</a><br /></td></tr>
|
116 |
+
<tr class="separator:gaadcc64829aadf4103477679e48c7594f"><td class="memSeparator" colspan="2"> </td></tr>
|
117 |
+
</table>
|
118 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
119 |
+
<div class="textblock"><p><a class="el" href="a00293.html">GLM_GTC_matrix_access</a> </p>
|
120 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
121 |
+
|
122 |
+
<p>Definition in file <a class="el" href="a00058_source.html">matrix_access.hpp</a>.</p>
|
123 |
+
</div></div><!-- contents -->
|
124 |
+
<!-- start footer part -->
|
125 |
+
<hr class="footer"/><address class="footer"><small>
|
126 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
127 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
128 |
+
</a> 1.8.10
|
129 |
+
</small></address>
|
130 |
+
</body>
|
131 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00062.html
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_decompose.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#func-members">Functions</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_decompose.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00335.html">GLM_GTX_matrix_decompose</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00062_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
100 |
+
Functions</h2></td></tr>
|
101 |
+
<tr class="memitem:gac0e342656ba09a9bc97c57182ba73124"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
102 |
+
<tr class="memitem:gac0e342656ba09a9bc97c57182ba73124"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00335.html#gac0e342656ba09a9bc97c57182ba73124">decompose</a> (mat< 4, 4, T, Q > const &modelMatrix, vec< 3, T, Q > &scale, qua< T, Q > &orientation, vec< 3, T, Q > &translation, vec< 3, T, Q > &skew, vec< 4, T, Q > &perspective)</td></tr>
|
103 |
+
<tr class="memdesc:gac0e342656ba09a9bc97c57182ba73124"><td class="mdescLeft"> </td><td class="mdescRight">Decomposes a model matrix to translations, rotation and scale components. <a href="a00335.html#gac0e342656ba09a9bc97c57182ba73124">More...</a><br /></td></tr>
|
104 |
+
<tr class="separator:gac0e342656ba09a9bc97c57182ba73124"><td class="memSeparator" colspan="2"> </td></tr>
|
105 |
+
</table>
|
106 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
107 |
+
<div class="textblock"><p><a class="el" href="a00335.html">GLM_GTX_matrix_decompose</a> </p>
|
108 |
+
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd></dl>
|
109 |
+
|
110 |
+
<p>Definition in file <a class="el" href="a00062_source.html">matrix_decompose.hpp</a>.</p>
|
111 |
+
</div></div><!-- contents -->
|
112 |
+
<!-- start footer part -->
|
113 |
+
<hr class="footer"/><address class="footer"><small>
|
114 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
115 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
116 |
+
</a> 1.8.10
|
117 |
+
</small></address>
|
118 |
+
</body>
|
119 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00067_source.html
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double2x4.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">matrix_double2x4.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00067.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "../detail/type_mat2x4.hpp"</span></div>
|
94 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div>
|
95 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
96 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> {</div>
|
97 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
|
98 |
+
<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="a00283.html#gaef2198807e937072803ae0ae45e1965e"> 15</a></span>  <span class="keyword">typedef</span> mat<2, 4, double, defaultp> <a class="code" href="a00283.html#gaef2198807e937072803ae0ae45e1965e">dmat2x4</a>;</div>
|
99 |
+
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
|
100 |
+
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> }<span class="comment">//namespace glm</span></div>
|
101 |
+
<div class="ttc" id="a00283_html_gaef2198807e937072803ae0ae45e1965e"><div class="ttname"><a href="a00283.html#gaef2198807e937072803ae0ae45e1965e">glm::dmat2x4</a></div><div class="ttdeci">mat< 2, 4, double, defaultp > dmat2x4</div><div class="ttdoc">2 columns of 4 components matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00067_source.html#l00015">matrix_double2x4.hpp:15</a></div></div>
|
102 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
103 |
+
</div><!-- fragment --></div><!-- contents -->
|
104 |
+
<!-- start footer part -->
|
105 |
+
<hr class="footer"/><address class="footer"><small>
|
106 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
107 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
108 |
+
</a> 1.8.10
|
109 |
+
</small></address>
|
110 |
+
</body>
|
111 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00072_source.html
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double3x3_precision.hpp Source File</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="headertitle">
|
88 |
+
<div class="title">matrix_double3x3_precision.hpp</div> </div>
|
89 |
+
</div><!--header-->
|
90 |
+
<div class="contents">
|
91 |
+
<a href="a00072.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
92 |
+
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
|
93 |
+
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "../detail/type_mat3x3.hpp"</span></div>
|
94 |
+
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div>
|
95 |
+
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
96 |
+
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> {</div>
|
97 |
+
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
|
98 |
+
<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="a00284.html#ga0cab80beee64a5f8d2ae4e823983063a"> 16</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, lowp> <a class="code" href="a00284.html#ga0cab80beee64a5f8d2ae4e823983063a">lowp_dmat3</a>;</div>
|
99 |
+
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
100 |
+
<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2"> 22</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, mediump> <a class="code" href="a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2">mediump_dmat3</a>;</div>
|
101 |
+
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
|
102 |
+
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="a00284.html#ga86d6d4dbad92ffdcc759773340e15a97"> 28</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, highp> <a class="code" href="a00284.html#ga86d6d4dbad92ffdcc759773340e15a97">highp_dmat3</a>;</div>
|
103 |
+
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
|
104 |
+
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00284.html#gac017848a9df570f60916a21a297b1e8e"> 34</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, lowp> <a class="code" href="a00284.html#gac017848a9df570f60916a21a297b1e8e">lowp_dmat3x3</a>;</div>
|
105 |
+
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
|
106 |
+
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6"> 40</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, mediump> <a class="code" href="a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6">mediump_dmat3x3</a>;</div>
|
107 |
+
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
|
108 |
+
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce"> 46</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, highp> <a class="code" href="a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce">highp_dmat3x3</a>;</div>
|
109 |
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
110 |
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }<span class="comment">//namespace glm</span></div>
|
111 |
+
<div class="ttc" id="a00284_html_ga0cab80beee64a5f8d2ae4e823983063a"><div class="ttname"><a href="a00284.html#ga0cab80beee64a5f8d2ae4e823983063a">glm::lowp_dmat3</a></div><div class="ttdeci">mat< 3, 3, double, lowp > lowp_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00016">matrix_double3x3_precision.hpp:16</a></div></div>
|
112 |
+
<div class="ttc" id="a00284_html_gac017848a9df570f60916a21a297b1e8e"><div class="ttname"><a href="a00284.html#gac017848a9df570f60916a21a297b1e8e">glm::lowp_dmat3x3</a></div><div class="ttdeci">mat< 3, 3, double, lowp > lowp_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00034">matrix_double3x3_precision.hpp:34</a></div></div>
|
113 |
+
<div class="ttc" id="a00284_html_ga86d6d4dbad92ffdcc759773340e15a97"><div class="ttname"><a href="a00284.html#ga86d6d4dbad92ffdcc759773340e15a97">glm::highp_dmat3</a></div><div class="ttdeci">mat< 3, 3, double, highp > highp_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00028">matrix_double3x3_precision.hpp:28</a></div></div>
|
114 |
+
<div class="ttc" id="a00284_html_gae367ea93c4ad8a7c101dd27b8b2b04ce"><div class="ttname"><a href="a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce">glm::highp_dmat3x3</a></div><div class="ttdeci">mat< 3, 3, double, highp > highp_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00046">matrix_double3x3_precision.hpp:46</a></div></div>
|
115 |
+
<div class="ttc" id="a00284_html_ga47bd2aae4701ee2fc865674a9df3d7a6"><div class="ttname"><a href="a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6">glm::mediump_dmat3x3</a></div><div class="ttdeci">mat< 3, 3, double, mediump > mediump_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00040">matrix_double3x3_precision.hpp:40</a></div></div>
|
116 |
+
<div class="ttc" id="a00284_html_ga939fbf9c53008a8e84c7dd7cf8de29e2"><div class="ttname"><a href="a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2">glm::mediump_dmat3</a></div><div class="ttdeci">mat< 3, 3, double, mediump > mediump_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class="ttdef"><b>Definition:</b> <a href="a00072_source.html#l00022">matrix_double3x3_precision.hpp:22</a></div></div>
|
117 |
+
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
118 |
+
</div><!-- fragment --></div><!-- contents -->
|
119 |
+
<!-- start footer part -->
|
120 |
+
<hr class="footer"/><address class="footer"><small>
|
121 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
122 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
123 |
+
</a> 1.8.10
|
124 |
+
</small></address>
|
125 |
+
</body>
|
126 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00074.html
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double3x4_precision.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#typedef-members">Typedefs</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_double3x4_precision.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00074_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
100 |
+
Typedefs</h2></td></tr>
|
101 |
+
<tr class="memitem:ga6543eeeb64f48d79a0b96484308c50f0"><td class="memItemLeft" align="right" valign="top">typedef mat< 3, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga6543eeeb64f48d79a0b96484308c50f0">highp_dmat3x4</a></td></tr>
|
102 |
+
<tr class="memdesc:ga6543eeeb64f48d79a0b96484308c50f0"><td class="mdescLeft"> </td><td class="mdescRight">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga6543eeeb64f48d79a0b96484308c50f0">More...</a><br /></td></tr>
|
103 |
+
<tr class="separator:ga6543eeeb64f48d79a0b96484308c50f0"><td class="memSeparator" colspan="2"> </td></tr>
|
104 |
+
<tr class="memitem:ga93add35d2a44c5830978b827e8c295e8"><td class="memItemLeft" align="right" valign="top">typedef mat< 3, 4, double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga93add35d2a44c5830978b827e8c295e8">lowp_dmat3x4</a></td></tr>
|
105 |
+
<tr class="memdesc:ga93add35d2a44c5830978b827e8c295e8"><td class="mdescLeft"> </td><td class="mdescRight">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <a href="a00284.html#ga93add35d2a44c5830978b827e8c295e8">More...</a><br /></td></tr>
|
106 |
+
<tr class="separator:ga93add35d2a44c5830978b827e8c295e8"><td class="memSeparator" colspan="2"> </td></tr>
|
107 |
+
<tr class="memitem:ga3a132bd05675c2e46556f67cf738600b"><td class="memItemLeft" align="right" valign="top">typedef mat< 3, 4, double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga3a132bd05675c2e46556f67cf738600b">mediump_dmat3x4</a></td></tr>
|
108 |
+
<tr class="memdesc:ga3a132bd05675c2e46556f67cf738600b"><td class="mdescLeft"> </td><td class="mdescRight">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga3a132bd05675c2e46556f67cf738600b">More...</a><br /></td></tr>
|
109 |
+
<tr class="separator:ga3a132bd05675c2e46556f67cf738600b"><td class="memSeparator" colspan="2"> </td></tr>
|
110 |
+
</table>
|
111 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
112 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
113 |
+
|
114 |
+
<p>Definition in file <a class="el" href="a00074_source.html">matrix_double3x4_precision.hpp</a>.</p>
|
115 |
+
</div></div><!-- contents -->
|
116 |
+
<!-- start footer part -->
|
117 |
+
<hr class="footer"/><address class="footer"><small>
|
118 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
119 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
120 |
+
</a> 1.8.10
|
121 |
+
</small></address>
|
122 |
+
</body>
|
123 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00078.html
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double4x3_precision.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#typedef-members">Typedefs</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_double4x3_precision.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00078_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
100 |
+
Typedefs</h2></td></tr>
|
101 |
+
<tr class="memitem:gacf237c2d8832fe8db2d7e187585d34bd"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 3, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#gacf237c2d8832fe8db2d7e187585d34bd">highp_dmat4x3</a></td></tr>
|
102 |
+
<tr class="memdesc:gacf237c2d8832fe8db2d7e187585d34bd"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#gacf237c2d8832fe8db2d7e187585d34bd">More...</a><br /></td></tr>
|
103 |
+
<tr class="separator:gacf237c2d8832fe8db2d7e187585d34bd"><td class="memSeparator" colspan="2"> </td></tr>
|
104 |
+
<tr class="memitem:ga3d7ea07da7c6e5c81a3f4c8b3d44056e"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 3, double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e">lowp_dmat4x3</a></td></tr>
|
105 |
+
<tr class="memdesc:ga3d7ea07da7c6e5c81a3f4c8b3d44056e"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <a href="a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e">More...</a><br /></td></tr>
|
106 |
+
<tr class="separator:ga3d7ea07da7c6e5c81a3f4c8b3d44056e"><td class="memSeparator" colspan="2"> </td></tr>
|
107 |
+
<tr class="memitem:ga43ef60e4d996db15c9c8f069a96ff763"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 3, double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga43ef60e4d996db15c9c8f069a96ff763">mediump_dmat4x3</a></td></tr>
|
108 |
+
<tr class="memdesc:ga43ef60e4d996db15c9c8f069a96ff763"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga43ef60e4d996db15c9c8f069a96ff763">More...</a><br /></td></tr>
|
109 |
+
<tr class="separator:ga43ef60e4d996db15c9c8f069a96ff763"><td class="memSeparator" colspan="2"> </td></tr>
|
110 |
+
</table>
|
111 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
112 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
113 |
+
|
114 |
+
<p>Definition in file <a class="el" href="a00078_source.html">matrix_double4x3_precision.hpp</a>.</p>
|
115 |
+
</div></div><!-- contents -->
|
116 |
+
<!-- start footer part -->
|
117 |
+
<hr class="footer"/><address class="footer"><small>
|
118 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
119 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
120 |
+
</a> 1.8.10
|
121 |
+
</small></address>
|
122 |
+
</body>
|
123 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00079.html
ADDED
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double4x4.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#typedef-members">Typedefs</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_double4x4.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00079_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
100 |
+
Typedefs</h2></td></tr>
|
101 |
+
<tr class="memitem:ga0f34486bb7fec8e5a5b3830b6a6cbeca"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca">dmat4</a></td></tr>
|
102 |
+
<tr class="memdesc:ga0f34486bb7fec8e5a5b3830b6a6cbeca"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers. <a href="a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca">More...</a><br /></td></tr>
|
103 |
+
<tr class="separator:ga0f34486bb7fec8e5a5b3830b6a6cbeca"><td class="memSeparator" colspan="2"> </td></tr>
|
104 |
+
<tr class="memitem:gad5a6484b983b74f9d801cab8bc4e6a10"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10">dmat4x4</a></td></tr>
|
105 |
+
<tr class="memdesc:gad5a6484b983b74f9d801cab8bc4e6a10"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers. <a href="a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10">More...</a><br /></td></tr>
|
106 |
+
<tr class="separator:gad5a6484b983b74f9d801cab8bc4e6a10"><td class="memSeparator" colspan="2"> </td></tr>
|
107 |
+
</table>
|
108 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
109 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
110 |
+
|
111 |
+
<p>Definition in file <a class="el" href="a00079_source.html">matrix_double4x4.hpp</a>.</p>
|
112 |
+
</div></div><!-- contents -->
|
113 |
+
<!-- start footer part -->
|
114 |
+
<hr class="footer"/><address class="footer"><small>
|
115 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
116 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
117 |
+
</a> 1.8.10
|
118 |
+
</small></address>
|
119 |
+
</body>
|
120 |
+
</html>
|
diff-gaussian-rasterization-camera/third_party/glm/doc/api/a00080.html
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
6 |
+
<meta name="generator" content="Doxygen 1.8.10"/>
|
7 |
+
<title>0.9.9 API documentation: matrix_double4x4_precision.hpp File Reference</title>
|
8 |
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
9 |
+
<script type="text/javascript" src="jquery.js"></script>
|
10 |
+
<script type="text/javascript" src="dynsections.js"></script>
|
11 |
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
12 |
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
13 |
+
<script type="text/javascript" src="search/search.js"></script>
|
14 |
+
<script type="text/javascript">
|
15 |
+
$(document).ready(function() { init_search(); });
|
16 |
+
</script>
|
17 |
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
18 |
+
</head>
|
19 |
+
<body>
|
20 |
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
21 |
+
<div id="titlearea">
|
22 |
+
<table cellspacing="0" cellpadding="0">
|
23 |
+
<tbody>
|
24 |
+
<tr style="height: 56px;">
|
25 |
+
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
26 |
+
<td id="projectalign" style="padding-left: 0.5em;">
|
27 |
+
<div id="projectname">0.9.9 API documentation
|
28 |
+
</div>
|
29 |
+
</td>
|
30 |
+
</tr>
|
31 |
+
</tbody>
|
32 |
+
</table>
|
33 |
+
</div>
|
34 |
+
<!-- end header part -->
|
35 |
+
<!-- Generated by Doxygen 1.8.10 -->
|
36 |
+
<script type="text/javascript">
|
37 |
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
38 |
+
</script>
|
39 |
+
<div id="navrow1" class="tabs">
|
40 |
+
<ul class="tablist">
|
41 |
+
<li><a href="index.html"><span>Main Page</span></a></li>
|
42 |
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
43 |
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
44 |
+
<li>
|
45 |
+
<div id="MSearchBox" class="MSearchBoxInactive">
|
46 |
+
<span class="left">
|
47 |
+
<img id="MSearchSelect" src="search/mag_sel.png"
|
48 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
49 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
50 |
+
alt=""/>
|
51 |
+
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
52 |
+
onfocus="searchBox.OnSearchFieldFocus(true)"
|
53 |
+
onblur="searchBox.OnSearchFieldFocus(false)"
|
54 |
+
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
55 |
+
</span><span class="right">
|
56 |
+
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
57 |
+
</span>
|
58 |
+
</div>
|
59 |
+
</li>
|
60 |
+
</ul>
|
61 |
+
</div>
|
62 |
+
<div id="navrow2" class="tabs2">
|
63 |
+
<ul class="tablist">
|
64 |
+
<li><a href="files.html"><span>File List</span></a></li>
|
65 |
+
</ul>
|
66 |
+
</div>
|
67 |
+
<!-- window showing the filter options -->
|
68 |
+
<div id="MSearchSelectWindow"
|
69 |
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
70 |
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
71 |
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<!-- iframe showing the search results (closed by default) -->
|
75 |
+
<div id="MSearchResultsWindow">
|
76 |
+
<iframe src="javascript:void(0)" frameborder="0"
|
77 |
+
name="MSearchResults" id="MSearchResults">
|
78 |
+
</iframe>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div id="nav-path" class="navpath">
|
82 |
+
<ul>
|
83 |
+
<li class="navelem"><a class="el" href="dir_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_6b66465792d005310484819a0eb0b0d3.html">ext</a></li> </ul>
|
84 |
+
</div>
|
85 |
+
</div><!-- top -->
|
86 |
+
<div class="header">
|
87 |
+
<div class="summary">
|
88 |
+
<a href="#typedef-members">Typedefs</a> </div>
|
89 |
+
<div class="headertitle">
|
90 |
+
<div class="title">matrix_double4x4_precision.hpp File Reference</div> </div>
|
91 |
+
</div><!--header-->
|
92 |
+
<div class="contents">
|
93 |
+
|
94 |
+
<p><a class="el" href="a00280.html">Core features</a>
|
95 |
+
<a href="#details">More...</a></p>
|
96 |
+
|
97 |
+
<p><a href="a00080_source.html">Go to the source code of this file.</a></p>
|
98 |
+
<table class="memberdecls">
|
99 |
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
|
100 |
+
Typedefs</h2></td></tr>
|
101 |
+
<tr class="memitem:ga945254f459860741138bceb74da496b9"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga945254f459860741138bceb74da496b9">highp_dmat4</a></td></tr>
|
102 |
+
<tr class="memdesc:ga945254f459860741138bceb74da496b9"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga945254f459860741138bceb74da496b9">More...</a><br /></td></tr>
|
103 |
+
<tr class="separator:ga945254f459860741138bceb74da496b9"><td class="memSeparator" colspan="2"> </td></tr>
|
104 |
+
<tr class="memitem:ga118d24a3d12c034e7cccef7bf2f01b8a"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a">highp_dmat4x4</a></td></tr>
|
105 |
+
<tr class="memdesc:ga118d24a3d12c034e7cccef7bf2f01b8a"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a">More...</a><br /></td></tr>
|
106 |
+
<tr class="separator:ga118d24a3d12c034e7cccef7bf2f01b8a"><td class="memSeparator" colspan="2"> </td></tr>
|
107 |
+
<tr class="memitem:ga708bc5b91bbfedd21debac8dcf2a64cd"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd">lowp_dmat4</a></td></tr>
|
108 |
+
<tr class="memdesc:ga708bc5b91bbfedd21debac8dcf2a64cd"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <a href="a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd">More...</a><br /></td></tr>
|
109 |
+
<tr class="separator:ga708bc5b91bbfedd21debac8dcf2a64cd"><td class="memSeparator" colspan="2"> </td></tr>
|
110 |
+
<tr class="memitem:ga5b0413198b7e9f061f7534a221c9dac9"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga5b0413198b7e9f061f7534a221c9dac9">lowp_dmat4x4</a></td></tr>
|
111 |
+
<tr class="memdesc:ga5b0413198b7e9f061f7534a221c9dac9"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <a href="a00284.html#ga5b0413198b7e9f061f7534a221c9dac9">More...</a><br /></td></tr>
|
112 |
+
<tr class="separator:ga5b0413198b7e9f061f7534a221c9dac9"><td class="memSeparator" colspan="2"> </td></tr>
|
113 |
+
<tr class="memitem:gaf650bc667bf2a0e496b5a9182bc8d378"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378">mediump_dmat4</a></td></tr>
|
114 |
+
<tr class="memdesc:gaf650bc667bf2a0e496b5a9182bc8d378"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378">More...</a><br /></td></tr>
|
115 |
+
<tr class="separator:gaf650bc667bf2a0e496b5a9182bc8d378"><td class="memSeparator" colspan="2"> </td></tr>
|
116 |
+
<tr class="memitem:ga5389b3ab32dc0d72bea00057ab6d1dd3"><td class="memItemLeft" align="right" valign="top">typedef mat< 4, 4, double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3">mediump_dmat4x4</a></td></tr>
|
117 |
+
<tr class="memdesc:ga5389b3ab32dc0d72bea00057ab6d1dd3"><td class="mdescLeft"> </td><td class="mdescRight">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <a href="a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3">More...</a><br /></td></tr>
|
118 |
+
<tr class="separator:ga5389b3ab32dc0d72bea00057ab6d1dd3"><td class="memSeparator" colspan="2"> </td></tr>
|
119 |
+
</table>
|
120 |
+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
121 |
+
<div class="textblock"><p><a class="el" href="a00280.html">Core features</a> </p>
|
122 |
+
|
123 |
+
<p>Definition in file <a class="el" href="a00080_source.html">matrix_double4x4_precision.hpp</a>.</p>
|
124 |
+
</div></div><!-- contents -->
|
125 |
+
<!-- start footer part -->
|
126 |
+
<hr class="footer"/><address class="footer"><small>
|
127 |
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
128 |
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
129 |
+
</a> 1.8.10
|
130 |
+
</small></address>
|
131 |
+
</body>
|
132 |
+
</html>
|