Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:26

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Feb 27, 2010 22:15 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Hallo,

ich bin dabei ein Projekt anzugehen und habe da noch ein paar kleinere Fragen.

Als erstes würde mich mal interessieren wie man die Schwerkraft simulieren kann.
In den meisten 3D Spielen kann man ja springen und fallen. Beispielsweise Ego-Shooter.
Ich habe bei Google und im Board nach antworten gesucht wie ich das angehen könnte, aber leider nichts vernünftiges gefunden.

Ausserdem würde mich interessieren wie ich Kleidung und Waffen an einem Charakter anlegen kann.
Das Modell des Charakters wird ja nicht so oft erstellt wie es Waffen gibt,
sondern der Charakter und die Waffen einzeln.

Da gab es noch eine dritte Frage aber die habe ich gerade wieder vegssen :?

Wäre echt genial wenn man mir dabei weiter helfen könnte.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 27, 2010 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Schwerkraft simulierst du, indem du eine bescheunigte Bewegung nach unten durchführst. Sogenannte "Gravitationsbeschleunigung". Die liegt auf der Erde bei 9,81 m/s², d.h. jede Sekunde wirst du um 9,81 m/s schneller. Aber das an sich ist witzlos. Dein Charaker fällt einfach ins bodenlose. ^^
Für gewöhnlich schreibt man sich hier eine Physikengine oder nutzt eine vorgefertigte. In deinem Fall wäre das zweite aus mehreren Gründen wohl das beste. ODE und Newton sind frei und/oder Freeware und sehr zu empfehlen. Zudem gibt es hier bestimmt einige, die dir dort in der Einarbeitung helfen können.

Zu den Waffen: Naja, Wenn du weißt, wo die Hand ist, kannst du da alles (Waffe, Schlagstock, Tennisschläger, Croissant) reinrendern. Erst den Menschen, dann halt bei der Hand den Gegenstand. Wobei ein kleines Spiel, wo man nicht gleich rumhüpft und Waffen hat, für dich wohl zum Einüben besser wäre. ;-) Jeder hat mal klein angefangen, einer der größten Fehler ist mit zu großen Zielen zu beginnen.

LG Ziz

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 27, 2010 22:58 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Ok schau mir das jetzt mal an, ich werde mal ODE versuchen und schauen wie die so ist.
Und genau das war noch meine Frage wie man den Boden definieren kann, aber das ist doch bestimmt in der ODE schon drin.

Und mit der Kleidung und den Waffen das war nur Interesse halber, weil mich das schon immer interessiert hat.
Gibt es da nicht irgendein Open Source Projekt oder etwas ähnliches wo man sich das ielleicht mal anschauen kann?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 27, 2010 23:03 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

zum Thema Klamotten: Da gibts hier ne ganz brauchbare Demo (in C++), wobei ich da jetzt nicht weiß, wie gut / optimiert die Methode ist.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 27, 2010 23:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Das Modell des Charakters wird ja nicht so oft erstellt wie es Waffen gibt,
sondern der Charakter und die Waffen einzeln.

Wie Ziz schon sagte, du renderst jedes Objekt einzeln in einem lokalen Koordinatensystem. Ein vereinfachtes Beispiel:
Der Mittelpunkt deines Autos befindet sich an Position (5,0,10) in der Szene. Die vier Felgen des Autos sind relativ zum Mittelpunkt definiert: (-1,0,1), (1,0,1), (-1,0,-2) und (1,0,-2). Die Felgen befinden sich also eigentlich bei (4,0,11), (6,0,11), (4,0,8) und (6,0,8). Die Reifen auf den Felgen sind dann wieder relativ zu den Felgen definiert, usw...
In der Praxis ist das natürlich etwas komplizierter, da natürlich auch eine relative Rotation und nicht nur eine Verschiebung möglich sein muss. Im Wiki findet sich sicher ein Matrix-Tutorial welches das erklärt.

Zitat:
Gibt es da nicht irgendein Open Source Projekt oder etwas ähnliches wo man sich das ielleicht mal anschauen kann?

Was genau möchtest du Wissen?

Zitat:
ich werde mal ODE versuchen und schauen wie die so ist

Wie Ziz empfehle auch ich dir Newton. ODE ist umfangreicher und damit komplizierter in der Verwendung.

Zitat:
zum Thema Klamotten: Da gibts hier ne ganz brauchbare Demo (in C++),

