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

Mr_Funstick

Frischling

  • »Mr_Funstick« ist der Autor dieses Themas

Beiträge: 8

Beruf: Schüler

  • Private Nachricht senden

1

08.09.2011, 05:07

Engine: Struktur, Must have, nice to have, ... ?

Hallo zusammen,

Ich muss im Zuge meines Studiums ein Spiel programmieren. Da es darum geht die Entstehung von 3D-Grafik am Computer zu verstehen dürfen wir keine Engines verwenden sondern müssen selbst eine entwickeln. Ich hab vor ca. 2 Jahren das Buch von David gekauft und mir damit DirectX 9 angeeignet, mithilfe der TriBase Engine ein Maturaprojekt (Abiturprojekt) gemacht und seit dem eigentlich nicht mehr wirklich ein 3D-Programm geschrieben. Seit 2 Wochen ca. beschäftige ich mich wieder damit und hab jetzt mal soweit den Umstieg auf DirectX10 geschafft. Sorry für die lange Einleitung, jetzt zu meiner Frage:

Wie genau sollte so eine Engine aufgebaut sein bzw. welche Features sollte sie zumindest anbieten? Wie sollte man danach von der Spielelogik aus auf die Engine zugreifen? Soll man nur ein Objekt der Engine haben die alle Schnittstellen besitzt um mit der Engine zu arbeiten? Oder sollte man für Grafik, Sound, I/O usw. jeweils eigene Objekte haben mit denen man komuniziert? Oder ganz anders?

Sollte man eine Manager haben der die Texturen verwaltet? Oder einfach eine Klasse die eine Textur verwaltet und für jede Textur die man lädt ein neues Objekt dieser Klasse erstellen?

Ich hab schon versucht irgend eine art Klassendiagramm oder Komponentendiagramm oder ähnliches für eine Engine im Internet zu finden, sowas würde mir schon weiterhelfen. Aber bisher ohne Erfolg.

Und die Shader sind mir im Moment noch ein totales Rätsel. Ich hab soweit verstanden wie man einen Schader programmiert usw. aber soll man dann z.B. für jedes Objekt in der Szene einen eigenen Shader haben? Scheint ziemlich redundant zu sein, da man ja. z.B. die Transformationen eh immer machen muss. Oder wie löst man das am Besten bzw. wie verwaltet man die Shader danach? Wieder mit einem Manager?

Ich kenn jetzt eigentlich keine Engines wirklich gut, mit Ausnahme der TriBase Engine. Sollte ich mir die Struktur da ungefähr abkupfern?

Und meine letzte Frage nun: Ist es sehr schwer einen Modelloader zu programmieren der auch Bones laden kann (aus *.md4, *.md5 Files) und die dann auch entsprechend umsetzt (ich vermute jetzt mal in Form von Shadern, da ja dort die Transformation passiert). Dazu wollte ich noch sagen ich verstehe die Grundprinzipien von Matrizen-Transformationen, Matrix-Multiplikation, usw. In der Theorie weiß ich auch ziemlich genau wie Bones funktionieren und ich kann sie auch korrekt in ein Modell einfügen und auch unter Maya animieren, aber wie ich es in ein Spiel reinbekomm weiß ich eben nicht.

Ich hoffe ihr könnt mir weiterhelfen.

Beste Grüße, Mr_Funstick

idontknow

unregistriert

2

08.09.2011, 11:56

Also 1: Entweder DX9 oder DX11, DX10 benutzt keiner mehr.

Dann, sollst du eine Engine oder ein Spiel programmieren? Bei letzterem solltest du dich vllt. nicht so stark auf ersteres konzentrieren, weil es dich nur vom Endziel abbringt. Vieles ist für ne Engine aber irgendwo die Entscheidung wie du es haben willst, außer du willst natürlich die neue 1337-Engine programmieren die jeder benutzen soll.

Aber wie gesagt wenn du ein Spiel machen willst/sollst würd ich mir vllt. lieber ein paar Klassen zusammenbasteln die man öfters braucht und direkt ans Spiel zu gehen anstatt ewig an ner Engine rumzubauen.

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

3

08.09.2011, 12:56

Also 1: Entweder DX9 oder DX11, DX10 benutzt keiner mehr.

Dann, sollst du eine Engine oder ein Spiel programmieren? Bei letzterem solltest du dich vllt. nicht so stark auf ersteres konzentrieren, weil es dich nur vom Endziel abbringt. Vieles ist für ne Engine aber irgendwo die Entscheidung wie du es haben willst, außer du willst natürlich die neue 1337-Engine programmieren die jeder benutzen soll.

