3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich?

Posted By: mao

3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 05:49

Hallo, mich interessiert schon seit längerer Zeit, wie man zwei Körper (3D) aneinander vorbeischrammen lassen kann und die Konzaktzonen an einem der beiden Köper wegrechnen kann. (Simulation von einem Drehmeisel an einem metallischen Werkzeug, der Material abträgt). Leider habe ich noch keine konkrete Ahnung wie ich das genau realisieren könnte. Programmiertechnisch mit C#,ja aber auch mit viel Arbeit. Nun habe ich eine Tipp von Lite-C bekommen. Deshalb erst einma diese Frage hier.
Ich würde gerne so etwas simulieren. Ich habe berechnete Bahnen die ein Körper (der auch in seiner Form fest definiert ist) an einem anderen Körper entlang fahren. Dabei soll von dem zweiten Körper die Kontaktstellen abgerechnet werden.
Hat jemand eine Idee für mich. Wäre das mit euren Tools möglich das man damit eine saubere, flüssige Echtzeitsimulation durchführen kann? Gibt es kostenlose Tools, welche den Materialabtrag vom Drehmeisel am Werstück abrechnen?
Posted By: hopfel

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 11:10

Also "wegrechnen" kannst du imo vergessen, ausser du machst es doppelt und dreifach umständlich,
ich denke die einfachste Möglichkeit wäre, die Vertices eines Modells mit den vertices-funktionen so zu verschieben
als würde es wie eine Abtragung aussehen. Das einzige was du damit dann halt nicht erreichen kannst sind die Teilchen die dabei herunterfallen,
die müsstest du mit Partikeleffekten simulieren.

Sonst kannst du auch tausende kleine Stückchen zu einem Objekt aneinanderreihen und nach und nach abfallen lassen,
das wäre aber wie schon gesagt ein gigantisches Geraffel.
Posted By: ventilator

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 11:33

was ist ein drehmeisel? laugh meinst du eher was wie eine drehmaschine oder eher wie eine cnc-fräse?

das ist auf jedenfall viel arbeit. keine 3d engine die ich kenne bietet von haus aus funktionen mit denen sowas leicht umgesetzt werden kann.

eine drehmaschine zu simulieren wäre einfacher, weil die formen die herauskommen können beschränkter sind. da müsste man nur immer dynamisch aus einer 2d kurve einen rotationskörper berechnen.

für eine cnc-fräse wären schätze ich boolsche operatoren notwendig, wie es sie in komplexen 3d-modellierungsprogrammen gibt.
Posted By: mao

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 11:35

Also, eine Schleifscheibe mit einer vorgegeben Form, schleift eine gedrallte Nut in einen Zylinder. Geht das mit Lite-C, oder doch lieber mir C# / C++ realisieren??
Posted By: ventilator

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 11:49

ich kann es mir immer noch nicht ganz vorstellen, aber auf jedenfall musst du ein mesh manipulieren. die programmiersprache ist nicht so wichtig. nimm halt eine die dir liegt.

edit: wenn beliebige konkave formen möglich sein sollen, dann wird es wahrscheinlich nicht reichen nur vertices zu verschieben.
Posted By: Neoxit

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 13:58

Quote:
ich denke die einfachste Möglichkeit wäre, die Vertices eines Modells mit den vertices-funktionen so zu verschieben
als würde es wie eine Abtragung aussehen


Genau so würde ich es machen. Nur muss das Modell viele Vertices haben um die Genauigkeit darin ebenfalls zu Simulieren. Je nach dem wie viel die Engine am Ende Rendern soll. Wenn es sich im Prinzip nur um das Werkstück handelt welches gerendert wird sollte sowas relativ gut Möglich sein, nur veränderst du quasi die Hülle des Objektes und fräst keine Vertices weg, denn wie wir alle wissen ist ein 3D Modell innen, immer Hohl wink

Gruß Neoxit
Posted By: mao

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 14:08

Also ihr denkt dann, das mit Lite-C zu realisieren. Gibt es dazu ein einfaches Beispiel, damit ich mir mal etwas für den Einstieg habe. Ich habe mir gestern einaml die 25 Einstiegsbeispiele angesehen.
Wenn ich mal zuerst ein Beispiel zum rumprobieren hätte. Die VErtices sind ja viele Eckpunket eentlag der Eindringung von meiner Scheiba am Zylinder. Wie gehe ich da vor bei der Berechnung (damit ich eine Vorstellung davon bekomme, gibts da schon MEthoden für ??). Es soll aber auch nicht der Eindruck erweckt werden, das andere alles für mich erledigen sollen.
Posted By: Neoxit

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 14:15

