diff options
Diffstat (limited to 'intern/cycles/render/nodes.cpp')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index ed0be4d7b41..3448209f101 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -2263,6 +2263,8 @@ TextureCoordinateNode::TextureCoordinateNode() add_output("Reflection", SHADER_SOCKET_NORMAL); from_dupli = false; + use_transform = false; + ob_tfm = transform_identity(); } void TextureCoordinateNode::attributes(Shader *shader, AttributeRequestSet *attributes) @@ -2350,7 +2352,14 @@ void TextureCoordinateNode::compile(SVMCompiler& compiler) out = output("Object"); if(!out->links.empty()) { compiler.stack_assign(out); - compiler.add_node(texco_node, NODE_TEXCO_OBJECT, out->stack_offset); + compiler.add_node(texco_node, NODE_TEXCO_OBJECT, out->stack_offset, use_transform); + if(use_transform) { + Transform ob_itfm = transform_inverse(ob_tfm); + compiler.add_node(ob_itfm.x); + compiler.add_node(ob_itfm.y); + compiler.add_node(ob_itfm.z); + compiler.add_node(ob_itfm.w); + } } out = output("Camera"); @@ -2391,7 +2400,10 @@ void TextureCoordinateNode::compile(OSLCompiler& compiler) compiler.parameter("is_background", true); if(compiler.output_type() == SHADER_TYPE_VOLUME) compiler.parameter("is_volume", true); - + compiler.parameter("use_transform", use_transform); + Transform ob_itfm = transform_transpose(transform_inverse(ob_tfm)); + compiler.parameter("object_itfm", ob_itfm); + compiler.parameter("from_dupli", from_dupli); compiler.add(this, "node_texture_coordinate"); |