Changeset View
Changeset View
Standalone View
Standalone View
source/blender/collada/Materials.cpp
| Show First 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | void MaterialNode::set_ior(COLLADAFW::FloatOrParam &val) | ||||
| bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "IOR"); | bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "IOR"); | ||||
| ((bNodeSocketValueFloat *)socket->default_value)->value = ior; | ((bNodeSocketValueFloat *)socket->default_value)->value = ior; | ||||
| } | } | ||||
| void MaterialNode::set_alpha(COLLADAFW::EffectCommon::OpaqueMode mode, | void MaterialNode::set_alpha(COLLADAFW::EffectCommon::OpaqueMode mode, | ||||
| COLLADAFW::ColorOrTexture &cot, | COLLADAFW::ColorOrTexture &cot, | ||||
| COLLADAFW::FloatOrParam &val) | COLLADAFW::FloatOrParam &val) | ||||
| { | { | ||||
| /* Handling the alpha value according to the Collada 1.4 reference guide | |||||
| * see page 7-5 Determining Transparency (Opacity) | |||||
| */ | |||||
| if (effect == nullptr) { | if (effect == nullptr) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (cot.isColor() || !cot.isValid()) { | if (cot.isColor() || !cot.isValid()) { | ||||
| COLLADAFW::Color col = (cot.isValid()) ? cot.getColor() : COLLADAFW::Color(1, 1, 1, 1); | // transparent_cot is either a color or not defined | ||||
| float alpha = val.getFloatValue() * col.getAlpha(); // Assuming A_ONE opaque mode | |||||
| float transparent_alpha; | |||||
| if (cot.isValid()) { | |||||
| COLLADAFW::Color col = cot.getColor(); | |||||
| transparent_alpha = col.getAlpha(); | |||||
| } | |||||
| else { | |||||
| // no transparent color defined | |||||
| transparent_alpha = 1; | |||||
| } | |||||
| float transparency_alpha = val.getFloatValue(); | |||||
| if (transparency_alpha < 0) { | |||||
| // transparency is not defined | |||||
| transparency_alpha = 1; // set to opaque | |||||
| } | |||||
| float alpha = transparent_alpha * transparency_alpha; | |||||
| if (mode == COLLADASW::EffectProfile::RGB_ZERO) { | |||||
| alpha = 1 - alpha; | |||||
| } | |||||
| bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Alpha"); | bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Alpha"); | ||||
| ((bNodeSocketValueFloat *)socket->default_value)->value = alpha; | ((bNodeSocketValueFloat *)socket->default_value)->value = alpha; | ||||
| } | } | ||||
| else if (cot.isTexture()) { | else if (cot.isTexture()) { | ||||
| int locy = -300 * (node_map.size() - 2); | int locy = -300 * (node_map.size() - 2); | ||||
| add_texture_node(cot, -300, locy, "Alpha"); | add_texture_node(cot, -300, locy, "Alpha"); | ||||
| // TODO: Connect node | |||||
| } | } | ||||
| } | } | ||||
| void MaterialNode::set_diffuse(COLLADAFW::ColorOrTexture &cot) | void MaterialNode::set_diffuse(COLLADAFW::ColorOrTexture &cot) | ||||
| { | { | ||||
| int locy = -300 * (node_map.size() - 2); | int locy = -300 * (node_map.size() - 2); | ||||
| if (cot.isColor()) { | if (cot.isColor()) { | ||||
| COLLADAFW::Color col = cot.getColor(); | COLLADAFW::Color col = cot.getColor(); | ||||
| ▲ Show 20 Lines • Show All 179 Lines • Show Last 20 Lines | |||||