Cycles: fix for vector math node by Lukas Toenne, thanks.

This commit is contained in:
Brecht Van Lommel
2011-04-28 11:45:06 +00:00
parent 1484169c2f
commit 791f6c94fb
3 changed files with 13 additions and 13 deletions

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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, "" }
};