Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/embree/include/embree4/rtcore_quaternion.h
9905 views
1
// Copyright 2009-2021 Intel Corporation
2
// SPDX-License-Identifier: Apache-2.0
3
4
#pragma once
5
6
#include "rtcore_common.h"
7
8
RTC_NAMESPACE_BEGIN
9
10
/*
11
* Structure for transformation representation as a matrix decomposition using
12
* a quaternion
13
*/
14
struct RTC_ALIGN(16) RTCQuaternionDecomposition
15
{
16
float scale_x;
17
float scale_y;
18
float scale_z;
19
float skew_xy;
20
float skew_xz;
21
float skew_yz;
22
float shift_x;
23
float shift_y;
24
float shift_z;
25
float quaternion_r;
26
float quaternion_i;
27
float quaternion_j;
28
float quaternion_k;
29
float translation_x;
30
float translation_y;
31
float translation_z;
32
};
33
34
RTC_FORCEINLINE void rtcInitQuaternionDecomposition(struct RTCQuaternionDecomposition* qdecomp)
35
{
36
qdecomp->scale_x = 1.f;
37
qdecomp->scale_y = 1.f;
38
qdecomp->scale_z = 1.f;
39
qdecomp->skew_xy = 0.f;
40
qdecomp->skew_xz = 0.f;
41
qdecomp->skew_yz = 0.f;
42
qdecomp->shift_x = 0.f;
43
qdecomp->shift_y = 0.f;
44
qdecomp->shift_z = 0.f;
45
qdecomp->quaternion_r = 1.f;
46
qdecomp->quaternion_i = 0.f;
47
qdecomp->quaternion_j = 0.f;
48
qdecomp->quaternion_k = 0.f;
49
qdecomp->translation_x = 0.f;
50
qdecomp->translation_y = 0.f;
51
qdecomp->translation_z = 0.f;
52
}
53
54
RTC_FORCEINLINE void rtcQuaternionDecompositionSetQuaternion(
55
struct RTCQuaternionDecomposition* qdecomp,
56
float r, float i, float j, float k)
57
{
58
qdecomp->quaternion_r = r;
59
qdecomp->quaternion_i = i;
60
qdecomp->quaternion_j = j;
61
qdecomp->quaternion_k = k;
62
}
63
64
RTC_FORCEINLINE void rtcQuaternionDecompositionSetScale(
65
struct RTCQuaternionDecomposition* qdecomp,
66
float scale_x, float scale_y, float scale_z)
67
{
68
qdecomp->scale_x = scale_x;
69
qdecomp->scale_y = scale_y;
70
qdecomp->scale_z = scale_z;
71
}
72
73
RTC_FORCEINLINE void rtcQuaternionDecompositionSetSkew(
74
struct RTCQuaternionDecomposition* qdecomp,
75
float skew_xy, float skew_xz, float skew_yz)
76
{
77
qdecomp->skew_xy = skew_xy;
78
qdecomp->skew_xz = skew_xz;
79
qdecomp->skew_yz = skew_yz;
80
}
81
82
RTC_FORCEINLINE void rtcQuaternionDecompositionSetShift(
83
struct RTCQuaternionDecomposition* qdecomp,
84
float shift_x, float shift_y, float shift_z)
85
{
86
qdecomp->shift_x = shift_x;
87
qdecomp->shift_y = shift_y;
88
qdecomp->shift_z = shift_z;
89
}
90
91
RTC_FORCEINLINE void rtcQuaternionDecompositionSetTranslation(
92
struct RTCQuaternionDecomposition* qdecomp,
93
float translation_x, float translation_y, float translation_z)
94
{
95
qdecomp->translation_x = translation_x;
96
qdecomp->translation_y = translation_y;
97
qdecomp->translation_z = translation_z;
98
}
99
100
RTC_NAMESPACE_END
101
102
103