Ein genaues Beispiel dafür kann ich dir nun selber nicht geben, da ich mit Vertices bisher nicht viel gearbeitet habe. Aber die Verticepunkte sind im Prinzip ja Punkte in dem Koordinatensystem im Modell, diese müsste man ja aufgrund von "Kollision" o.ä. dann verschieben / abändern können.

Aber ob das nun genau so funktioniert kann ich dir nicht sagen, daher halte ich mich doch eher etwas im hintergrund.
Posted By: Tempelbauer

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 14:38

Also, wenn das ganze eine reine Animationsszene werden soll (für einen Film, eine Präsentation o.ä.) ohne Interaktivität, dann würde ich von Gamestudio eher abraten und dir ein höherwertiges 3D-Animationsprogramm wie Maya / Lightwave ans Herz legen (Blender müsste das auch können). Da kannst du mit viel mehr Vertices / Polygonen arbeiten, da du die Animation Bild für Bild erstellst und speicherst und dann zu einem Video zusammenschneidest. Und Programmieren brauchst du dann auch nichts, das lässt sich dann alles grafisch im Modellierungsprogramm erstellen. Zudem sparst du dir den Stress mit dem hin und herkonvertieren zwischen Datei-Formaten und Import von Animationszyklen.

Wenn du aber Benutzerinteraktion dabei haben willst (z.b. der Benutzer schiebt den Drehmeisel oder was weiß ich gegen ein Objekt), wäre Gamestudio durchaus eine denkbare Alternative
Posted By: Harry Potter

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 18:57

Für eine echte Werkzeug-SIMULATION wirst Du, fürchte ich, mit Vertex-Verschiebungen nicht sehr weit kommen. Weil echte Werkstoffe haben ja ein Volumen, und unterschiedliche Material-Eigenschaften (z.B. wird ein Stück Holz in Rinden-Nähe anders aussehen und eine andere Härte haben als im Kern). 3D-Modelle sind immer hohl, und haben kein Volumen.

Du kannst natürlich eine Werkstück-Oberfläche aus sehr vielen Polygonen/Vertices erstellen, und diese dann programmgesteuert verschieben/wegfräsen. Aber erstens kannst Du damit nicht ALLE Formen darstellen (DU kannst höchstens Vertiefungen oder Erhöhungen heraus-fräsen, aber Du wirst z.B. niemals damit eine komplexe Holzfigur schnitzen können), und zweitens leidet nach der Verformung die Optik darunter. Also die Textur (z.B. Holzoberfläche) würde dann total verzerrt aussehen.

Der einzige sinnvolle Weg wäre meiner Meinung nach eine Technik, die mit Voxel arbeitet. Eigentlich eine uralte Technik, mit der die ersten 3D-Spiele gemacht wurden.

Hier zum besseren Verständnis ein 3D-Modell aus normalen Vertices, und ein Voxel-Modell.


Im Prinzip besteht dabei Dein Werkstück aus sehr vielen "Atomen", und hat somit auch ein Volumen. Jedes "Atom"/Voxel könnte z.B. in 3DGamestudio mit Hilfe eines kleinen runden Sprites dargestellt werden, das sich immer automatisch zur virtuellen Kamera hin dreht. Indem Du den einzelnen Sprites verschiedene Farben gibst, kannst Du dann auch z.B. die Maserung von Holz simulieren.

Naja, und jetzt brauchst Du dann nur noch für jedes einzelne Voxel-Sprite eine Kollissionsprüfung machen. Sobald ein Voxel Kontakt mit einem Werkzeug hat, wird es unsichtbar (oder Du kannst auch berechnen, dass es physikalisch korrekt wegfliegt).

