Blender V5.0
mapping_util.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7#include "kernel/svm/types.h"
8
9#include "util/math.h"
10#include "util/transform.h"
11#include "util/types.h"
12
14
16 const float3 vector,
17 const float3 location,
18 const float3 rotation,
19 const float3 scale)
20{
21 const Transform rotationTransform = euler_to_transform(rotation);
22 switch (type) {
24 return transform_direction(&rotationTransform, (vector * scale)) + location;
26 return safe_divide(transform_direction_transposed(&rotationTransform, (vector - location)),
27 scale);
29 return transform_direction(&rotationTransform, (vector * scale));
31 return safe_normalize(transform_direction(&rotationTransform, safe_divide(vector, scale)));
32 default:
33 return make_float3(0.0f, 0.0f, 0.0f);
34 }
35}
36
MINLINE float safe_divide(float a, float b)
@ NODE_MAPPING_TYPE_POINT
@ NODE_MAPPING_TYPE_VECTOR
@ NODE_MAPPING_TYPE_TEXTURE
@ NODE_MAPPING_TYPE_NORMAL
#define CCL_NAMESPACE_END
ccl_device_forceinline float3 make_float3(const float x, const float y, const float z)
NodeMappingType
CCL_NAMESPACE_BEGIN ccl_device float3 svm_mapping(NodeMappingType type, const float3 vector, const float3 location, const float3 rotation, const float3 scale)
ccl_device_inline float2 safe_normalize(const float2 a)
#define ccl_device
ccl_device_inline Transform euler_to_transform(const float3 euler)
Definition transform.h:201
ccl_device_inline float3 transform_direction(const ccl_private Transform *t, const float3 a)
Definition transform.h:127
ccl_device_inline float3 transform_direction_transposed(const ccl_private Transform *t, const float3 a)
Definition transform.h:149