Seite 1 von 1

Designfragen, OGL und DX Shader

Verfasst: 20.07.2009, 20:38
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

Re: Designfragen, OGL und DX Shader

Verfasst: 20.07.2009, 21:01
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

Re: Designfragen, OGL und DX Shader

Verfasst: 20.07.2009, 21:56
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... :| :?:

Re: Designfragen, OGL und DX Shader

Verfasst: 21.07.2009, 20:45
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 :)