2017-08-21 2 views
0

私はちょうどGoogle Tangoについて何かを学び始めました。ローカルエリア記述の学習を実装する方法を理解する上でいくつか問題があります。私はドキュメンテーションのハウツーガイドの1つ、ARに仮想オブジェクトを配置したもの、そしてそれらの子猫が置かれた場所をアプリケーションが覚えておきたいと思った。私はUnityからのシーンと、私がAreaDEscriptionのSaveCurrentメソッドを有効にしようとしたスクリプトを添付します。 The scene from Unity次のコードは、主に私は十分評判ポイントを持っていないからハウツー・ガイド私は現在AreaDescriptionローカルエリアの説明:ラーニング

public class KittyUIController : MonoBehaviour 
{ 
Thread thread; 
public GameObject m_kitten; 
private TangoPointCloud m_pointCloud; 

void Start() 
{ 
    m_pointCloud = FindObjectOfType<TangoPointCloud>(); 
    thread = new Thread(Thread123); 
} 

void Update() 
{ 
    if (Input.touchCount == 1) 
    { 
     // Trigger place kitten function when single touch ended. 
     Touch t = Input.GetTouch(0); 
     if (t.phase == TouchPhase.Ended) 
     { 
      PlaceKitten(t.position); 
      thread.Start(); 
     } 
    } 
} 

void PlaceKitten(Vector2 touchPosition) 
{ 
    // Find the plane. 
    Camera cam = Camera.main; 
    Vector3 planeCenter; 
    Plane plane; 
    if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane)) 
    { 
     Debug.Log("cannot find plane."); 
     return; 
    } 

    // Place kitten on the surface, and make it always face the camera. 
    if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f) 
    { 
     Vector3 up = plane.normal; 
     Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized; 
     Vector3 forward = Vector3.Cross(right, plane.normal).normalized; 
     Instantiate(m_kitten, planeCenter, Quaternion.LookRotation(forward, up)); 
    } 
    else 
    { 
     Debug.Log("surface is too steep for kitten to stand on."); 
    } 
} 

void Thread123() 
{ 
    AreaDescription.SaveCurrent(); 
} 

public void OnApplicationQuit() 
{ 
    thread.Abort(); 
} 

}

答えて

1

を保存するための別のスレッドを作成しようとしましたものです私はここに私の答えを投稿するコメントする。あなたは何が働いているのか、何ができていないのかについての詳細を述べるべきです。

まず、this pageから始めます。なぜなら、アプリケーションで適切にAreaLearningを設定する必要があるからです。その後、this codeと対応するAreaLearningシーンの例を調べてください。これは、あなたがしたいと思うだけのことです。

トルゴールやコードにはないものがあります。これは、「Tango AR Camera」の「Tango AR Pose Controller」の「Use Area Description」をチェックする必要があります(または最新のSDKのプレハブを使用している場合はTango Camera)を使用してください。そうしないと、ADFベースフレームに関するオブジェクトが配置されません。

私はそれをすべてを総括しなければならなかった場合は、ワークフローは次のとおりです。

  1. (学習モードかないで)既存のADFをロードするか、新しいものを学び始めます。一度再局在
  2. 既存のADFがロードされている場合、再局在(あなたが学習モードでADFをロードした場合、これは長い時間がかかることがあります)
  3. 、(あなたのCASで子猫を)あなたのオブジェクトを格納するXMLをロードします。通常、XMLはADFのUUIDと同じ名前を持ち、Application.persistentDataPath(Android/data/com.YourApp /ファイル)に格納されます。ロードされたすべてのオブジェクトは、ADF基本フレームに関するものです。
  4. あなたが置いた新しいそれぞれの子猫について、あなたがそれを置くときにタイムスタンプを記録してください。このタイムスタンプでは、子猫とADFベースフレームを置いたときのフレーム間の変形を回復できます。あなたは、XMLへの変換のおかげで保存すると
  5. 、あなたは(例では、変換が_UpdateMarkersForLoopClosuresで計算される)ADFベースフレームに関する子猫のcordinatesを保存することができます。

この例では、保存した後にシーンをリロードするので、AreaDescriptionPicker画面に戻りますが、これはどのように行うかを決めるのはあなた次第です。

私は本当に言うことをもっと知っていません。お役に立てれば。