Ich habe viele Fragen in diesem Bereich gesehen, aber nicht genau diese Frage. Ich entschuldige mich, wenn dies ein Duplikat ist.
Ich mache ein kleines 3D-Spiel. Um ehrlich zu sein, es ist nur ein kleines Hobbyprojekt und wird sich wahrscheinlich nicht als echtes Spiel herausstellen. Ich werde gerne eine schöne Grafikdemo erstellen und etwas über 3D-Rendering und C ++ - Design lernen.
Meine Absicht ist es, direct3d9 zum Rendern zu verwenden, da ich wenig Erfahrung damit habe und es meinen Anforderungen zu entsprechen scheint. Wenn ich als Programmierer jedoch eines gelernt habe, muss ich fragen: " Gibt es einen denkbaren Grund, warum diese Komponente durch eine andere Implementierung ersetzt werden könnte? ". Wenn die Antwort "Ja" lautet, muss ich eine geeignete Abstraktion und Schnittstelle zu dieser Komponente entwerfen . Obwohl ich beabsichtige, d3d9 zu implementieren, muss ich eine 3D-Schnittstelle entwerfen, die für d3d11, opengl ...
Meine Frage ist dann, auf welcher Ebene dies am besten möglich ist. Ich denke, dass eine Schnittstelle in der Lage ist, zu erstellen und später zu zeichnen
- Scheitelpunktpuffer und Indexpuffer
- Texturen
- Vertex- und Pixel- "Shader"
- Einige Darstellungen des Zeichenzustands (Mischmodi usw.)
Mit anderen Worten, eine Schnittstelle auf relativ niedriger Ebene, auf der mein Code zum Zeichnen eines animierten Modells die Schnittstelle verwendet, um abstrakte Scheitelpunktpuffer usw. zu erhalten. Ich mache mir jedoch Sorgen, dass sie zu niedrig ist, um alle Funktionen, die ich benötige, effizient zu abstrahieren.
Die Alternative besteht darin, dies auf einer höheren Ebene zu tun, auf der die Benutzeroberfläche Objekte, Animationen, Landschaften usw. zeichnen und für jedes System implementieren kann. Das scheint mehr Arbeit zu sein, aber es ist flexibler, denke ich.
Das ist also wirklich meine Frage: Welche Ebene der Benutzeroberfläche funktioniert am besten, wenn ich das Zeichnungssystem abstrahiere?