Zu Hauptinhalt springen

 none
SpatialSurfaceMesh VertexPositions und TriangleIndices RRS feed

  • Frage

  • Hallo,

    ich würde mir gerne vom Spatial Mapping der Hololens die Vertexpositionen und die dazu gehörigen Indices ausgeben lassen, so das ich sie auf meinen Laptop als float/double Wert verwenden kann.

    Derzeit versuche ich die Daten über den IBuffer von mesh->VertexPositions->Data und mesh->TriangleIndices->Data zu bekommen und mir als char* bzw. std::vector<float> zu speichern.

    Für den den char* Ansatz nutze ich foldende Funktion:

    char* GetDataFromIBuffer(Windows::Storage::Streams::IBuffer^ container)
    {
        unsigned int bufferLength = container->Length;
        auto dataReader = Windows::Storage::Streams::DataReader::FromBuffer(container);
        Platform::Array<unsigned char>^ managedBytes =
            ref new Platform::Array<unsigned char>(bufferLength);
        dataReader->ReadBytes(managedBytes);
        char * bytes = new char[bufferLength];
        
        for (unsigned int i = 0; i < bufferLength; i++)
        {
            if (managedBytes[i] == '\0')
            {
                bytes[i] = '0';
            }
            else
            {
                bytes[i] = managedBytes[i];
            }
            
        }
            
    
        return bytes;
    }
    

    Die Aussortierung von '\0' ist zum testen beigefügt, da dies bei den Indices vorkommt, was dann auch die Zeichenkette beendet.

    Um auf den std::vector<float> zu kommen nutze ich die Funktionen des IBuffer, container->ReadSingle() und zum durchlaufen container->UnconsumedBufferLength.

    Das Problem ist nun das mit beide Datenausgaben sind sonderlich weiterhelfen. Der char* enthält eine Art UTF-8 Verschlüsselung, wie im Bild am Ende zu sehen und die float Ausgaben sind Dimensional nicht korrekt (Werte von über 100k).

    Hat da zufällig jemand Erfahrung mit und weiß wie ich konkret an die Positionsdaten komme ohne jetzt einen DirectX Buffer anwenden zu müssen, womit ich recht wenig Erfahrung habe?

    Debug Char*

    Donnerstag, 3. Oktober 2019 09:03

Antworten

  • Hallo fraxxz,

    In Deinem Fall sollte der Unterschied zwischen Textcodierung und Datentypen berücksichtigt werden. Du bestätigst selbst, dass es sich bei den Daten in Deinem Puffer nicht um Text handelt, weil Du seltsame Zeichen wie 'ÿ', '^' usw. erhältst, wenn die Daten als Text interpretiert werden. UTF-8 ist eine Methode zur Codierung von Unicode-Text, so hat es nichts mit Binärdaten zu tun. Du müsstest einen Weg finden, um Deine Pufferdaten in den internen Datentyp umzuwandeln. Es sollte dokumentiert werden, woher Du diese Daten hast. Zusätzliche Angaben enthält folgender Thread:
    Decoding of char array data

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.



    Freitag, 4. Oktober 2019 07:32
    Moderator