2016-04-07 6 views
3

Ich versuche, die automatische Belichtung der Kamera zu deaktivieren. Laut der Dokumentation hier, https://developers.google.com/project-tango/apis/c/reference/group/config-params, ist es möglich, die Werte color_mode_auto, color_exp und color_iso in der Konfiguration einzustellen.Wie setze ich die Tango-Kamera Belichtung und ISO-Parameter von C#/Unity

Ich habe versucht, Werte auf das TangoConfig-Objekt direkt nach der Erstellung in TangoApplication.cs zu setzen, aber ich bekomme eine Warnung zurück, dass diese TangoConfig konnte nicht die relevanten Schlüssel (Schlüssel String-Name direkt aus den oben genannten Dokumenten genommen).

Ist es möglich, diese Werte in C# zu setzen, und wenn ja, wo ist der richtige Ort dafür?

+1

Die Konfigurationsänderung vor durchgeführt werden müssen Der Dienst ist verbunden. Machst du das? –

+0

Ich glaube schon, Jason. Ich habe gerade einen anderen Test versucht, wo ich einen Parameter direkt vor dem Aufruf _TangoConnect() (Zeile 506, TangoApplication.cs) gesetzt habe und das ist das Ergebnis, das ich bekomme: TangoConfig.SetBool() Konnte key: config_color_mode_auto nicht mit value setzen : Falsch –

Antwort

1

Möglicherweise müssen Sie ein Plugin schreiben, das den ISO-Wert und die Belichtung auf der Unity-Kamerainstanz festlegen kann. Sie können dies tun, indem Sie eine Instanz der running camera durch eine schwierige Hackerei, die das Auflösen der Kamera-Instanz betrifft, zur Verfügung stellen, und dann sollten Sie in der Lage sein, die ISO-/Belichtungsparameter zu injizieren.

Ein Beispiel für ein solches Plugin würde so etwas wie die Kamera Capture Kit für Unity (https://www.assetstore.unity3d.com/en/#!/content/56673)

Es Ihnen ermöglicht, sein in die Kamera anschließen und Eigenschaften gelten. Hier ist ein Ausschnitt, wie die Kamera aufgelöst wird.

Class clsPlayer = Class.forName("com.unity3d.player.UnityPlayer"); 
    Field fCurrentActivity = clsPlayer.getDeclaredField("currentActivity"); 
    fCurrentActivity.setAccessible(true); 
    com.unity3d.player.UnityPlayerActivity currentActivity = (com.unity3d.player.UnityPlayerActivity)fCurrentActivity.get(null); 
    ret.playerActivity = currentActivity; 

    Field fPlayer = currentActivity.getClass().getDeclaredField("mUnityPlayer"); 
    fPlayer.setAccessible(true); 
    com.unity3d.player.UnityPlayer player = (com.unity3d.player.UnityPlayer)fPlayer.get(currentActivity); 
    ret.player = player; 

    Field f = player.getClass().getDeclaredField("y"); 
    f.setAccessible(true); 
    java.util.ArrayList cameraArrays = (java.util.ArrayList)f.get(player); 
    int sz = cameraArrays.size(); 

Sie werden dann die Parameter innerhalb eines Android-Plugin ändern müssen, damit so etwas wie (von Camera Capture Kit Taken)

Camera.Parameters params = ret.camera.getParameters(); 

    String flat = params.flatten(); 
    String iso_keyword=null; 
    if(flat.contains("iso-values")) { 
     iso_keyword="iso"; 
    } else if(flat.contains("iso-mode-values")) { 
     iso_keyword="iso"; 
    } else if(flat.contains("iso-speed-values")) { 
     iso_keyword="iso-speed"; 
    } else if(flat.contains("nv-picture-iso-values")) { 
     iso_keyword="nv-picture-iso"; 
    } 
    if(iso_keyword == null) { 
     Log.d("Unity", "CameraCaptureKit: It looks like there was no support for iso on the device."); 
     return; 
    } 

    String strSupportedIsoValues = UnityCamera_GetSupportedISOValues(); 
    ArrayList<String> supportedIsoValues = new ArrayList<String>(Arrays.asList(strSupportedIsoValues.split(","))); 
    //ArrayList<String> supportedIsoValues = Arrays.asList(strSupportedIsoValues.split(",")); 
    boolean contains = false; 
    for(String isoValue : supportedIsoValues) { 
     if(isoValue.contains(newValue)) { 
      contains = true; 
      break; 
     } 
    } 
    if(contains == false) { 
     Log.d("Unity", "CameraCaptureKit: failed to set ISO, the value " + newValue + " is not supported. (" + strSupportedIsoValues + ")"); 
     return; 
    } 

    // update the camera. 
    params.set(iso_keyword, newValue); 
    ret.camera.setParameters(params); 

Prost