Waaha...gebt einem Anfänger doch nicht so was in die Finger. So ein Tuch in einer Toy-Szene ist eine Sache, aber physikalisch korrekte Kleidung in einer richtigen Szene in Echtzeit zu simulieren ist nicht einfach....und für Spiele normalerweise auch absolut unnötig.
Der Trick: Eng anliegende Kleidung und kurze Haare, dann brauchst du da nichts simulieren sondern kannst einfach rendern. Charakteranimation (gehen, laufen, springen...) ist schon kompliziert genug für den Anfang ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Feb 27, 2010 23:37 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Ja habe mich auch gerade für Newton entschieden, weil ich da direkt ein Delphi Header hier im Board gefunden habe :D

Und mit der Kleidung, ich wollte da jetzt auch nicht Wind etc. mit einbeziehen, sondern nur, wenn jetzt beispielsweise
der Charakter einen Rock trägt und ein Bein sich nach vorne bewegt, sich der Rock dann natürlich auch ein wenig nach vorne bewegen muss.
Am besten ist das erklärt wenn man sich World of Warcraft anschaut, so wie das da ist.
Wie ich schon gesagt habe war das nur interessehalber, ich wollte mir da nur mal ein bisschen was zu dem Thema durchlesen.

Und danke erstmal für die schnelle und gute Hilfe, ich werde mich jetzt mal in die Newton Engine reinarbeiten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 00:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
wenn jetzt beispielsweise der Charakter einen Rock trägt und ein Bein sich nach vorne bewegt, sich der Rock dann natürlich auch ein wenig nach vorne bewegen muss.

Ohne jetzt WoW jemals gespielt zu haben würde ich mal behaupten, dass dies einfach eine vor berechnete Animation ist, also das gehört einfach zur Laufanimation dazu.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 00:19 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Du meinst also, dass das Kleidungsstück selbst eine Animation hat?
Da wäre ich mir nicht so sicher, es gibt da nämlich viele verschiedene Rassen und dann noch die Geschlechter und die sind alle Unterschiedlich
aufgebaut(Gross, klein, dick, dünn).


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 00:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da würde ich drauf wetten wollen.

Man stelle sich einmal vor, dass in einer WoW Stadt 30 physikalisch korrekt wehende Umhänge simuliert werden würden. Dann vielleicht noch Flaggen und Haare... neee

Dort wird quasi die "Brut Force" Methode verwendet. Beim erstellen der Avatare werden auch die Animationen mit erstellt. Und dort wird dann "per Hand" dafür gesorgt, dass sich die Bestandteile der Kleidung mitbewegen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 00:33 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Ok das ist einleuchtend.
Aber trotzdem ein interessantes Thema :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da ich ja quasi verantwortlich für den Delphi-Newton-Header bin, hier noch ein kleiner Hinweis auf den eingabauten Charactercontroller. Dieser ist in Newton 2.00 dazukommen und kann mit der aktuellen Beta genutzt werden. Er befindet sich in der JointLibrary und ermöglicht es dir mit wenigen Zeilen Code z.B. eine Charaktersteuerung für einen Egoshooter zu erstellen. Und da der über die Physikengine geht hast du auch Kollisionserkennung und -reaktion mit dabei.

Hier mal ein Video von mir der den Charactercontroller in Aktion zeigt : http://www.youtube.com/watch?v=EUZ6mJMJBMk
Das sind knapp 25 Zeilen Code (mit Callback für Bewegung).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Feb 28, 2010 13:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Die Klamotten in WOW sind animiert und werden nach Rasse einfach nur Hoch skaliert, deswegen hat man ja diese massiven Fehler, das ein Rücken-Item in den Beinen des Models schneiden. Entsprechend auch Waffen und so weiter. Die Waffen werden durch das Bonesystem eines Models angeklebt. Also für jede Rassen-Geschlechtskombi hat WOW ein Skelet erstellt und Animationen gemacht, die Waffen wurden dann an die Handknochen positioniert. Seit Wrath of the Lichking nutzt Blizzard 2 Skelete(Frau,Mann) und hat die animationen aus den Models entfernt und einzeln in animationfiles gepackt. Die Bones werden nun nur noch entsprechend der Rasse skaliert.

