Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.01.2010, 12:10

Von Modellerstellung zum Programmierung

Hi Leute,
eins vorweg... zur Zeit nutze ich QtCreator als IDE und programmiere mit C++ (mit Qt4-Bibliothek) für Linux und Windows (deshalb OpenGL).

Ich bin gerade dabei die OpenGL-tuts durchzuarbeiten und mir macht es viel Spaß dabei. :) So langsam mache ich Gedanken wie die 3D-Modelle erstellt werden und ich habe mich im Internet erkundigt.

Ich habe 2 interessante Programme gefunden: Horde3D und Blender. Momentan neige ich eher zu Blender.

Da ich nicht auf falschen Pferd setzen möchte ich erstmal wissen ob ich soweit richtig verstanden habe und bitte Euch um Korrigierung falls ich falsch liegen sollte:
(Angenommen ich nutze Blender)

A)
Laut Website von Blender steht da "Supports collision detection". Heisst das, daß ich mit Blender Daten für Kollisionen "füttern" kann womit ich in der Kollisioncheck von meiner Programm durchführen kann (die ich natürlich selber oder mit Hilfe Bibliothek (z.B. PhysX) implementieren muß). Habe ich richtig verstanden?

B)
Wie kommen die Daten (3D Infos und evtl. Kollisiondaten) von Blender in meinen Programm? Ich nehme an, ich muß die Daten von Blender exportieren und in meinen Programm muß ich ein "Model-Loader" implementieren der die exportierte Dateien lädt.

C)
Wo werden die Animationen (z.B. der Figur läuft) implementiert? In Blender? In meinen Programm? Oder sogar beides?

Versteht mich nicht falsch, ich möchte natürlich nicht überstürzen und gleich Doom4 implementieren. ;) Sondern ich fange erstmal klein an und probiere mit kleinen rundenbasierte Spiel (eher ein Spielbrett mit Figuren ala Starquest ;) ) bevor ich steigere. Mir geht in diese Thread hauptsächlich darum, daß ich weiß in welche Richtung ich weitergehen soll. Nicht daß ich auf falschen Pferd sitze und am Ende von Tutorien (nach 2Monaten) erfahre daß die Software/bzw. erlente Technik für Spieleentwicklung unbrauchbar ist (z.B. weil es ausschließlich für Filme gedacht ist). Oder daß ich wochenlang mit Animationen innerhalb von Blender beschäftige, und beim Programmieren feststelle daß die Animationen von Blender nicht in meinen Programm verwendet werden kann.

Übrigens... Literaturempfehlungen sind willkommen. Ich bin lernwillig. ;)

cu Floh

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

2

26.01.2010, 12:42

A) Blender ist als Umonst-Programm sehr beliebt. In meiner Firma hat man ausschließlich mit 3D Studio gearbeitet, aber naja, ist halt nicht gerade billig.
B) Bei 3DS konnte man einfach Morph-Daten exporierten lassen. Direkt mit Bones anzufangen wäre vielleicht für das erste Projekt etwas hardcore :-). Ich denke, dass das mit Blender auch geht.
C) Du machst sie mit Blender und exportierst entweder als Bone-Animation oder Morph-Daten, die du dann im eigenen Programm animieren kannst. Wie schon in B gesagt... fang mit Morph an und wenn das für dich "easy going" ist, dann nimm die Bones :-). Sieht beides gleich gut aus, nur Morphing kostet halt viel Speicher und Bandbreite... dafür weniger Leistung beim Zeichnen selbst, bei den Bones genau anders rum ;-).

Zu der Kollision:
Da gibt's viele Ansätze. Ein sehr häufig genutzter ist, dass das Model aus simplen mathematischen Objekten (Kugel, Zylinder, Würfel) nachgebaut wird, so dass dann später nicht auf Dreiecksebene sondern deutlich schneller mit Line Vs. Sphere, Line Vs. Cube, Line Vs. Cylinder, Sphere Vs. Sphere etc. pp. die Kollision getestet werden kann.
Wenn man das automatisieren will, ist es eine recht gute Methode einfach Würfel, Zylinder und Kugel zu testen und anschließend den der 3 Typen zu nehmen, der das geringste Volumen hat.

LG
Alyx

3

26.01.2010, 13:24

Vielen Dank! :)

Zitat von »"Alyx"«


