Open3d: Der Viewer kann beim Aktualisieren der Geometrie nicht gesteuert werden

Erstellt am 11. Jan. 2019  ·  3Kommentare  ·  Quelle: intel-isl/Open3D

Hallo, ich habe den folgenden Code für die Echtzeitvisualisierung der Punktwolke geschrieben. Es scheint jedoch, dass ich die Ansicht im Visualizer nicht mit der Maus drehen kann, nachdem das Fenster angezeigt wurde. Es kann mit dem folgenden Code reproduziert werden. Ich benutze open3d 0.4. Kann jemand helfen? Vielen Dank.

import open3d
import numpy as np
import time

vis = open3d.Visualizer()
vis.create_window("3D Map")
pcd = open3d.PointCloud()
pts = np.mgrid[1: 6: complex(100), 
      2: 9: complex(100), 
      3: 6: complex(100)].reshape(3, -1).T
a = 1
start = time.time()
coord = open3d.create_mesh_coordinate_frame(1, [0, 0, 0])
coord_x = 0
vis.add_geometry(pcd)
while True:
    start_time = time.time()
    pcd.clear()
    coord.clear()
    pts[:, 0] = pts[:, 0] + 0.1
    pcd.points = open3d.Vector3dVector(pts)
    coord_x += 0.2
    coord = open3d.create_mesh_coordinate_frame(1, [coord_x, 0, 0])
    vis.add_geometry(coord)
    vis.update_geometry()
    vis.poll_events()
    vis.update_renderer()
    if time.time() - start > 30:
        break
    end_time = time.time()
    process_time = end_time - start_time
    print("Updating FPS = {0}".format(1.0 / process_time))
    print('Processing time:', process_time)
vis.destroy_window()
question

Hilfreichster Kommentar

Hallo @taochenshh. Das Problem wurde von vis.add_geometry(coord) in der while-Schleife verursacht. Sobald eine neue Geometrie hinzugefügt wurde, setzt Visualizer den Ansichtspunkt automatisch zurück. Infolgedessen haben Sie das Gefühl, dass die Maussteuerung nicht funktioniert.

Die Schlüsselidee, um dieses Problem zu beheben, besteht darin, vis.add_geometry(coord) nur einmal zu verwenden. Beispielsweise,

#########################################
# original code written by taochenshh
#########################################
while True:
     :
     coord = open3d.create_mesh_coordinate_frame(1, [coord_x, 0, 0])
     vis.add_geometry(coord)
     :

Versuchen Sie es so

###############################
# suggested code
###############################
vis.add_geometry(coord)
while True:
     :
     temp = open3d.create_mesh_coordinate_frame(1, [coord_x, 0, 0])
     coord.vertices = temp.vertices
     coord.triangles = temp.triangles
     :

Mit dieser Änderung konnte ich den Standpunkt ändern.

Alle 3 Kommentare

Hallo @taochenshh. Das Problem wurde von vis.add_geometry(coord) in der while-Schleife verursacht. Sobald eine neue Geometrie hinzugefügt wurde, setzt Visualizer den Ansichtspunkt automatisch zurück. Infolgedessen haben Sie das Gefühl, dass die Maussteuerung nicht funktioniert.

Die Schlüsselidee, um dieses Problem zu beheben, besteht darin, vis.add_geometry(coord) nur einmal zu verwenden. Beispielsweise,

#########################################
# original code written by taochenshh
#########################################
while True:
     :
     coord = open3d.create_mesh_coordinate_frame(1, [coord_x, 0, 0])
     vis.add_geometry(coord)
     :

Versuchen Sie es so

###############################
# suggested code
###############################
vis.add_geometry(coord)
while True:
     :
     temp = open3d.create_mesh_coordinate_frame(1, [coord_x, 0, 0])
     coord.vertices = temp.vertices
     coord.triangles = temp.triangles
     :

Mit dieser Änderung konnte ich den Standpunkt ändern.

Vielen Dank.

@syncle Wie kann ich den Ansichtspunkt in der Mitte des Fensters festlegen, ohne ihn kontinuierlich zurückzusetzen?
Ich habe es mit Punktwolken des Lidars des Autos zu tun, und wenn ich außerhalb des Fensters fahre, verschwinden Punktwolken und gehen aus dem Fensterrahmen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen