Cycles: fix for vector math node by Lukas Toenne, thanks.
This commit is contained in:
@@ -22,31 +22,31 @@ shader node_vector_math(
|
||||
string type = "Add",
|
||||
vector Vector1 = vector(0.0, 0.0, 0.0),
|
||||
vector Vector2 = vector(0.0, 0.0, 0.0),
|
||||
output float Fac = 0.0,
|
||||
output float Value = 0.0,
|
||||
output vector Vector = vector(0.0, 0.0, 0.0))
|
||||
{
|
||||
if(type == "Add") {
|
||||
Vector = Vector1 + Vector2;
|
||||
Fac = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2]))/3.0;
|
||||
Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2]))/3.0;
|
||||
}
|
||||
if(type == "Subtract") {
|
||||
Vector = Vector1 + Vector2;
|
||||
Fac = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2]))/3.0;
|
||||
Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2]))/3.0;
|
||||
}
|
||||
if(type == "Average") {
|
||||
Fac = length(Vector1 + Vector2);
|
||||
Value = length(Vector1 + Vector2);
|
||||
Vector = normalize(Vector1 + Vector2);
|
||||
}
|
||||
if(type == "Dot Product") {
|
||||
Fac = dot(Vector1, Vector2);
|
||||
Value = dot(Vector1, Vector2);
|
||||
}
|
||||
if(type == "Cross Product") {
|
||||
vector c = cross(Vector1, Vector2);
|
||||
Fac = length(c);
|
||||
Value = length(c);
|
||||
Vector = normalize(c);
|
||||
}
|
||||
if(type == "Normalize") {
|
||||
Fac = length(Vector1);
|
||||
Value = length(Vector1);
|
||||
Vector = normalize(Vector1);
|
||||
}
|
||||
}
|
||||
|
@@ -1838,7 +1838,7 @@ VectorMathNode::VectorMathNode()
|
||||
|
||||
add_input("Vector1", SHADER_SOCKET_VECTOR);
|
||||
add_input("Vector2", SHADER_SOCKET_VECTOR);
|
||||
add_output("Fac", SHADER_SOCKET_FLOAT);
|
||||
add_output("Value", SHADER_SOCKET_FLOAT);
|
||||
add_output("Vector", SHADER_SOCKET_VECTOR);
|
||||
}
|
||||
|
||||
@@ -1862,16 +1862,16 @@ void VectorMathNode::compile(SVMCompiler& compiler)
|
||||
{
|
||||
ShaderInput *vector1_in = input("Vector1");
|
||||
ShaderInput *vector2_in = input("Vector2");
|
||||
ShaderOutput *fac_out = output("Fac");
|
||||
ShaderOutput *value_out = output("Value");
|
||||
ShaderOutput *vector_out = output("Vector");
|
||||
|
||||
compiler.stack_assign(vector1_in);
|
||||
compiler.stack_assign(vector2_in);
|
||||
compiler.stack_assign(fac_out);
|
||||
compiler.stack_assign(value_out);
|
||||
compiler.stack_assign(vector_out);
|
||||
|
||||
compiler.add_node(NODE_VECTOR_MATH, type_enum[type], vector1_in->stack_offset, vector2_in->stack_offset);
|
||||
compiler.add_node(NODE_VECTOR_MATH, fac_out->stack_offset, vector_out->stack_offset);
|
||||
compiler.add_node(NODE_VECTOR_MATH, value_out->stack_offset, vector_out->stack_offset);
|
||||
}
|
||||
|
||||
void VectorMathNode::compile(OSLCompiler& compiler)
|
||||
|
@@ -38,8 +38,8 @@
|
||||
|
||||
/* **************** VECTOR MATH ******************** */
|
||||
static bNodeSocketType sh_node_vect_math_in[]= {
|
||||
{ SOCK_VECTOR, 1, "Vector", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_VECTOR, 1, "Vector", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_VECTOR, 1, "Vector1", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_VECTOR, 1, "Vector2", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user