Leveleditor



  • Guten Abend,

    in der Hoffnung in der richtigen Kategorie gelandet zu sein würde ich gern ein paar Fragen zur Programmierung eines Leveleditors stellen.

    Das Problem ist ein Editorfenster mit den klassischen 4 Ansichten. Oben, Unten, Seite, Render. Das Render soll DirectX übernehmen. Programmiert wird das Ganze in C++ unter Verwendung von wxWidgets.

    Mich würde folgendes interessieren:

    Wie kann ich am Besten ein Raster rendern? (praktisch Linien unterschiedlicher Dicke)

    Die verschiedenen Ansichten werden durch eine swapchain gerendert.

    Sollte ich jedes Fenster separat betrachten oder die Szene praktisch als Basis nehmen und mit verschiedenen Kamerapositionen rendern? (Falls so überhaupt möglich)

    Also eigentlich gehts um die Grundlagen der Editorprogrammierung.

    Ich hoffe ihr könnt mir ein wenig weiter helfen.



  • Die Renderscene würde ich mit direct3D machen, und die Seitenansichten würde ich ganz einfach mit der WinAPI oder halt wxWidgets machen. Die Seiten ansichten sind doch eh 2D, ich kenne mich mit wx nicht aus, aber da gibt es doch bestimmt eine Funktion mit der man Linien zeichnen kann.


  • Mod

    du kannst doch ganz normal mit D3D auf nen linienmodus stellen, zur not musst du neue indexbuffer anlegen, aber das ist auch schon alles.

    da steht wohl alles was du wissen wolltest: http://msdn.microsoft.com/en-us/library/bb205124(VS.85).aspx



  • Weiß jemand, ob die MFC 2D-Geometrie darstellen kann? Ich werde mal nen tieferern
    Blick in widgets werfen.

    edit: Ok mit wxWidgets sollte man was akzeptables für die 2D-Ansichten herstellen können: http://docs.wxwidgets.org/stable/wx_classesbycat.html#classesbycat

    Vielleicht hat ja noch Jemand ein paar Ideen zum Thema Zoom.



  • 2D Zoomen?

    Das sollte kein problem sein. Wenn du nun den Anfang und das Ende der Linien der Raster hast, multiplitzierst du die Positionen mit dem Zoom Faktor.

    Line(Vec2(5*zoom, 0*zoom), Vec2(5*zoom, 30*zoom));

    Dadurch werden die Positionen verändert, so das es aussieht als hätte man ran gezoomt, aber die breite der Linien bleibt bei 1 Pixel!


  • Mod

    es ist irgendwie unsinnig zwei verschiedene renderer fuer die geometrie zu nutzen, im besten fall werden die gui-renderer wieder auf einer hardware api aufsetzen wie z.b. d3d oder opengl, oder langsam in software rendern.
    zusaetzlich muss man dann zweimal die daten fuer die geometrie halten.
    was fuer einen vorteil soll das alles bieten gegenueber einer einfachen orthogonalen projektionsmatrix und dem nochmaligen rendern von allem?

    das ist wohl der grund weshalb es kein guter editor so macht, sondern einfach nur eine 3d-API nutzt.



  • Du meinst also alles über d3d direkt schieben, wenn man eh schon ein "Render-Previw" hat. Müsste ich bei einer orthogonalen Projektion nicht den Zoom gleich in die Projektionsmatrix mit einfließen lassen können?



  • Ne das war eigentlich gemeint wenn du die Raster etc mit wxWidgets zeichnest.


  • Mod

    Leath schrieb:

    Müsste ich bei einer orthogonalen Projektion nicht den Zoom gleich in die Projektionsmatrix mit einfließen lassen können?

    genau, zoom, rotation, usw.
    das sollte reichen um die ansichten zu machen.
    line rendering kann man auch erstmal einfach durch das in meinem oberen link angegebenen flag einschalten.



  • Jo, also über die Primitive Topologie. Wie könnte ich am Besten die Liniendicke steuern?

    Code-Walker schrieb:

    Ne das war eigentlich gemeint wenn du die Raster etc mit wxWidgets zeichnest.

    Also ich hab den Post von rapso:

    rapso schrieb:

    es ist irgendwie unsinnig zwei verschiedene renderer fuer die geometrie zu nutzen, im besten fall werden die gui-renderer wieder auf einer hardware api aufsetzen wie z.b. d3d oder opengl, oder langsam in software rendern.
    zusaetzlich muss man dann zweimal die daten fuer die geometrie halten.
    was fuer einen vorteil soll das alles bieten gegenueber einer einfachen orthogonalen projektionsmatrix und dem nochmaligen rendern von allem?

    das ist wohl der grund weshalb es kein guter editor so macht, sondern einfach nur eine 3d-API nutzt.

    so verstanden, dass er es für unsinnig hält, wenn man einmal das 3D-Preview selbst über d3d erzeugt und auf der anderen seite der GUI die 2d Arbeit für die 3 Ansichten überlässt, weil man dann 2x die Geometrie halten müsste und das GUI auch nix anderes macht als d3d o.ä. anzusprechen(im günstigsten falle)



  • ich würd alle ansichten mit 3d machen. jede ansicht ist ein eigenständiges controll mit eigenen render states und world / view / projection matrizen, aber alle holen ihre daten aus der selben quelle (MVC!).

    wenn du nur ein level auf einmal gestalten willst, dann macht es auch sinn nur ein level auf einmal im speicher zu haben 😉

    wichtig wäre nur, nicht wie in einem spiel in einem loop neuzuzeichnen, sondern immer nur dann, wenn sich was geändert hat. eventuell muss man bei der aktualisierung von 4 views noch etwas effizienter vorgehen, weil sich die fps vierteln.

    nebenbei: wenn du die 3d ansicht mit GDI zeichnen willst vermute ich mal, dass du nicht glücklich werden wirst, weil das einfach schrecklich langsam ist und bei komplexeren szenen ohne ende flackern wird. man kann linien auch mit direct3d zeichnen, was unvergleichbar schneller ist. müsstest du einfach mal googeln.


Log in to reply