Aber wie gesagt wenn du ein Spiel machen willst/sollst würd ich mir vllt. lieber ein paar Klassen zusammenbasteln die man öfters braucht und direkt ans Spiel zu gehen anstatt ewig an ner Engine rumzubauen.
Da hätte man schon ein Namen für eine Engine -> Leet Engine

MfG Stazer

Mr_Funstick

Frischling

  • »Mr_Funstick« ist der Autor dieses Themas

Beiträge: 8

Beruf: Schüler

  • Private Nachricht senden

4

08.09.2011, 15:27

Also 1: Entweder DX9 oder DX11, DX10 benutzt keiner mehr.
Tja, da hab ich leider folgendes Problem: Die Uni schreibt DX 10 oder 11 vor und ich hab leider nur eine DirectX 10 Grafikkarte. Ich hab versucht ein Tutorial in DirectX 11 zu kompilieren und da kam eine Fehlermeldung die Laut Tutorial-Text nur dann kommt wenn die Hardware kein DX 11 unterstützt. Oder muss ich da nur irgendwas bei der Erzeugung vom Device ändern damits abwärtskompatibel ist?

Dann, sollst du eine Engine oder ein Spiel programmieren? Bei letzterem solltest du dich vllt. nicht so stark auf ersteres konzentrieren, weil es dich nur vom Endziel abbringt. Vieles ist für ne Engine aber irgendwo die Entscheidung wie du es haben willst, außer du willst natürlich die neue 1337-Engine programmieren die jeder benutzen soll.
Wir sollen ein Spiel programmieren. Ne Engine wär natürlich schon cool, vlt so eine verbesserte Unreal Engine 3 oder so? ;)
Nein ernst, ich wollt mir halt ne kleine Engine basteln die ich dann weiter entwickeln und vlt später wieder für andere Sachen verwenden wollte, aber wenn du meinst das sich das nicht wirklich lohnt werd ich mir wohl nur ein paar Klassen zurechtlegen und mich ans Spiel machen. Auf jeden Fall danke für die Hilfe. :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

08.09.2011, 15:33

Wenns ein Compilerfehler ist, dann kann es nix damit zu tun haben, ob die Grafikkarte was unterstützt oder nicht. D3D11 ist, im Gegensatz zu D3D10, außerdem abwärtskompatibel bis auf D3D9 Hardware.

Mr_Funstick

Frischling

  • »Mr_Funstick« ist der Autor dieses Themas

Beiträge: 8

Beruf: Schüler

  • Private Nachricht senden

6

10.09.2011, 04:38

Ok, sorry. Es ist kein Compile-Fehler sondern es kommt eine Fehlermeldung bei der Ausführung. Das Proble liegt aber definitiv beim erstellen des D3D Device:

result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &featureLevel, 1,
D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);

Wenn ich den Driver Type auf Reference umstell funktionierts, also bin ich mal davon ausgegangen das mein Problem die Grafikkarte ist. Und wie gesagt, in dem Tutorial stand das es daran liegt das meine Grafikkarte kein DX 11 unterstützt. Oder muss ich dann nur einen anderen Type verwenden? Was macht DX eigentlich bei D3D_DRIVER_TYPE_UNKNOWN?

Gruß, Mr_Funstick

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

10.09.2011, 04:43

Naja, offenbar wird hier explizit ein Device mit D3D11 Feature Level erstellt. Vermutlich, weil die Anwendung wohl D3D11 Features verwendet, die von älterer Hardware nicht unterstützt werden.

Mr_Funstick

Frischling

  • »Mr_Funstick« ist der Autor dieses Themas

Beiträge: 8

Beruf: Schüler

  • Private Nachricht senden

8

10.09.2011, 09:56

Irgendwie hilft mir das jetzt nicht weiter. Ich kann natürlich ein DX 10 Device erstellen, aber dann verwende ich ja auch DirectX 10. Oder etwa nicht? Und wenn ich ein 11er Device nur erstellen kann wenn ich eine DX 11 Grafikkarte hab geht auch nix anderes.

Wie soll ich also kein DX 11 Device erstellen, aber trotzdem DX 11 verwenden? Bin verwirrt.

9

10.09.2011, 10:10

dot hat's doch gesagt, es wird vermutlich ein D3D11 Feature Level erzeugt das du dann verwendest.
Bis 10.1 ist es abwaertskompaktibel soweit mein Wissen geht, alles darueber - D3D11 - ist lediglich eine Erweiterung an Funktionalitaet, jedoch bleiben die Grundfunktionen etc. gleich damit Abwaertskompaktibilitaet gewaehrliestet wird.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

10.09.2011, 11:57

D3D11 wäre abwärtskompatibel bis auf D3D9 Hardware. Aber deine Anwendung da, sagt beim Erstellen des Device explizit, dass sie nur auf D3D11 Hardware laufen kann.

Werbeanzeige