1// Copyright 2009-2021 Intel Corporation 2// SPDX-License-Identifier: Apache-2.0 3 4#ifndef __EMBREE_QUATERNION_ISPH__ 5#define __EMBREE_QUATERNION_ISPH__ 6 7/* 8 * Structure for transformation respresentation as a matrix decomposition using 9 * a quaternion 10 */ 11struct RTC_ALIGN(16) RTCQuaternionDecomposition 12{ 13 float scale_x; 14 float scale_y; 15 float scale_z; 16 float skew_xy; 17 float skew_xz; 18 float skew_yz; 19 float shift_x; 20 float shift_y; 21 float shift_z; 22 float quaternion_r; 23 float quaternion_i; 24 float quaternion_j; 25 float quaternion_k; 26 float translation_x; 27 float translation_y; 28 float translation_z; 29}; 30 31RTC_FORCEINLINE void rtcInitQuaternionDecomposition(uniform RTCQuaternionDecomposition* uniform qdecomp) 32{ 33 qdecomp->scale_x = 1.f; 34 qdecomp->scale_y = 1.f; 35 qdecomp->scale_z = 1.f; 36 qdecomp->skew_xy = 0.f; 37 qdecomp->skew_xz = 0.f; 38 qdecomp->skew_yz = 0.f; 39 qdecomp->shift_x = 0.f; 40 qdecomp->shift_y = 0.f; 41 qdecomp->shift_z = 0.f; 42 qdecomp->quaternion_r = 1.f; 43 qdecomp->quaternion_i = 0.f; 44 qdecomp->quaternion_j = 0.f; 45 qdecomp->quaternion_k = 0.f; 46 qdecomp->translation_x = 0.f; 47 qdecomp->translation_y = 0.f; 48 qdecomp->translation_z = 0.f; 49} 50 51RTC_FORCEINLINE void rtcInitQuaternionDecomposition(uniform RTCQuaternionDecomposition* varying qdecomp) 52{ 53 qdecomp->scale_x = 1.f; 54 qdecomp->scale_y = 1.f; 55 qdecomp->scale_z = 1.f; 56 qdecomp->skew_xy = 0.f; 57 qdecomp->skew_xz = 0.f; 58 qdecomp->skew_yz = 0.f; 59 qdecomp->shift_x = 0.f; 60 qdecomp->shift_y = 0.f; 61 qdecomp->shift_z = 0.f; 62 qdecomp->quaternion_r = 1.f; 63 qdecomp->quaternion_i = 0.f; 64 qdecomp->quaternion_j = 0.f; 65 qdecomp->quaternion_k = 0.f; 66 qdecomp->translation_x = 0.f; 67 qdecomp->translation_y = 0.f; 68 qdecomp->translation_z = 0.f; 69} 70 71RTC_FORCEINLINE void rtcQuaternionDecompositionSetQuaternion( 72 uniform RTCQuaternionDecomposition* uniform qdecomp, 73 uniform float r, uniform float i, uniform float j, uniform float k) 74{ 75 qdecomp->quaternion_r = r; 76 qdecomp->quaternion_i = i; 77 qdecomp->quaternion_j = j; 78 qdecomp->quaternion_k = k; 79} 80 81RTC_FORCEINLINE void rtcQuaternionDecompositionSetQuaternion( 82 uniform RTCQuaternionDecomposition* varying qdecomp, 83 varying float r, varying float i, varying float j, varying float k) 84{ 85 qdecomp->quaternion_r = r; 86 qdecomp->quaternion_i = i; 87 qdecomp->quaternion_j = j; 88 qdecomp->quaternion_k = k; 89} 90 91RTC_FORCEINLINE void rtcQuaternionDecompositionSetScale( 92 uniform RTCQuaternionDecomposition* uniform qdecomp, 93 uniform float scale_x, uniform float scale_y, uniform float scale_z) 94{ 95 qdecomp->scale_x = scale_x; 96 qdecomp->scale_y = scale_y; 97 qdecomp->scale_z = scale_z; 98} 99 100RTC_FORCEINLINE void rtcQuaternionDecompositionSetScale( 101 uniform RTCQuaternionDecomposition* varying qdecomp, 102 varying float scale_x, varying float scale_y, varying float scale_z) 103{ 104 qdecomp->scale_x = scale_x; 105 qdecomp->scale_y = scale_y; 106 qdecomp->scale_z = scale_z; 107} 108 109RTC_FORCEINLINE void rtcQuaternionDecompositionSetSkew( 110 uniform RTCQuaternionDecomposition* uniform qdecomp, 111 uniform float skew_xy, uniform float skew_xz, uniform float skew_yz) 112{ 113 qdecomp->skew_xy = skew_xy; 114 qdecomp->skew_xz = skew_xz; 115 qdecomp->skew_yz = skew_yz; 116} 117 118RTC_FORCEINLINE void rtcQuaternionDecompositionSetSkew( 119 uniform RTCQuaternionDecomposition* varying qdecomp, 120 varying float skew_xy, varying float skew_xz, varying float skew_yz) 121{ 122 qdecomp->skew_xy = skew_xy; 123 qdecomp->skew_xz = skew_xz; 124 qdecomp->skew_yz = skew_yz; 125} 126 127RTC_FORCEINLINE void rtcQuaternionDecompositionSetShift( 128 uniform RTCQuaternionDecomposition* uniform qdecomp, 129 uniform float shift_x, uniform float shift_y, uniform float shift_z) 130{ 131 qdecomp->shift_x = shift_x; 132 qdecomp->shift_y = shift_y; 133 qdecomp->shift_z = shift_z; 134} 135 136RTC_FORCEINLINE void rtcQuaternionDecompositionSetShift( 137 uniform RTCQuaternionDecomposition* varying qdecomp, 138 varying float shift_x, varying float shift_y, varying float shift_z) 139{ 140 qdecomp->shift_x = shift_x; 141 qdecomp->shift_y = shift_y; 142 qdecomp->shift_z = shift_z; 143} 144 145RTC_FORCEINLINE void rtcQuaternionDecompositionSetTranslation( 146 uniform RTCQuaternionDecomposition* uniform qdecomp, 147 uniform float translation_x, uniform float translation_y, uniform float translation_z) 148{ 149 qdecomp->translation_x = translation_x; 150 qdecomp->translation_y = translation_y; 151 qdecomp->translation_z = translation_z; 152} 153 154RTC_FORCEINLINE void rtcQuaternionDecompositionSetTranslation( 155 uniform RTCQuaternionDecomposition* varying qdecomp, 156 varying float translation_x, varying float translation_y, varying float translation_z) 157{ 158 qdecomp->translation_x = translation_x; 159 qdecomp->translation_y = translation_y; 160 qdecomp->translation_z = translation_z; 161} 162 163#endif 164