static inline QColor properColor(const QString &str) { if (str.isEmpty()) return QColor(); int lalpha = 255; QString lcolorStr = str; if (lcolorStr.at(0) == '#' && lcolorStr.length() == 9) { QString alphaStr = lcolorStr; alphaStr.truncate(3); lcolorStr.remove(0, 3); lcolorStr = "#" + lcolorStr; alphaStr.remove(0,1); bool v; lalpha = alphaStr.toInt(&v, 16); if (!v) lalpha = 255; } QColor lcolor(lcolorStr); if (lcolorStr.contains('#')) lcolor.setAlpha(lalpha); return lcolor; }
void FbxParser::ProcessLight(FbxNode* pNode, std::vector<GS::Light*>& lights) { FbxLight* llight = (FbxLight*) pNode->GetNodeAttribute(); if (!llight) return ; // Get the light color. FbxDouble3 c = llight->Color.Get(); GS::float4 lcolor( c[0], c[1], c[2], 1.0 ); float intensity = llight->Intensity.Get(); if (intensity) lcolor= lcolor*(intensity/100); // to do so far, we only process directional light if (llight->LightType.Get() == FbxLight::eDirectional) { //FbxDouble3 dir = pNode->LclRotation.Get(); FbxAnimEvaluator* lEvaluator = mpFbxScene->GetAnimationEvaluator(); FbxAMatrix lGlobal; lGlobal= lEvaluator->GetNodeGlobalTransform( pNode); FbxVector4 rotation = lGlobal.GetR(); FbxVector4 tran = lGlobal.GetT(); FbxQuaternion quaternion = lGlobal.GetQ(); GS::float4 q(quaternion[0], quaternion[1], quaternion[2],quaternion[3]); GS::float4x4 rotMat = GS::quat_rotation_matrix(q); GS::float4 dir(mul(rotMat, GS::float4(0, 0, -1, 1))); /* dir(0,0,-1); FbxQuaternion quaternion = lGlobal.GetQ(); quaternion. LcLRotation3f quaternion3f(quaternion[0], quaternion[1], quaternion[2], quaternion[3]); LcLTransform3f rot3f(quaternion3f); LcLVec3f rot_dir = dir * rot3f;*/ } }