Wie lerne ich schnell c++ und DirectX 12?
Ich möchte directX und c++ lernen aber kann c++ nicht so gut und DirectX gar nicht ich habe bisher nur eine gameEngine mit lwjgl und OpenGL gecoded und will jetzt eine gute in c++ mit directX coden mit Assimp und imgui wo soll ich anfangen wie lerne ich es schnell und effizient
2 Antworten
Den primären Fokus würde ich an deiner Stelle erst einmal auf C++ richten. Nimm dir dafür genügend Zeit, es fällt dir sonst später nur auf die Füße. Auch wenn dir deine bisher gesammelten Java-Kenntnisse ganz sicher helfen werden, birgt C++ neben der Syntax einige Funktionen und Verhaltensweisen, die dir völlig neu sein werden und die du definitiv für dein Projektziel benötigen wirst.
Zum Lernen könnte ich dir folgende Quellen empfehlen:
- Bücher (in Deutsch): Schau nach den Autoren Breymann, Theis oder Will
- Bücher (in Englisch): Schau auf diese Liste
- Learn C++
- Studyplan
- Codeacademy (für einen ersten Einstieg)
- Tim Buchalka: Beginning C++ Programming - From Beginner to Beyond (Udemy Videokurs)
- Vertiefende Literatur bieten unter anderem Scott Meyers und Herb Sutter
Vermutlich findest du ebenfalls passende Kurse auf Educative, PluralSight oder Udemy.
Ich würde allerdings darauf achten, möglichst Quellen zu nutzen, die mindestens C++ 17 behandeln, denn die Sprache hat sich im Verlauf der Zeit ziemlich gewandelt.
Des Weiteren kann es gut sein, dass Tutorials nur die üblichen Grundlagenthemen abklappern, aber nicht in die Tiefe gehen. Also beispielsweise Coroutines, Lambdas, Smart Pointer, (IO-)Streaming, Reflection, Templates, u.ä. völlig außer Acht lassen. Deshalb ist es besser, immer wieder mehrere Quellen im Mix zu nutzen, zumal sie durch unterschiedliche Erklärweisen Themen nochmal besser/leichter verständlich machen können.
Für den praktischen Einstieg könntest du mit OpenFrameworks experimentieren oder du überlegst dir eigene kleine Ziele für die Konsole. Lerne schrittweise (z.B. nach Kapitel) und wiederhole zuvor Gelerntes immer wieder (z.B. indem du es mit neuen Themen kombinierst).
Als Entwicklungsumgebung würde ich auf Visual Studio setzen oder alternativ den QtCreator.
Ein Einstieg in DirectX ist nochmal eine Ecke schwieriger. Ein paar Einstiegspunkte (Lernquellen) findest du hier:
- Referenz: Die Microsoft Dokumentation
- Buch: Introduction to 3D Game Programming With DirectX 12 von Frank Luna
- Braynzar
- Blog: 3dgep
- Blog von Alain Galvan (nur für einen ersten Einstieg)
- YouTube: OlympusMonsTutorials - DirectX 12 Game Engine Series
- Referenzprojekte: DirectX-Graphics-Samples (speziell die MiniEngine wäre für dich keine schlechte Basis)
In der Entwicklung kannst du es dir ein bisschen einfacher machen, indem du Hilfsbibliotheken wie DirectXTK12 und D3D12MA einbindest.
In der Lernkurve wäre es einfacher, mit Vulkan oder DirectX 11 zu starten. Vulkan hat eine ähnliche Architektur zu DirectX, doch es sollten sich mehr zugängliche Quellen finden lassen. DirectX 11 wiederum ist fehlertoleranter als Version 12 und die konkrete Ressourcenverwaltung wird dir abgenommen.
Wenn du bereits eine konkrete Spielidee hast, wäre der pragmatischere/zielorientiertere Weg, direkt dessen Implementation anzugehen und je nach Notwendigkeit entsprechende Hilfstools zu bauen. Daraus kann nach und nach eine Engine entstehen, doch das wäre soweit nur ein Nebenprodukt. Die Entwicklung selbst sollte sich an dem konkreten Zielprodukt orientieren, ohne dabei das Ziel aus den Augen zu verlieren.
Zudem würde ich nochmals überdenken, ob nicht bestehende Systeme (wie Unreal, O3DE, Stride, ...) als Basis besser wären. Bei Bedarf sind sie auch anpass-/erweiterbar.
Ansonsten möchte ich noch drei Tools ergänzen, die ich in meinem obigen Text vergessen habe, zu erwähnen: bgfx, NVRHI oder The Forge bieten soweit alle Abstraktionslayer für Direct3D 12 oder Vulkan, was deren Handhabung deutlich vereinfacht.
Du denkst du kannst das selbst ohne Vorkenntnisse effizienter implementieren als bestehende Engines?
Eher unrealistisch.
Was genau möchtest du denn machen? Womöglich lässt sich das in eine andere Engine integrieren. Godot und WickedEngine haben beide MIT-Lizenz, sprich, du kannst dir darauf aufbauend eine eigene Engine bauen.
Und gibt noch diverse andere Engines, die man als Basis nutzen könnte.
Wenn du OpenGL kannst, warum auf DirectX wechseln? Das ist plattformspezifisch, kann nicht mehr als Vulkan und soll, soweit ich gehört habe, auch nicht schön zu verwenden sein.
Dann doch lieber Vulkan.
Zudem würde ich empfehlen, eines nach dem anderen umzustellen. Entweder machst du erst C++, wenn du das kannst mit OpenGL und wenn du das kannst mit einem neuen API.
Oder du lernst das neue API in LWJGL und steigst erst dann auf C++ um.
Es sei aber gesagt: Auch wenn du schnell und effizient lernst, dauert es ne Weile, bis du das draufhast.
Zum Einstieg würde ich ein x-beliebiges Tutorial empfehlen. Da jeweils kapitelweise vorgehen, das erlernte Wissen in eigenen Projekten festigen.
Ich kann ja bereits einigermaßen lwjgl OpenGL aber ich brauche halt die maximale Performance weil ich großes vor habe
Vulkan bietet "maximale Performance". Je nachdem, was genau du vorhast, wirst du aber vielleicht eher soetwas wie CUDA oder OpenCL nutzen wollen.
Danke dir erstmal für die schnelle Antwort ich habe schonmal von den buch von Frank Luna oder wer das war auf jedenfalls ist es mir wichtig das ich die beste Performance wie nur möglich in meiner engine zu erhalten geplant ist auch ein Editor mit imgui etc eine physics engine werde höchstwahrscheinlich bullet physics nutzen und model und scene handling (modele loaden mit assimp) ich habe mit der engine großes vor und benötige eine custom engine für das was ich will ich schwanke aber immernoch zwischen DirectX 12 und Vulkan da ich vom beiden keine ahnung habe