Wie kann ich mit PhysX vorhersagen, wo prozedurale Geländekollisionsformen generiert werden müssen?


8

In dieser Situation habe ich Geländehöhenwerte, die ich prozedural generiere. Zum Rendern verwende ich die Position der Kamera, um eine Höhenkarte mit geeigneter Größe zu erstellen. Für Kollisionen müssen jedoch Höhenfelder in Bereichen generiert werden, in denen sich Objekte schneiden können.

Meine derzeitige mögliche Lösung, die naiv sein kann, besteht darin, alle "wachen" Physikakteure zu durchlaufen, ihre Grenzen / Ausmaße und Geschwindigkeiten zu verwenden, um Kugeln zu erzeugen, in denen sie sich nach einer Physikaktualisierung befinden können, und dann Höhenwerte für Bereiche zu generieren, die gruppierte Gruppen umfassen von Schauspielern. Ein Großteil dieser Daten wird jedoch wahrscheinlich bereits von PhysX berechnet.

Gibt es eine API, möglicherweise eine Reihe von Abfragen, sogar Rückrufe aus dem räumlichen System, mit denen ich vorhersagen kann, wo Geländehöhenwerte benötigt werden?


Mir scheint, Sie haben bereits die beste Lösung codiert. Sie sind sich nicht sicher, wie PhysX funktioniert. Vielleicht können Sie stattdessen Begrenzer in Form eines Begrenzungsrahmens in Ihren Geländestücken haben und die Kollisionsformen generieren, wenn etwas in diesen Kasten eintritt (ihn auslöst). Grundsätzlich, was Sie tun, aber umgekehrt und mit PhysX-Kollisionsmathematik.
Aeroson

Antworten:


0

Wenn Sie aus Ihren Daten Netze zum Rendern generieren, können Sie das Netz als Collider-Netz an PhysX weitergeben. Dies bedeutet, dass physX und Ihr Renderer auf dasselbe Objekt verweisen, das den Overhead schneidet.


1
Es ist nicht angemessen anzunehmen, dass sichtbares Gelände das einzige Gelände ist, mit dem Objekte kollidieren können. Das Problem besteht darin, schnell zu identifizieren, mit welchem ​​Geländebereich kollidiert werden kann, damit bei Bedarf Kollisionsformen für sie generiert werden können.
Sion Sheevok

1
en.wikipedia.org/wiki/Octree Teilung der Welt Daten bis in Würfel schneiden und „Slicing“ sie, wo immer Sie eine kostenlose Collidable Einheit haben Sie dann Anrufe an die Geländedaten in einem sehr kleinen Gebiet mit sehr wenig Aufwand machen. Hier ist ein Beispiel für die Verwendung von Quadtrees für 2D-Partikelkollisionen, aber das Konzept ist für Octrees dasselbe, jedoch mit einer zusätzlichen Dimension. Dies würde auch ermöglichen, dass einzelne frei kollidierbare Objekte miteinander kollidieren. youtube.com/watch?v=fuexOsLOfl0 Sie können dann sehr kleine Collider aus den Geländedaten in der Nähe der freien kollidierbaren Objekte generieren
That Homeless Guy

1
Ich bin mit Octrees und räumlicher Partitionierung vertraut - PhysX macht das bereits intern. Ich benötige Informationen von PhysX zu seinem räumlichen Partitionierungssystem, damit ich Geländekollisionsformen dort generieren kann, wo sie erforderlich sind, da das Gelände prozedural ist.
Sion Sheevok

1
Sie verpassen den Punkt. Ich generiere Daten für das Gelände. Ich probiere diese Daten aus, um ein Höhenfeld zu erstellen. Ich muss vorhersagen, wo Geländedaten benötigt werden. Wenn sich ein Objekt bei (-100.0, -100.0) befindet, muss ich ein Gelände in der Nähe von (-100.0, -100.0) erzeugen, bevor ich die Physik simuliere. Ich muss auch eine Region des Geländes erzeugen, die groß genug ist, sonst kann sich ein Objekt über eine Region hinaus bewegen und unter der Stelle landen, an der sich das Gelände befinden würde, wenn es in dieser Region erzeugt worden wäre. PhysX muss solche Informationen bereits verfolgen, um mögliche Kollisionen vorhersagen zu können - ich benötige diese Informationen. Ich weiß nicht, ob / wie ich das machen soll.
Sion Sheevok

1
Das ist die Umgehungsmethode, die ich in meiner Frage skizziert habe, ja. Ich frage, ob ich die Arbeit bekommen kann, die PhysX bereits erledigt hat, damit ich nicht redundant die gleichen Ergebnisse berechne. Ich habe noch keinen Weg gefunden, bin aber mit der PhysX-API ohne Lizenzierung nicht so vertraut.
Sion Sheevok
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.