Path: blob/master/thirdparty/embree/include/embree4/rtcore_quaternion.h
9905 views
// Copyright 2009-2021 Intel Corporation1// SPDX-License-Identifier: Apache-2.023#pragma once45#include "rtcore_common.h"67RTC_NAMESPACE_BEGIN89/*10* Structure for transformation representation as a matrix decomposition using11* a quaternion12*/13struct RTC_ALIGN(16) RTCQuaternionDecomposition14{15float scale_x;16float scale_y;17float scale_z;18float skew_xy;19float skew_xz;20float skew_yz;21float shift_x;22float shift_y;23float shift_z;24float quaternion_r;25float quaternion_i;26float quaternion_j;27float quaternion_k;28float translation_x;29float translation_y;30float translation_z;31};3233RTC_FORCEINLINE void rtcInitQuaternionDecomposition(struct RTCQuaternionDecomposition* qdecomp)34{35qdecomp->scale_x = 1.f;36qdecomp->scale_y = 1.f;37qdecomp->scale_z = 1.f;38qdecomp->skew_xy = 0.f;39qdecomp->skew_xz = 0.f;40qdecomp->skew_yz = 0.f;41qdecomp->shift_x = 0.f;42qdecomp->shift_y = 0.f;43qdecomp->shift_z = 0.f;44qdecomp->quaternion_r = 1.f;45qdecomp->quaternion_i = 0.f;46qdecomp->quaternion_j = 0.f;47qdecomp->quaternion_k = 0.f;48qdecomp->translation_x = 0.f;49qdecomp->translation_y = 0.f;50qdecomp->translation_z = 0.f;51}5253RTC_FORCEINLINE void rtcQuaternionDecompositionSetQuaternion(54struct RTCQuaternionDecomposition* qdecomp,55float r, float i, float j, float k)56{57qdecomp->quaternion_r = r;58qdecomp->quaternion_i = i;59qdecomp->quaternion_j = j;60qdecomp->quaternion_k = k;61}6263RTC_FORCEINLINE void rtcQuaternionDecompositionSetScale(64struct RTCQuaternionDecomposition* qdecomp,65float scale_x, float scale_y, float scale_z)66{67qdecomp->scale_x = scale_x;68qdecomp->scale_y = scale_y;69qdecomp->scale_z = scale_z;70}7172RTC_FORCEINLINE void rtcQuaternionDecompositionSetSkew(73struct RTCQuaternionDecomposition* qdecomp,74float skew_xy, float skew_xz, float skew_yz)75{76qdecomp->skew_xy = skew_xy;77qdecomp->skew_xz = skew_xz;78qdecomp->skew_yz = skew_yz;79}8081RTC_FORCEINLINE void rtcQuaternionDecompositionSetShift(82struct RTCQuaternionDecomposition* qdecomp,83float shift_x, float shift_y, float shift_z)84{85qdecomp->shift_x = shift_x;86qdecomp->shift_y = shift_y;87qdecomp->shift_z = shift_z;88}8990RTC_FORCEINLINE void rtcQuaternionDecompositionSetTranslation(91struct RTCQuaternionDecomposition* qdecomp,92float translation_x, float translation_y, float translation_z)93{94qdecomp->translation_x = translation_x;95qdecomp->translation_y = translation_y;96qdecomp->translation_z = translation_z;97}9899RTC_NAMESPACE_END100101102103