designfrage renderer



  • hallo, ich habe gerade ein kleines problem bzgl. meinem klassendesign meines renderers. ich habe eine abstrakte klasse namens sceneobject, von der all meine objekttypen (kreise usw) ableiten. dann habe ich eine klasse scene, die eine menge dieser sceneobject's managed.

    nun das problem: wie muss ich das ganze gestalten damit ich schlussendlich eine saubere syntax habe a la:

    scene myscene;
    myscene.viewport = //
    myscene.add( //
    myscene.render(bitmap_handle("test.bmp"));
    myscene.render(glut_window("test", 640, 480));
    

    meine gedanken waren:
    1. diese handles müssen meine scene-objekte rendern können (über eine funktion draw() z.b.), das problem dann ist aber, wie ich herausfinde, ob es sich bei sceneobject um einen kreis oder um eine box handelt und wie ich dann die korrekten daten (unterscheidet sich ja je nach sceneobject) übergebe.

    2. die sceneobject haben eine funktion (z.b. draw_to(handle&) const), mit der sie sich selbst in die unterstützten handles reinzeichen können. nachteil: einmal in der basisklasse scene verankert, muss jede abgeleitete klasse in dieses handle reinzeichnen können, unabhängig ob es von nöten ist oder nicht.

    sorry, klingt ein wenig verworren das ganze...



  • nachtrag: einfach ein adapter-pattern zu machen geht natürlich nicht, da z.b. gl eigene funktionen hat für gewisse formen, die man beim bitmap software-rasterizen müsste...



  • not smart schrieb:

    nachteil: einmal in der basisklasse scenesceneobject verankert, [...]



  • not smart schrieb:

    ...das problem dann ist aber, wie ich herausfinde, ob es sich bei sceneobject um einen kreis oder um eine box handelt...

    Gar nicht. Brauchst du nicht.

    struct scene{
        virtual void draw(OpenglKram *oglk) const = 0;
    };
    
    struct Kreis : public scene{
        void draw(OpenglKram *oglk) const override{
            //ich weiß dass ich ein Kreis bin und wie ich mich mithilfe von OpenglKram male
        }
    };
    

    Der OpenglKram ist für alle scene-Objekte gleich und wie die sich malen ist ihre Sache. Es gibt keine allgemeine draw-Funktion die ein scene-Objekt nimmt, sondern nur spezielle draw-Funktionen, jeweils eine pro Ableitung von scene.



  • Ich habe das Problem nicht verstanden, deswegen werfe ich mal double dispatch in den Raum.



  • ja denke die möglichkeit von nwp3 ist gut, da ich aktuell eh kaum rendering-targets habe...

    danke euch


Anmelden zum Antworten