Allerdings wird das ganze sehr sehr rechenintensiv werden, wenn Du sehr viele Voxel-Sprites verwendest. Damit Du das in Echtzeit darstellen kannst, wirst Du Dir wahrscheinlich irgendetwas überlegen müssen, um das ganze zu optimieren (z.B. Kollissionsprüfung nur für Voxel, die sich nahe der Oberfläche befinden). Aber ich denke, so ca. 200.000 Voxel dürften kein Problem sein, und ich glaube, damit könnte man schon ganz brauchbare Werkstücke herstellen. Das schwierigste wird wahrscheinlich sein, Dir einen Programmcode zu überlegen, der die einzelnen Voxel-Sprites so nebeneinander anordnet, dass sie die Form eines Werkstückes bekommen. Aber ein rechteckiges Werkstück ist da ziemlich einfach herzustellen.

Also Du hast Dir da eine sehr schwere Aufgabe gestellt. Aber machbar ist sie. Die Programmiersprache ist dabei eigentlich egal. Wenn Du es in 3D und Echtzeit machen willst, ist 3DGS und Lite-C dafür nicht so schlecht geeignet.

Grüße,
Thomas
Posted By: mao

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/22/11 22:58

Hallo Thomas, das ist nun mal etwas aussagekräftiges. Bin über den Voxel-Link dann weitergekommen zu CSG. Aber zuerst zu Voxel. Damit kann ich mir ein Volumenmodell aufbauen, das sozuagen aus Kugeln oder Quadern besteht. Die wird man in der Größe bestimmen können. Je kleiner die Bausteine, umso besser die Oberfläche (da denkst du das es mit MEsh Probleme gibt). Jedes Voxel kann somit separat bei Kollision ausgeblendet werden. Gibt es für die Kollsionsprüfung fertige Methoden?
Nun, noch ein paar Worte zu CGS. Das benutzen wohl viele Programme (CAD) im Hintergund (Volumenkörper die sich überschneiden, wird die Schnittmenge subtrahiert oder ...). Was ich aber nirgends dazu gefunden habe: Kann ich mein Werkzeug in Echtzeit am Werkstück arbeiten lassen und ich somit den Fortschritt der Bearbeitung sehen? Oder ist das nur für feststehende Anwendungen? ICH meine ansonsten müßte mann das Werkzeug doch einfach 5 Pixel weiterschiebn und dann wieder das Material der Überschneidung der beidne Körper abrechnen? Kannst du mir dazu noch etwas sagen?
Posted By: Harry Potter

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/23/11 00:34

Originally Posted By: mao
Aber zuerst zu Voxel. Damit kann ich mir ein Volumenmodell aufbauen, das sozuagen aus Kugeln oder Quadern besteht. Die wird man in der Größe bestimmen können. Je kleiner die Bausteine, umso besser die Oberfläche

Zunächst einmal: ich würde eher Quader oder Würfel verwenden, anstatt Kugeln. Weil eine Kugel besteht ja aus sehr vielen Polygonen (Dreiecken). Und je mehr Polygone die Grafikkarte darstellen muss, desto langsamer wird das ganze dann. Daher sollte man darauf achten, möglichst wenige Polygone zu verbrauchen. Ein Würfel braucht zum Beispiel nur 12 Polygone. Du könntest also in Gamestudio ein Würfel-Modell erstellen, und dieses dann z.B. zehntausend mal kopieren (mit ENT_CREATE), und Dir aus den vielen kleinen Würfeln ein Werkstück zusammenbauen. Je kleiner die Würfel sind, desto realistischer (weniger eckig) sieht das ganze dann natürlich aus.

Oder, wie schon gesagt, Du könntest auch Sprites verwenden, die sich automatisch immer in Richtung Bildschirm drehen. Das verbraucht dann noch weniger Polygone, weil ein rechteckiges Sprite im Prinzip nur aus 2 Polygonen besteht. Also wie ein flaches Rechteck. Da es sich aber immer zum Spieler hin dreht, sieht man immer die Vorderseite. Wenn Du also sehr kleine "Voxels" verwenden möchtest, sodass man die Form bzw. das Drehen nicht so stark sieht, wäre das möglicherweise die schnellere Variante als die Würfel mit 12 Polygonen?! Müsste man mal ausprobieren.


Originally Posted By: mao
Jedes Voxel kann somit separat bei Kollision ausgeblendet werden. Gibt es für die Kollsionsprüfung fertige Methoden?