B) Bei 3DS konnte man einfach Morph-Daten exporierten lassen. Direkt mit Bones anzufangen wäre vielleicht für das erste Projekt etwas hardcore :-). Ich denke, dass das mit Blender auch geht.
Keine Sorge, wie gesagt ich will nicht gleich Doom4 programmieren sondern erstmal ein einfaches Brettspiele wo die Figuren erstmal statisch sind. Und erst wenn das Spiel fertig ist, erweitere ich die Source so daß die Spielfiguren auf der Spielbrett auch animiert.

Zitat

C) Du machst sie mit Blender und exportierst entweder als Bone-Animation oder Morph-Daten, die du dann im eigenen Programm animieren kannst. Wie schon in B gesagt... fang mit Morph an und wenn das für dich "easy going" ist, dann nimm die Bones :-).
Ok, danke. Von Morphing wusste ich nichts. Hab diese Begriff gleich notiert und werde mal darüber lesen. Bis jetzt hatte ich nur von Bones gelesen.

Zitat

Zu der Kollision:
Da gibt's viele Ansätze. Ein sehr häufig genutzter ist, dass das Model aus simplen mathematischen Objekten (Kugel, Zylinder, Würfel) nachgebaut wird, so dass dann später nicht auf Dreiecksebene sondern deutlich schneller mit Line Vs. Sphere, Line Vs. Cube, Line Vs. Cylinder, Sphere Vs. Sphere etc. pp. die Kollision getestet werden kann.
Ist es das, was ich ne 3D-Bild gesehen habe wo ein Figur in viele durchsichtige Würfeln mit verschiedene Größe (je nachdem wie groß die einzelne Objekte sind) "drin" ist und die Kollisioncheck wird mit diese Würfeln als Daten verwendet.
Stimmts?

cu Floh

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

4

26.01.2010, 13:36

Genau. :-)

Bei Egoshootern & Co. wird meistens ein Referenz-Modell aus möglichst wenigen "Hitzones" in Form von Kugeln/Würfeln etc. erstellt. Später wird dann für jedes echte Modell praktisch nur noch die Skalierung definiert, sprich Oberkörperlänge, Beinlänge, Armlänge, Kopfgröße etc. pp., so dass dann unabgängig vom Model die selbe Kollisions- bzw. Trefferberechung genutzt werden kann.

Zum Morphing:
Dabei werden quasi einfach stumpf die "Einzelbilder" der Animation exportiert. Im Programm dass diese nutzt, werden die einzelnen Vertices für das aktuelle Bild einfach interpoliert, sprich Pseudocode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
double Frame = (GetTickCount()-AniStartTickCount)*24.0/1000.0;
int FrameI = (int)Frame, // frame 1
     FrameN = Frame+1;
double FPerc = Frame-(double)FrameI,
          APerc = (1.0-FPerc);

// für alle Vertices:
Vector3D vpos = (Frame[FrameI].vPos*APerc+Frame[FrameN].vpos*FPerc),
vnormal = (Frame[FrameI].vNormal*APerc+Frame[FrameN].vNormal*FPerc);

usw..


LG
Alyx

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

5

26.01.2010, 18:18

"Blender unterstützt Kollision" bezieht sich ausschließlich auf die Blender-Game-Engine. Um Kollisionserkennung und ggf. Bouding Volumes oder Kollisionsmodelle musst du dich noch selbst kümmern.

Als Modelformat würde ich ein anderes außer 3ds empfehlen, da das nicht gerade optimal verwendet wird. In diesem Unterforum wurde allerdings bezüglich dem Thema erst kürzlich ein Thread erföffnet, schau da mal rein :)

Mit Blender kannst du auf verschiedenste Weise animieren. Wie das exportiert wird hängt wieder vom Modelformat ab. Grundsätzlich unterscheidet man Bone-Animation und pure Keyframeanimation = Morphing (mit Begrifflichkeiten muss man da vorsichtig sein.. Boneanimation hat natürlich auch Keyframes.. aber hier wird nciht jeder Vertex, sondern nur jeder Bone pro Frame gespeichert).

6

26.01.2010, 21:42

Zitat von »"Wümpftlbrümpftl"«

