2017-04-27 59 views
1

我目前正試圖通過使用來自相機的數據作爲環境地圖和採樣燈來實現環境照明。是OnTangoImageAvailableEventHandler()多線程?

我所做的是

private int noOfSamples = 64; 
private int noOfLights = 0; 

public void OnTangoImageAvailableEventHandler(TangoEnums.TangoCameraId cameraId, TangoUnityImageData imageBuffer) 
{ 
    createSamples(imageBuffer); 
} 

然後在createSamples():

public void createSamples(TangoUnityImageData imageBuffer) 
{ 
    if (m_enableEnvironmentalLighting && noOfLights < noOfSamples) 
    { 
      ----- generate samples ------- 
      for (int i = 0; i < noOfSamples; i++) 
      { 
       ---- create light game object, set the position and rgb of the light. 
      noOfLights++; 
      } 
    } 
} 

這工作正常,在Unity編輯器,它只是創造了第一個64個燈,反射和陰影作品精細。但是,當它位於Tango設備上時,除非我刪除noOfLights檢查noOfSamples,否則不會創建光源。

刪除檢查noOfLights < noOfSamples後,在每一幀中都需要再次計算樣本,導致性能很差。是否因爲OnTangoImageAvailableEventHandler方法是多線程的?有沒有辦法只創建前64個燈?

謝謝!

回答

0

創建imageBuffer var來保存緩衝區。在onTango中...只需將緩衝區複製到該目錄即可。然後創建一個方法只在需要信息時詢問存儲的緩衝區。

當你抓取信息時,在本地複製緩衝區並使用它。因爲探戈回調在另一個線程上,並且可能會在長時間運行時導致分段錯誤(如您的樣本測試)

+0

謝謝您的回答!出於好奇,而不是使用圖像緩衝區,會不會實施ITangoVideoOverlayMultithreaded解決這個問題? – dddddddaxing