Ich arbeite mit der Godot Game Engine und habe einen ImmediateGeometry-Knoten, der ein Mesh zeichnet, das ich zur Laufzeit generiere, aber es kommt zu Z-Fighting mit einem anderen Mesh. Wie kann ich die ImmediateGeometry-Vertices näher an die 3D-Kamera bewegen, damit sie nicht in das andere Mesh hineinragen?
Um die Vertices einer ImmediateGeometry näher an die Kamera zu bewegen, kannst du einfach die Position der Vertices im Code ändern. Eine Möglichkeit dies zu tun, ist die Verschiebung der Vertex-Positionen entlang des Kamerablickvektors.

Angenommen, du hast eine Referenz auf deinen Kameraknoten, kannst du die globale Transformation der Kamera abrufen und sie verwenden, um den Kamerablickvektor zu berechnen. Diesen Vektor kannst du dann verwenden, um die Vertex-Positionen in Richtung der Kamera zu verschieben.

Hier ist ein Beispielcode, um dies zu erreichen:

    # Hole eine Referenz auf den Kameraknoten
    var camera = get_node("Camera")

    # Hole die globale Transformation der Kamera
    var camera_transform = camera.global_transform

    # Hole den Kamerablickvektor
    var view_vector = -camera_transform.basis.z

        # Gehe durch jeden Vertex der ImmediateGeometry
        for i in range(immediate_geometry.get_vertex_count()):
            # Hole die aktuelle Vertex-Position
            var vertex_position = immediate_geometry.get_vertex(i)

            # Verschiebe die Vertex-Position in Richtung der Kamera
            vertex_position += view_vector

            # Setze die neue Vertex-Position
            immediate_geometry.set_vertex(i, vertex_position)

Dieser Code geht davon aus, dass der ImmediateGeometry-Knoten ein Kind des Knotens ist, auf dem dieser Code ausgeführt wird. Wenn der ImmediateGeometry-Knoten kein Kind ist, musst du die entsprechende Methode verwenden, um eine Referenz darauf zu erhalten.

Beachte, dass das Verschieben der Vertices in Richtung der Kamera möglicherweise zu anderen Clipping-Problemen führen kann. Du musst möglicherweise mit der Menge, um die du die Vertices verschiebst, experimentieren, um einen Wert zu finden, der für deinen speziellen Anwendungsfall funktioniert.