"Blender unterstützt Kollision" bezieht sich ausschließlich auf die Blender-Game-Engine. Um Kollisionserkennung und ggf. Bouding Volumes oder Kollisionsmodelle musst du dich noch selbst kümmern.
Schon klar, aber innerhalb von Blender wird doch die "Grenzen" (bzw. die "Kollision-Würfeln" wie man die sonst nennt) definiert, oder? Und in meinen C++-Source muß ich natürlich selber die Überprüfung implementieren bzw. Kollision-Bibliothek (PhysX oder sowas) benutzen. Oder habe ich komplett falsch verstanden? :?

Zitat

mit Begrifflichkeiten muss man da vorsichtig sein.. Boneanimation hat natürlich auch Keyframes.. aber hier wird nciht jeder Vertex, sondern nur jeder Bone pro Frame gespeichert.
Oh... ich dachte mit Blender erstelle ich ein Modell mit Skelett und in C++-Programm ist diese Modell ohne Implementierung erstmal "tot" und ich muß selber die Bewegungen implementieren wie z.B.

Quellcode

1
2
3
4
void OpenHand()
{
   // bewege die Finger in X-Richtung
};


cu Floh

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

7

27.01.2010, 00:09

Wenn man sich das Leben einfach machen will, kann man sich natürlich einfach 3D Engine XYZ schnappen, importiert das Model und muss im besten Fall wirklich nur sagen StartAnimation(RunLoop); :-)

Ist halt die Frage, ob man ein Spiel "zusammenklicken" will, indem man 3D Engine, PhysX & Co. einmal in die große Rührtrommel wirft oder ob man programmieren lernen will. Letzeres kostet halt Haare, Nerven und Geduld. ;-)

LG
Alyx

8

27.01.2010, 09:26

Zitat von »"Alyx"«

Ist halt die Frage, ob man ein Spiel "zusammenklicken" will, indem man 3D Engine, PhysX & Co. einmal in die große Rührtrommel wirft oder ob man programmieren lernen will.

Meiner Meinung nach hat man noch genug zu tun, auch wenn man für jeden Bereich eine fertige Engine/Library verwendet.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

9

27.01.2010, 10:13

Klar, man kann auch schnell mal ein Jahr in die KI und das generelle Game Handling stecken, keine Frage :-).
Die Frage ist halt, ob man recht schnell sichtbare Ergebnisse haben möchte, ohne dabei große Erfahrungen mit dem OS, OpenGL/Direct3D und vor allem auch der entsprechenden Mathematik zu sammeln oder ob man eben genau das will.
Nur um ein Beispiel zu nennen habe ich bald 3 Wochen am GLSL-Shader rumgedoktort bis die Reflektion und Refraktion so aussah, wie ich es wollte... nämlich im relativen Verhältnis zwischen der Größe der Cubemap in der echten Welt und der größe des Objektes, wo halt ein einfaches reflect/refract nicht mehr reicht ;-). Und als es dann nach 3 Wochen und 1000 Haaren weniger endlich lief bin ich erstmal ne halbe Stunde vor Freude durch's Wohnzimmer gehüpft. Wo wäre der Reiz bzw. der Lerneffekt/das Erfolgsgefühl, wenn man da einfach gesagt hätte Material.SetMap(MapType::Reflection,"./.....") ? :-)

Das ist, was ich damit sagen wollte ;-).

LG
Alyx

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

27.01.2010, 13:03

Joa. Der Teufel liegt in der Liebe zum Detail.
Ich habe ein kleines Projekt, dass ich in ca. nem Wochenende grundsätzlich hatte, aber das seit ca. nem Jahr rumgammelt, weil damals ein Detail nicht so geklappt hat, wie ich wollte. Irgendwann werd ichs wahrscheinlich mal doch noch fertig machen, aber nur, wen es so aussieht, wie ich es will..

So Sachen passieren dann halt, wenn man keinen zeitlichen Druck hat. Man investiert eine Unmenge an Zeit für Details, die vielen wahrscheinilch nichtmal auffallen.

Das ist denke ich ein richtig seltsamer Moment für einen Aussenstehenden, wenn einem Programmierer etwas gelingt, woran er Wochenlang gearbeitet hat. Man sieht dann nicht sehr viel mehr, als vielleicht ein kurzes Aufflackern des Bildes und der Programmierer verwandelt sich von einem hochkonzentriertem, angespanntem Wesen in ein Kleinkind, was gerade sein gewünschtes Feuerwehrauto zu Weihnachten bekommen hat. :D

Und ich denke das sind halt Moment, welche man bei vorgefertigen Sachen nicht und zumindest nicht so stark hat.

Werbeanzeige