Exemple #1
0
	void FbxUtil::LoadLight(const SceneNode::Ptr &ntNode, FbxNode *fbxNode)
	{
		FbxLight *fbxLight = static_cast<FbxLight*>(fbxNode->GetNodeAttribute());

		LightType type;

		switch (fbxLight->LightType.Get())
		{
		case FbxLight::EType::eDirectional:
			type = LightType::DIRECTIONAL;
			break;
		case FbxLight::EType::ePoint:
			type = LightType::POINT;
			break;
		case FbxLight::EType::eSpot:
			type = LightType::SPOT;
			break;
		default:
			LOGW << "Unsupported light type!";
			return;
		}

		Light::Ptr light = Light::Create();

		FbxDouble3 color = fbxLight->Color.Get();
		light->SetType(type);
		light->SetColor(Color((float)color.mData[0], (float)color.mData[1], (float)color.mData[2]));
		light->SetIntensity((float)fbxLight->Intensity.Get() * m_ScaleFactor);
		light->SetInnerAngle(Angle::DegToRad * (float)fbxLight->InnerAngle.Get());
		light->SetOutterAngle(Angle::DegToRad * (float)fbxLight->OuterAngle.Get());
		light->SetFalloff((float)fbxLight->FarAttenuationEnd.Get() * m_ScaleFactor);
		light->SetRadius((float)fbxLight->DecayStart.Get() * m_ScaleFactor);
		light->CalculateAABB();
		LOGD << fbxLight->GetName();

		ntNode->AddComponent(light);
	}