上图怎样用代码来实现呢?
我看SDK中有Light对象,其下有SetBrightness和SetIntensity等方法可以试试。
这是一个抽象类,该怎样获得这个对象?
怎样设置全局光照?
尝试过如下方法,虽然亮度值改变了,但实际上没效果。
void Test光照() { LightManager& lightManager = LightManager::GetManagerR(); DgnModelP activeDgnModel = ISessionMgr::GetActiveDgnModelP(); LightSetupPtr pLightSetup = lightManager.GetActiveLightSetupPtrForModel(*activeDgnModel); pLightSetup->SetBrightnessMultiplierForView(100); mdlView_updateSingle(0); ViewFlags viewFlags; if (SUCCESS != mdlView_getFlags(&viewFlags, 0)) { return; } // 打开默认光照 viewFlags.ignoreSceneLights = 1; if (SUCCESS != mdlView_setFlags(&viewFlags, 0)) { return; } // 关闭默认光照 viewFlags.ignoreSceneLights = 0; if (SUCCESS != mdlView_setFlags(&viewFlags, 0)) { return; } mdlView_updateSingle(0); }
设置完值后调用LightManager下的SaveSetupToModel保存回去试一下。
测试代码如下:
void adjustViewBrightness() { IndexedViewSetR viewSet = IViewManager::GetActiveViewSet(); IndexedViewportP pViewport = viewSet.GetSelectedViewport(); LightManagerR lightMgr = LightManager::GetManagerR(); DgnModelP pDgnModel = ISessionMgr::GetActiveDgnModelP(); bool bUseModelLight = pViewport->GetViewFlags()->ignoreSceneLights; LightSetupCP pSetup = lightMgr.GetActiveLightSetupForModel(bUseModelLight, *pDgnModel); double brightness = pSetup->GetBrightnessMultiplierForView(); double adaptation = pSetup->GetAdaptationLevelForView(); double newBrightness = brightness * 5; double newAdaptation = adaptation / 5; LightSetupPtr pNewSetup = LightSetup::Create(); pNewSetup->Copy(*pSetup); pNewSetup->SetBrightnessMultiplierForView(newBrightness); pNewSetup->SetAdaptationLevelForView(newAdaptation); lightMgr.SaveSetupToModel(*pNewSetup, true, *pDgnModel); IndexedViewSet::FullUpdateInfo info; info.SetStopEvents(StopEvents(false, true, true, true, false, false)); viewSet.UpdateView(pViewport, DgnDrawMode::DRAW_MODE_Normal, DrawPurpose::Update, info); }
Answer Verified By: 某某 某