Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-07-16 15:15:12 +0300
committerJacques Lucke <jacques@blender.org>2020-07-16 15:15:24 +0300
commitf3ea6a5b28611f693cc595f35f43bb0198450d34 (patch)
tree02123548d7c6a2fa0ac7404b21a60330152527a6
parent3d8f8085fb90f239c6b444cf9435cadd6a1b4ed6 (diff)
Particles: implement more vector math operations
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_vector_math.cc102
1 files changed, 91 insertions, 11 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_math.cc b/source/blender/nodes/shader/nodes/node_shader_vector_math.cc
index 414d05e996a..8301ab4d855 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vector_math.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_vector_math.cc
@@ -160,43 +160,123 @@ static void node_shader_update_vector_math(bNodeTree *UNUSED(ntree), bNode *node
}
}
-static void sh_node_vector_math_expand_in_mf_network(blender::bke::NodeMFNetworkBuilder &builder)
+static const blender::fn::MultiFunction &get_multi_function(
+ blender::bke::NodeMFNetworkBuilder &builder)
{
using blender::float3;
- /* TODO: Implement other operations. */
const int mode = builder.bnode().custom1;
switch (mode) {
case NODE_VECTOR_MATH_ADD: {
static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
"Add", [](float3 a, float3 b) { return a + b; }};
- builder.set_matching_fn(fn);
- break;
+ return fn;
}
case NODE_VECTOR_MATH_SUBTRACT: {
static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
"Subtract", [](float3 a, float3 b) { return a - b; }};
- builder.set_matching_fn(fn);
- break;
+ return fn;
}
case NODE_VECTOR_MATH_MULTIPLY: {
static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
"Multiply", [](float3 a, float3 b) { return a * b; }};
- builder.set_matching_fn(fn);
- break;
+ return fn;
}
case NODE_VECTOR_MATH_DIVIDE: {
static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
"Divide", [](float3 a, float3 b) { return float3::safe_divide(a, b); }};
- builder.set_matching_fn(fn);
- break;
+ return fn;
+ }
+
+ case NODE_VECTOR_MATH_CROSS_PRODUCT: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
+ "Cross Product", float3::cross_high_precision};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_PROJECT: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{"Project", float3::project};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_REFLECT: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float3, float3> fn{
+ "Reflect", [](float3 a, float3 b) { return a.reflected(b); }};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_DOT_PRODUCT: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float3, float> fn{"Dot Product", float3::dot};
+ return fn;
+ }
+
+ case NODE_VECTOR_MATH_DISTANCE: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float3, float> fn{"Distance",
+ float3::distance};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_LENGTH: {
+ static blender::fn::CustomMF_SI_SO<float3, float> fn{"Length",
+ [](float3 a) { return a.length(); }};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_SCALE: {
+ static blender::fn::CustomMF_SI_SI_SO<float3, float, float3> fn{
+ "Scale", [](float3 a, float factor) { return a * factor; }};
+ return fn;
+ }
+ case NODE_VECTOR_MATH_NORMALIZE: {
+ static blender::fn::CustomMF_SI_SO<float3, float3> fn{
+ "Normalize", [](float3 a) { return a.normalized(); }};
+ return fn;
+ }
+
+ case NODE_VECTOR_MATH_SNAP: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_FLOOR: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_CEIL: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_MODULO: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_FRACTION: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_ABSOLUTE: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_MINIMUM: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_MAXIMUM: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_WRAP: {
+ return builder.get_not_implemented_fn();
}
+ case NODE_VECTOR_MATH_SINE: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_COSINE: {
+ return builder.get_not_implemented_fn();
+ }
+ case NODE_VECTOR_MATH_TANGENT: {
+ return builder.get_not_implemented_fn();
+ }
+
default:
BLI_assert(false);
- break;
+ return builder.get_not_implemented_fn();
};
}
+static void sh_node_vector_math_expand_in_mf_network(blender::bke::NodeMFNetworkBuilder &builder)
+{
+ const blender::fn::MultiFunction &fn = get_multi_function(builder);
+ builder.set_matching_fn(fn);
+}
+
void register_node_type_sh_vect_math(void)
{
static bNodeType ntype;