Ja, gibt es. Die 3D-Models ("Voxel"-Objekte) könnten auf Berührung durch ein anderes Objekt (Werkzeug) reagieren, und zum Beispiel gelöscht werden (oder davonfliegen, oder was auch immer.

Du könntest das ganze sogar noch optimieren, indem Du Dein Werkstück am Anfang aus nur sehr wenigen Wüfeln zusammenbaust. Und sobald ein Würfel von einem Werkzeug berührt wird, wird der große Würfel durch viele kleinere Würfel ersetzt. Also z.B. könnte ein Würfel mit 8 cm Kantenlänge durch 4 Würfel mit jeweils 4 cm Kantenlänge ersetzt werden. Du kannst also dynamisch ein großes Würfel-Objekt löschen, und 4 halb so große Würfel-Modelle an der Position des alten Würfels neu erstellen. Danach könntest Du abfragen, ob von den kleineren Würfeln einer berührt wurde, und wenn ja, könntest Du diesen Würfel wieder durch 4 halb so große Würfel ersetzten. Auf diese Art und Weise könntest Du die Stelle, an der das Werkzeug ansetzt, dynamisch verfeinern.


Originally Posted By: mao
Nun, noch ein paar Worte zu CGS. Das benutzen wohl viele Programme (CAD) im Hintergund (Volumenkörper die sich überschneiden, wird die Schnittmenge subtrahiert oder ...). Was ich aber nirgends dazu gefunden habe: Kann ich mein Werkzeug in Echtzeit am Werkstück arbeiten lassen und ich somit den Fortschritt der Bearbeitung sehen?

CGS? Ich nehme an, Du meinst CSG?!? In 3DGS gibt es zwar eine Funktion "CSG Subtract", aber die kann man meines Wissens nach nur im Editor verwenden - zum Modellieren der Levels. Also nicht zur Laufzeit Deines Programmes. Für Deine Simulation kannst Du das also vergessen.

Wenn ich so eine Werkzeug-Simulation programmieren müsste, würde ich dafür die Variante mit den Würfeln verwenden. Und ich würde es mit Gamestudio machen, weil es da viele Funktionen gibt, die die Arbeit erleichtern (für Kollissionsprüfungen, Bewegung der Werkzeuge, Sound, Kamerasteuerung, Menü-Steuerung, etc. etc.).
Posted By: mao

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/23/11 05:21

Thomas , ich danke dir für deine ausgezeichnete und schnelle (Idee) Antwort. Ja, ich meine CSG, sorry. Ich werde mich nun mal mit Geamestudio beschäftigen (Lite-C). Normalerweise programmiere ich in C#, aber evtl. kann man da etwas miteinander verzahnen. Jetzt brauch ich noch den richtigen Einstieg, ien eÜbersicht über Lite-C und dann mal erste kleine Tests (Körper konstruieren).
Ich denke, dass man mit GameStudio (Lite-C) genauso auch messen könnte, (Werkzeuglänge, Durchmesser) etc.
Posted By: Damocles_

Re: 3D-Werkzeugsimulatior mit Lite-C oder Gamestudio möglich? - 02/24/11 20:00

Wenn Du doch eh mit C# arbeitest, könntest Du Dir auch OpenGL
anschauen, und dort dynamisch Modelle in Echtzeit erzeigen / manipulieren.
Da hast Du wesentlich mehr flexieble Kontrolle über die
Vertecies und Polygone.

Wenns nur um den Showeffekt geht kannst Du das in 3dgs nachbasten
mit den genannten Methoden.
Aber umfangreiches Ändern der Polygone des Modells im Detail
wird schwierig werden.


Voxel haben den Nachteil, daß das Objekt natürlich legomäßig
aussieht. Oder Du so viele Voxel brauchtst, das die Performance
abkackt.
Wobei dei Idee, die Detailbereiche mit kleineren Voxeln
darzustellen sicher hilfreich für die Performance ist.
(Minecraft ist im Prinzip ja so eine "Voxel Welt Werkzeigsimulation")

Es gibt viele Wege das Problem anzugehen. Du solltest die
Methode nehmen, mit der Du die meiste Erfahrung hast.

-----

Ich seh also 2 Optionen:
1- Du bist mathematisch sehr versiert, oder kennst nen Mathenerd,
und berechnest die Position der Vertecies mittels
funktionen.
2- Du machst die einfachere Voxeltechnik. und schreibst
kluge Performance-algorythmen.
© 2024 lite-C Forums