WoW ist auch kein Maßstab, das game ist Technisch gesehen noch in der Steinzeit(viel zu aufwändig und komplex die ganzen Renderpfade zu supporten) und ist nicht deswegen so beliebt, sondern wegen dem Content. Mit State of the Art Technologie(instancing, Croud Imposter, deffered shader, SSAO, volume particle,Sky scattering, virtual texture, spherical harmonics, paralax mapping, HDR, soft shadows, texture arrays,...) wäre das Spiel teilweise aufwändier, teilweise einfacher, zu entwickeln allerdings oft auch auf weniger hardware lauffähig. WoW hat D3D 9 und OpenGL 1-2 support entsprechend schreiben die Shader für mehrere Grakas, in mehreren Sprachen.
Wenn man OpenGL3 und D3D 10 nun als minimum wählen würden ist die Entwicklungszeit bei weitem kürzer, da die beiden Libs nun nahezu API equivalent und die Shader recht ähnlich sind. Der Leistungszuwachs wäre höher, da viele Performancebringende Features hinzu gekommen sind und da die Entwicklung in der regel 1-2 Jahre braucht ist es zum release die Hardware auch überall verfügbar. Blizzard hatte sich auf ihre erste Version von WoW ausgeruht und es nahezu garnicht im Bereich Grafik weiter entwickelt(Screenspace Glow und unterirdisch miese realtime schatten kamen hinzu) und auf dem client ist das die größte schwachstelle im Spiel.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Mär 01, 2010 00:01 
Offline
DGL Member

Registriert: So Feb 07, 2010 21:15
Beiträge: 30
Ok ich habe mich jetzt erstmal mit dem Character Controller beschäftigt. Den bekomme ich nicht so ganz zum laufen.
Das Video das Sascha Willems gezeigt hat ist ja schon ganz gut aber wo bekomme ich nen example dazu?

Auf der Seite von Newton habe ich zwar in dem SDK examples gefunden, aber leider fehlt das der Sourcecode.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Mär 01, 2010 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Im SDK ist der Source zu allen Beispielen drin, auch zum Charactercontroller.

Alternativ hier mal ne kurze Erklärung was man machen muss. Ich setze voraus dass man bereits Grundkenntnisse in Newton besitzt :

  • Der Controller ist ein custom joint, also muss man ihn wie folgt deklarieren :
    Code:
    1. NewtonController : PNewtonUserJoint;

  • Der Controller nutzt einen normalen Newtonkörper als Kollisionsform. Also erstell etwas das zu deiner Spielfigur passt. Es empfiehlt sich hier eine Kapsel NewtonCreateCapsule oder eine nach oben gestreckte Kugel, dies sorgt auch dafür dass man schön an Wänden entlang gleitet.
  • Erstelle den Controller, das ist nur eine Zeile Quellcode :
    Code:
    1. NewtonController := CreateCustomPlayerController(@Orientation[0,0], NewtonBody, 0.5, 1/64);

    Orientation ist die Ausrichtungsmatrix deines Charakters. In OpenGl normalerweise mit einem Upvektor von 0/1/0. Dann noch der eben erstellte Newtonkörper. Parameter 3 gibt an wie hoch eine Stufe maximal sein darf damit man noch drüber kommt, der letzte Parameter gibt die Federung an, also quasi die Weichheit der Bewegung.
  • Einen Callback für die Bewegungseingabe setzen. Das funktioniert genau wie bei jedem anderen Customjoint auch :
    Code:
    1. CustomSetSubmitContraintCallback(NewtonController, PlayerControllerInput);

  • Im Callback (PlayerControllerInput) Bewegung, Rotation und was man noch so braucht setzen: Bitte drauf achten dass der Callback korrekt deklariert ist :
    Code:
    1. procedure PlayerControllerInput(const me : PNewtonUserJoint; timestep : Float; threadIndex : int); cdecl;
    2. CustomPlayerControllerSetVelocity(me, VelForward, VelSide, TPlayer(CustomGetUserData(me)).Yaw);

    VelForward und VelSide geben die Geschwindigkeit nach Vorne bzw. zur Seite hin an. Die setzt du dann halt je nachdem wie du die Eingabe machst. Bei mir isses WASD, also setze ich bei gedrückter "W"-Taste VelForward auf z.B. 10. Yaw ist der Gierwinkel, also deine Blickwinkelrotation auf der y-Achse. Die macht man dann meistens mit der Maus, und Newton nutzt die um den Charactercontroller in die richtige Richtung zu bewegen. Wichti ist dass du beim Erstellen des Joints die Nutzerdaten mit CustomSetUserData auf den Joint gesetzt hast, damit du im Callback auf diesen zugreifen kannst.

Und mehr isses nicht. Wer sich ein wenig mit Newton auskennt sieht wie einfach das ist. Man beachte allerdings dass der Joint noch nicht ganz fertig ist, und man momentan leider keine externen Kräfte darauf wirken lassen kann. Springen geht daher also noch nicht, kommt aber bald.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]