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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

11

09.10.2008, 14:34

Zitat von »"Tschismo"«

Aber gibt es zwischen den beiden APIs nicht doch sehr grosse Unterschiede


Unterschiede gibt es durchaus. Aber beide APIs tun ja schlussendlich das Gleiche.

Zitat von »"Tschismo"«

(OpenGL verwendet ein rechtshändiges Koordinatensystem, DirectX ein linkshändiges,


Du kannst in OpenGL doch ganz einfach das Koordinatensystem ändern. Im Endeffekt kannst du in beiden APIs genau das System verwenden das dein Framework vorschreibt.

Zitat von »"Tschismo"«

bei OpenGL gibt es Rect als Polygone als Basisprimitive, bei DirectX nur Dreiecke, etc).


Bei OpenGL gibts auch nur Dreiecke. Falls du in der Tat GL_QUADS in glBegin()/glEnd() Blöcken verwenden willst (wieso auch immer...) kannst du die ja, in DirectX, ein Rechteck mit 2 Dreiecken basteln.

Zitat von »"Tschismo"«

Ist es nicht sehr schwer all die Dinge in einer gemeinsamen API unter einen Hut zu bringen?


Ja, das ist tatsächlich ziemlich schwer. Deshalb sollte man es sich auch lieber zweimal überlegen, ob man das wirklich machen will (bzw, ob man das wirklich braucht).

Zitat von »"Tschismo"«

Kennt jemand von euch eine fertige API zum anschauen, die das tut (und nur das)?


Zum Beispiel: Ogre3D, Irrlicht, ...
@D13_Dreinig

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

12

09.10.2008, 23:11

Ganz einfach (oder auch net ;-)):
Du hast nen Renderer interface. Die implementation muss gewisse funktionalität zur verfügung stellen(z.b. linien, dreiecke etc etc zeichnen). Deine Engine verwendet diese grundlegende funktionalität durch das interface, also unabhängig von der implementation. du wiederum kannst dann die höhere funktionalität der engine verwenden, um z.b. meshes zu zeichen. Die engine wird daraus vermutlich einen vertex buffer machen, also beim renderer-interface die entsprechende methode aufrufen. die geladene implementation des interfaces wird dann entsprechend die open gl oder direct x funktionen/methoden aufrufen und einen vertexbuffer erzeugen. Entsprechend wird dann z.b. ein objekt einer Vertexbufferklasse zurückgeliefert. Das ist allerdings nicht etwa eine klasse von direct X, sondern eine engine eigene, die nicht direkt auf ogl oder dx arbeitet, sondern auch hier durch das renderer interface mit ogl kommuniziert. Dann wird das interface vermutlich noch weitere funktionalität bereitstellen, um den vertexbuffer (und auch funktionalität für indexbuffer) zu manipulieren etc etc. Natürlich gibt es mit sicherheit noch andere ansätze, dieser hier scheint mir jedoch am modularsten und am ausbaufähigsten.

Problematisch wird es, wenn eine API, wie z.b. dx nicht die vom interface geforderte funktionalität bereitstellt (z.b. haben die ersten dx versionen mit sicherheit kein shader support). hier müsste man dann z.b. init oder register methoden für das interface hinzufügen, die der engine mitteilen, welche features vorhanden sind und welche nicht. Die engine hat dann entsprechend zu reagieren, indem sie ihren verwender darauf aufmerksam macht, falls er ein nicht implementiertes feature benutzen will.

Ich hoffe, ich habs einigermaßen verständlich formuliert,

Socke

13

10.10.2008, 15:41

Zitat von »"unsigned long"«

Warum machst du so einen Aufwand? ... Ich wüsste jetzt keinen Grund OpenGL UND Direct3D zu nehmen, außer es gäbe Geld dafür. Der Sinn dahinter beides zu unterstützen erschließt sich mir nicht ganz


Na ich mache das eigentlich nur zu Forschungszwecken. Aber es gibt durchaus ein paar vernünftige Gründe das zu tun, z.B. um das fertige Programm dann auf möglichst vielen Systemen optimal nutzen zu können. Ich habe bemerkt dass bei vielen meiner Ex-Rechnern mit nur standard Billiggrafikkarten OpenGL nicht besonders gut (oder auch gar nicht) unterstützt wurde und DirectX wesentlich besser lief. Aber DirectX ist halt eben nur für Windows Betriebssysteme... Da dachte ich eben, vielleicht gibt es ja irgendwo schon eine fertige API, die eben genau diese Kapselung vornimmt und die hätte ich mir dann eben ankucken wollen.

Zitat von »"David_pb"«

Zum Beispiel: Ogre3D, Irrlicht, ...


Ja, danke. dort kann ichs mir anschauen

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

10.10.2008, 15:43

Zitat von »"Tschismo"«


Zitat von »"David_pb"«

Zum Beispiel: Ogre3D, Irrlicht, ...


Ja, danke. dort kann ichs mir anschauen


Hau rein!
@D13_Dreinig

Anonymous

unregistriert

15

10.10.2008, 15:51

Zitat von »"Tschismo"«

Aber es gibt durchaus ein paar vernünftige Gründe das zu tun, z.B. um das fertige Programm dann auf möglichst vielen Systemen optimal nutzen zu können. Ich habe bemerkt dass bei vielen meiner Ex-Rechnern mit nur standard Billiggrafikkarten OpenGL nicht besonders gut (oder auch gar nicht) unterstützt wurde und DirectX wesentlich besser lief.
Auf das Schicksal einzelner Individuen kann die Gemeinschaft keinerlei Rücksicht nehmen. Mein Gott, dann gibt es halt paar FPS weniger, who cares? Der Aufwand hier noch mit Direct3D rumzuhantieren und OpenGL ist es doch nicht mal Ansatzweise wert und halte ich persönlich für blödsinn. Vorallem wenn man Wirtschaftlich arbeiten muss.

Und das einige OpenGL nicht unterstützen halte ich für ein Gerücht. Mir ist seit über 10 Jahren kein PC/Graka mehr unter die Augen gefallen, der kein OpenGL kann und wenn (betonung liegt vorallem auf wenn) es noch irgendwo, in Usbekistan oder in der tiefsten Pampa, noch Leute gibt mit so einer Ausstattung: Pech gehabt. Erste und Zweite Welt haben OpenGL out of the box.

Zitat von »"Tschismo"«

Da dachte ich eben, vielleicht gibt es ja irgendwo schon eine fertige API, die eben genau diese Kapselung vornimmt und die hätte ich mir dann eben ankucken wollen.
Wenn eine Lib und keine API. Dazu wenn du eine Lib nimmst, hast du wieder nur Stress mit derren Code-Stil, den ganzen Quatsch auf dein Programm einzubinden und usw. Ist doch nur halber Kram.

Ganz einfach:
OpenGL für Portabel
OpenGL oder Direct3D für Windows
OpenGL und Direct3D für sinnlosen Kram, wo man gerne Fehler haben möchte.

Werbeanzeige