Designfragen, OGL und DX Shader

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
schneid.rider
Beiträge: 3
Registriert: 13.01.2005, 17:51
Kontaktdaten:

Designfragen, OGL und DX Shader

Beitrag von schneid.rider »

hallo,

ich versuch grad ne einfache Engine zu entwerfen und da kamen mir 3 fragen:

1) was spricht dafür mehrere Vector Klassen zu verwenden statt nur einer, also Vector2D, Vector3D und Vector4D statts nur Vector?
in manchen Büchern wirds so gemacht, in anderen anders

2) sollte man heutzutage völlig auf die Fixed Function Pipeline verzichten und alles über Shader rendern?
also ich hatte mir das so vorgestellt, dass ich halt meine Materials und Texturen setz und dann noch nen Shader/Effect der das schön kombiniert
und dann den RenderCall mach. ohne mich mit den ganzen renderstates rumschlagen zu müssen.

3) wenn man eine API unabhängige Engine schreiben will, wie bekommt man dann am besten die Shader abstrahiert? Also unter D3D finde ich die .fx Effekt sehr cool.
die werden unter OpenGL aber kaum unterstützung finden, oder? und wie kann ich dann trotzdem noch Vertex- und Indexbuffer verwenden ohne die von D3D zu benutzen?
in den büchern die ich so kenne werden einfach die von D3D gewrappt.

danke schonmal
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Designfragen, OGL und DX Shader

Beitrag von Aramis »

wenn man eine API unabhängige Engine schreiben will, wie bekommt man dann am besten die Shader abstrahiert? Also unter D3D finde ich die .fx Effekt sehr cool.
HLSL zu GLSL geht via HLSl2GLSL mit etwas Arbeit ganz gut, ist aber dennoch für Engines kaum praktikabel (lahm und wenig elegant). Ich nutze Nvidia's Cg und hab damit ziemlich gute Erfahrungen gemacht. Mit der neuesten Version funktionieren auch Geometry Shader u.ä. problemlos, jedenfalls sofern die Hardware mitmacht.
ie werden unter OpenGL aber kaum unterstützung finden, oder? und wie kann ich dann trotzdem noch Vertex- und Indexbuffer verwenden ohne die von D3D zu benutzen?in den büchern die ich so kenne werden einfach die von D3D gewrappt.
API-Unabhängigkeit hat nur wenig praktischen Nährwert, macht aber definitiv Spaß :-). Leider geht es aber meistens schief (oh du leidvolle Erfahrung ..), einfach weil an der falschen Stelle abstrahiert wird. Vertex&Indexbuffer sind imho Implementierungsdetails, von denen das Programm eigentlich gar nichts mehr mitbekommen sollte. Ich würde eine abstrakte Klasse 'Mesh' einführen und diese vom jeweiligen Renderer implementieren lassen. Kann man aber auch beliebig weit treiben, Du solltest dich vorher fragen, was du eigentlich willst.
sollte man heutzutage völlig auf die Fixed Function Pipeline verzichten und alles über Shader rendern?
Die aktuellen Treiber emulieren die FFP sowieso durch Shader, Hardware ohne SM2.0 Support spielt kaum eine Rolle mehr. Insofern macht es wenig Sinn auf die FFP zu setzen (deshalb fliegt sie ja auch langsam aber sicher aus den gängigen APIs raus).
was spricht dafür mehrere Vector Klassen zu verwenden statt nur einer, also Vector2D, Vector3D und Vector4D statts nur Vector?
Naja, ein generischer Vektor der alle Größen abdeckt muss entweder ein Template sein und damit Vektor2D, Vektor3D, und alle anderen Vektoren in sich vereinen oder dynamisch Speicher anlegen, was einfach ein Performanceproblem ist. Im Prinzip kann man unter massivem Einsatz von Templatemetatricks mit einer einzige Vektorklasse alle möglichen Fälle abdecken und auch noch 'SpecialFX' wie die aus HLSL bekannten Komponentswizzles (vektor.xxy) einbauen. Dann hat man aber so viel Zeit verbraten, dass man in der Zeit Vektor1D bis Vektor30D zweimal manuell verfasst hätte :-) Die beste Variante ist es immer noch, auf bestehenden Code zurückzugreifen (z.B. glm)

Alex
Benutzeravatar
schneid.rider
Beiträge: 3
Registriert: 13.01.2005, 17:51
Kontaktdaten:

Re: Designfragen, OGL und DX Shader

Beitrag von schneid.rider »

ok, vielen dank erstmal für die umfassende antwort. weitere kommentare sind sehr willkommen.

für den mathe teil eine bestehende lib zu verwenden hatte ich auch schon überlegt.
nur wollte ich vllt später auch ne physik lib mit einbinden. und die bringt dann sicherlich wieder ihre eigenen klassen
mit. für den anfang sollte es aber erstmal ne ganz kleine engine sein die nur so die basics unterstütz.

ich finde es auch schwer abzuwägen, was man selber schreiben sollte um einen echten lerneffekt zu haben und was einfach
zeitverschwendung is, weils eh nur stupides getippe is und schon tausendmal existiert... :| :?:
Benutzeravatar
dv
Beiträge: 51
Registriert: 15.09.2002, 17:46
Benutzertext: Ugauga.
Alter Benutzername: dv
Wohnort: Südamerikanischer Dschungel
Kontaktdaten:

Re: Designfragen, OGL und DX Shader

Beitrag von dv »

Die Frage der Vektoren ist nicht zu unterschätzen. Genau hier sieht man zB die Vorteile von generischer Programmierung. Doch bis dahin ist es ein weiter Weg, also stress dich nicht wenn der Vektorcode nicht optimal ist :)
Antworten