Ich versuche ein kugelförmiges Strahlenbündel zu erzeugen, um Kollisionen zu überprüfen, aber spezifische Wechselwirkungen treten auf, je nachdem, wo oder wo jeder Strahl auftrifft. Daher verwende ich Strahlen statt etwas einfacher als OverlapSphere
.
Der Grund, warum ich nach einer Kugel suche, ist, weil ich dieselbe Mathematik für meine Strahlen verwenden kann, indem ich sie zu den Eckpunkten der Kugel bewegen lasse. Aber auf jede Weise, die ich für die Herstellung einer Kugel finden kann, sind die Linien den Polen näher gekommen, was sinnvoll ist, da es ziemlich einfach ist. Aber wie Sie sich vorstellen können, ist es nicht so nützlich für mein aktuelles Projekt.
TL; DR: Wie mache ich eine Kugel mit äquidistanten Ecken? Wenn es nicht gleich gut ist, muss es nur knapp schließen. Wenn das passiert, wäre es großartig, wenn Sie angeben könnten, wie groß der Unterschied sein würde und wo, falls zutreffend.
Zusätzliche Hinweise: Ich habe mir dieses und c# math geometry unity3d
Ist dir bewusst, dass die Sphäre , die dir von Unity gegeben wurde, tatsächlich entworfen wurde
?Das heißt, der ganze Daseinszweck der Sphäre, die in Unity eingebaut ist, ist, dass die Punkte ziemlich glatt sind ... ungefähr gleich weit entfernt, wie Sie es formulieren.
Um eine solche Sphäre in Unity zu bringen, mach einfach folgendes:
Sie können dann sofort Zugriff auf die Verts bekommen, wie Sie wissen
%Vor%Beachten Sie, dass Sie einfach überprüfen können, "an welchem Teil der Kugel" sie sich befinden, indem Sie beispielsweise prüfen, wie weit sie von Ihren "Städten" entfernt sind (oder was auch immer) Hemisphäre sind sie .. und so weiter.
Bitte beachten Sie. Zu Ihrem allgemeinen Grund, dies zu tun:
aber spezifische Interaktionen passieren, abhängig davon, wo oder wo jeder Strahl
trifft
Beachten Sie, dass dies mit PhysX nicht einfacher sein kann. (Die vollständig integrierte Spielphysik in Unity.) Tatsächlich habe ich niemals eine Kollision betrachtet, ohne etwas "Spezifisches" zu tun, abhängig davon, "wo es getroffen hat!"
Sie können beispielsweise den Punkt ermitteln, an dem der Kontakt mit Ссылка
hergestellt wurdeEs ist erwähnenswert, dass es absolut unvorstellbar ist, dass man etwas schreiben könnte, das sich der Performance von PhysX in der Gelegenheits-Programmierung nähert.
Ich hoffe, das macht die Dinge einfacher!
Sie könnten eine Icosphäre verwenden. Da die Scheitelpunkte auf gleichseitigen Dreiecken verteilt sind, sind Ihre Scheitelpunkte garantiert äquidistant.
Um die Ikossphäre zu konstruieren, erstellen Sie zunächst ein Ikosaeder und teilen dann die Flächen rekursiv in kleinere Dreiecke auf, wie in diesem Artikel .
So habe ich es in C ++ + OpenGL codiert:
%Vor%So sieht es aus:
[Hinweise]
Wenn Sie 4, 6, 8, 12 oder 20 Scheitelpunkte haben möchten, können Sie genau äquidistante Scheitelpunkte als Platonischen Körper die alle in eine Kugel passen. Die tatsächlichen Koordinaten dieser sollten leicht zu bekommen sein. Für andere Anzahlen von Scheitelpunkten können Sie andere Polyeder verwenden und die Scheitelpunkte so skalieren, dass sie auf einer Kugel liegen. Wenn Sie viele Punkte benötigen, kann eine geodätische Kuppel eine gute Basis sein. Der C60 Bucky-Ball könnte mit 60 Punkten eine gute Basis sein. Für die meisten von ihnen sollten Sie in der Lage sein, 3D-Modelle zu finden, aus denen Sie Koordinaten extrahieren können.
Ich denke, der einfachste Weg, um Punkte auf einer Kugel zu kontrollieren, ist sphärische Koordinaten . Dann können Sie die Position von Punkten um die Kugel herum steuern, indem Sie zwei Winkel (rho und phi) und den Radius verwenden.
Beispielcode zum gleichmäßigen Füllen von Punkten um eine rotierende Kugel:
%Vor%Wie einige Antworten bereits vorgeschlagen haben, verwenden Sie eine ikosaederbasierte Lösung. Die Quelle dafür ist ziemlich leicht zu bekommen (und ich habe einige Male selbst geschrieben), aber ich finde das ausgezeichnete Primitives Pro -Plugin unter vielen anderen Umständen extrem praktisch und benutze immer ihre Sphäre statt der eingebaute Einheit eins.