Graphiken verändern und verschieben



  • @DocShoe sagte in Graphiken verändern und verschieben:

    @hustbaer sagte in Graphiken verändern und verschieben:

    @DocShoe sagte in Graphiken verändern und verschieben:

    Ich glaube, dass die WinAPI nur eingeschränkt dazu fähig ist, was Vernünftiges auf den Bildschirm zu bringen, dazu braucht man schon ein Multimedia Framework wie DirectX oder OpenGL.

    Definiere vernünftig.

    Das fängt doch schon damit an, dass man mit der WinAPI keine guten Timer hat, die man für eine flüssige Darstellung von Animationen braucht.

    Weiss nicht genau was du mit Timer meinst, DirectX hat doch gleich gar keine Timer...? Was mit DX allerdings geht ist Present() mit VSync. Da ist es tatsächlich etwas doof dass es da ausserhalb von DirectX nix vernünftiges gibt. (Also es gibt DwmFlush, aber das setzt halt nen aktiven DWM voraus.)



  • @znieh99 sagte in Graphiken verändern und verschieben:

    @Th69 sagte in Graphiken verändern und verschieben:

    Möchtest du denn unbedingt mit der rohen WinAPI arbeiten? Nimm doch ein GUI-Framework (Qt, wxWidgets, ...) oder eben auch SFML.

    Ich dachte mir, dass die WinAPI die Basis für alle GUI-Frameworks ist.
    lg heinz

    Kommt jetzt drauf an was du mit WinAPI meinst und von was für GUI Frameworks wir reden. Wenn mit WinAPI die "klassische" WinAPI gemeint ist (KERNEL32, USER32, GDI, GDI+), und bei GUI Frameworks auch etwas modernere wie WPF & Co gemeint sind, dann ist die Antwort: nö. Denn einige moderne GUI Frameworks verwenden Direct3D bzw. OpenGL um ihr Zeuchs anzuzeigen.


  • Mod

    Du wirst kein besserer Autofahrer, wenn du vor der ersten Fahrstunde lernst, wie man einen Motor konstruiert.

    Du wirst kein besserer Musiker, wenn du damit beginnst, selber ein Instrument zu schnitzen.

    Du wirst kein besserer Programmierer, wenn du zuerst mit Assembler beginnst.

    Du wirst keine besserer GUI-Frameworknutzer, wenn du zuerst mit WinAPI beginnst.

    Es ist wahr, dem Profi mag es später nutzen, wenn er das letzte aus seinem Auto/Instrument/Programm/GUI rausholen will, wenn er die darunter liegenden Vorgänge versteht. Aber für den absolut überwiegenden Teil aller Anwendungsfälle, und ganz besonders für alle Anfänger gilt: Lerne direkt das, was du lernen möchtest!

    PS: Und eine zweite Sache: Du hast ein XY-Problem, bei deiner Frage danach, wie man Grafiken skaliert, obwohl dein eigentliches Problem ist, wie man ein Feuerwerk macht. Ein XY-Problem hat man oft. Es ist eine nützliche Fähigkeit, das selber erkennen zu können, damit man sich nicht zu sehr auf Problemlösungen versteift, die nicht zum Erfolg führen. Daher empfehle ich dir, selbst zu reflektieren, warum dir das hier passiert ist, und wie du das in Zukunft vermeiden kannst.
    Das gilt wohl auch bei deinem Vorhaben allgemein, wie man mit der WinAPI umgeht, wenn es dir anscheinend doch in Wahrheit darum geht, andere Frameworks besser zu verstehen.



  • @SeppJ
    Nun, ich weiß logisch schon wie man ein Feuerwerk entwickelt (habe es in Java programmiert), aber mir fehlt in C++ das Wissen über die Werkzeugkiste. Ich glaube das ist mein Problem.


  • Mod

    @znieh99 sagte in Graphiken verändern und verschieben:

    @SeppJ
    Nun, ich weiß logisch schon wie man ein Feuerwerk entwickelt (habe es in Java programmiert), aber mir fehlt in C++ das Wissen über die Werkzeugkiste. Ich glaube das ist mein Problem.

    Grafiken skaliert anzuzeigen klingt aber nicht wirklich nach der besten oder üblichen Methode, das zu machen.



  • @Th69 sagte in Graphiken verändern und verschieben:

    Und diesen Boilerplate-Code nehmen die (anderen) GUI-Framework einem ab

    Ok, von welchen GUI-Frameworks sprichst du?



  • Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Wenn du bisher noch nie mit externen Libs gearbeitet hast, dann ist das natürlich eine zusätzliche Herausforderung (Installation, Projekteinstellungen, Doku lesen, ...).

    Ich nehme an, du benutzt Visual Studio (Community Edition) als IDE?!
    Dann könntest du auch MFC (ein "Wrapper" der WinAPI) benutzen (empfehle ich zwar sonst nicht, aber ist direkt im VS nutzbar) - gibt auch ein Subforum dazu hier: MFC.

    Edit: Die Doku dazu gibt es unter MFC-Desktopanwendungen sowie als Projekt-Einstieg Erstellen einer MFC-Anwendung.
    Die Doku zu den anderen GUI-Frameworks gibt es auf den zugehörigen Webseiten.



  • @Th69 sagte in Graphiken verändern und verschieben:

    Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Ist der HOWTO-Link noch aktuell? Der Artikel ist von 2008, gleich der erste Link für Qt führt zu trolltech(punkt)com, was jetzt irgendeine Werbe-Website ist - https://www.qt.io/ wäre aktuell. Leider kenne ich mich mit GUIs nicht wirklich aus, aber das wäre ggf. mal überarbeitenswert.



  • Das hatte ich auch gesehen, daher hatte ich selber den aktuellen Link gepostet - mir ging es vorallem um eine Kurzbeschreibung der Frameworks zum Vergleich anzubieten.

    Aber ich wäre auch für eine Aktualisierung des Qt-Links (und @phreck hat weitere Verbesserungen dadrin vorgeschlagen). 🙂



  • @Th69 sagte in Graphiken verändern und verschieben:

    Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Habe mir "Welches Toolkit für GUIS?" durchgelesen und werde mir die Tools einmal ansehen.
    Danke einstweilen



  • Für Qt gibt es einige Animation Framework Examples, welche du als Vorlage für dein Feuerwerk nehmen könntest (d.h. du müßtest dann nur noch Datenmodell und Zeichnen der Feuerwerksobjekte hinzufügen).
    Ähnliches geht aber auch mit wxWidgets oder der MFC.



  • @znieh99
    Die Frage ist auch, Feuerwerk entwickeln ... und was noch ? Also was brauchst du aussen drumherum ? Eine GUI wo Du Eingabefelder, Schieberegler etc hasst ?

    Einfachere Dinge wirst du sicher auch mit GDI Funktionen hinbekommen ....
    Statische Komplexere dinge (die immer fix nach selben muster ablaufen ohne varianz) koennte man als video bauen und in der App einfach ablaufen lassen .... mit Transparenz sollte das auch gehen.

    Dynamische komplexere dinge würde man heutzutage rendern .... feuerwerke über partikel Systeme implementieren.
    Das gerenderte Zeugs kann man ebenfalls mit transparenz über irgendwas drüber blitten lassen 🙂 Wenn man denn den rest eh nicht auch gleich im renderer machen will ...

    Native Renderer sind DirectX, OpenGL, Vulkan .... hat aber nix mit WinApi zu tun, arbeitet aber notfalls damit zusammen.

    Gab mal sehr viel früher beispiele von feuerwerk als Bildschirmschoner als Demo für GDI funktionen .... meinst du sowas ?

    Wenn man heutzutage was "grafiklastigeres" anfangen wuerd .... entweder RenderEngine/ Game Engine
    Oder wenn klassiche Gui im Vordergrund steht und das rendern nurn kleiner Teil ist ... Gui Framework mit Integrierten Renderer (Qt z.b. klassisch WIdgets oder gleich QML)
    Viele Grafik Engines haben Plugins / Lösungen für Partikel Anwendungen (Rauch, Nebel, Wasserstrahlen Feuer Funken auch Feuerwerke) z.b. in von simpel bis hoch qualitativ ...

    Für die Video basierte Loesung nimmt man modellierer (Blender z.b.) her, die haben teilweise auch Partikel basierte plugins, und erstellt mit denen das video ...

    Ja, ich möchte WinAPI gut kennenlernen.

    Warum das denn ? Darf man fragen ?



  • @RHBaum sagte in Graphiken verändern und verschieben:

    Die Frage ist auch, Feuerwerk entwickeln ... und was noch ?

    Das "Feuerwerk" ist eigentlich nur eine Metapher für graphische Bewegungs- und Veränderungsvorgänge mit C++. Ich vertiefe gerade meine C++ Kenntnisse im graphischen Bereich und habe mir halt ein Feuerwerk vorgenommen, da es von der Bewegung, der Größen- und Farbänderung und der Transparenz ein gutes Beispiel ist.

    Zu WinAPI: Nun ich dachte, dass WinAPI sozusagen die Basis aller graphischen Funktionen ist und es daher sinnvoll ist es näher kennenzulernen.
    Diese Diskussion hat mich jetzt jedoch dazu gebracht mir ein paar GUIs (momentan Qt) anzusehen.



  • @znieh99
    Wenn du Grafik-Zeugs machen willst, dann sind GUIs nicht das geeignete Werkzeug. Mit GUIs macht man Fenster und Buttons und so Zeugs, keine Feuerwerke. Wenn du Grafikzeugs machen willst, dann schau dir die APIs dazu an, also Direct3D, OpenGL, Vulkan etc.
    Mit WinAPI geht das natürlich auch, aber halt begrenzt. Einfaches 2D Zeugs geht damit gut, aber wenn man irgendwelche nicht-trivialen Transformationen/Blending/... braucht sind andere APIs besser geeignet.



  • @hustbaer sagte in Graphiken verändern und verschieben:

    Wenn du Grafikzeugs machen willst, dann schau dir die APIs dazu an, also Direct3D, OpenGL, Vulkan etc.

    Danke, ich bin am suchen und lesen.



  • Sorry, aber die rohen Grafik-APIs sind schon sehr fortschrittliche Programmierung (ins. weil man auch noch Shader-Skripte erstellen muß).
    Um die Grundlagen von C++ besser zu lernen, habe ich ja extra GUI-Frameworks vorgeschlagen, so daß man dann die Animationslogik selber berechnet und zeichnen läßt.

    Und selbst wenn man später DirectX, OpenGL oder Vulkan benutzen möchte, so bieten diese Framework oftmals entsprechende Render-Controls dafür an.



  • @Th69

    Sorry, aber die rohen Grafik-APIs sind schon sehr fortschrittliche Programmierung (ins. weil man auch noch Shader-Skripte erstellen muß).

    Ja, da hast du recht. Er hat allerdings danach gefragt wie man das üblicherweise macht, und Grafiken rumschieben/skalieren/rotieren/blenden etc. macht man halt üblicherweise mit OpenGL/Direct3D etc. Also zumindest wenn man etwas live am Bildschirm ausgeben will. Ansonsten gibt's noch Zeugs wie OpenCV. Hat aber auch ne ziemlich üble Lernkurve.

    Um die Grundlagen von C++ besser zu lernen, habe ich ja extra GUI-Frameworks vorgeschlagen, so daß man dann die Animationslogik selber berechnet und zeichnen läßt.

    Und selbst wenn man später DirectX, OpenGL oder Vulkan benutzen möchte, so bieten diese Framework oftmals entsprechende Render-Controls dafür an.

    Also Animationen mit GUI Libraries machen fand ich immer sehr mühsam. Wenn man primär Grafikzeugs machen will, dann gibt es einfachere Wege, wie...

    @znieh99
    Wenn du es dir (viel) einfacher machen willst, schau dir Cinder an.
    Alternativ ginge auch SFML.

    SDL2 sollte man vielleicht auch erwähnen. Wobei ich mir Version 2 nie angesehen habe. Die originale SDL fand ich persönlich ziemlich grausam.



  • @znieh99

    Zu WinAPI:

    Ja, die WinAPI bietet nen ziemlich grundlegenden Zugriff auf Windows ....
    Es ist kein Nachteil die zu kennen, weil man sich ne menge von der funktionsweise aus erklären kann.

    Jeder der z.b. Qt wxWidgets, gtk .... verwendet, sollte vielleicht auch mal eine MessageQueue auf C und WinAPI basis mal implementiert haben. Nur fürs Lernen, nicht für "produktive Zwecke".
    Und das sicher auch nicht gleich während der ersten Tage wenn man den C/C++ Einstieg wagt ...

    C/C++ heutzutage ist in sachen Libs / API gar nicht soo verschieden zu anderen Sprachen ... man wird immer mehrere verwenden. Viel / oft unterschiedliche Bibliotheken lernen. Die am tiefsten liegende (dem OS am nächsten) ist vielleicht oft die flexibelste, aber nicht automatisch die Beste. Selten verwendet man Native (OS basis) Bibliotheken.

    Auch bei Grafik ... IMHO der Trend geht auch mehr zu RenderFrameworks anstatt die nativen Grafik libs (OpenGL, DirectX, Vulkan) zu verwenden. Zum Lernen, Dinge einzuschätzen, verständniss isses aber dennoch Vorteilhaft die konzepte zu kennen



  • @RHBaum sagte in Graphiken verändern und verschieben:

    Jeder der z.b. Qt wxWidgets, gtk .... verwendet, sollte vielleicht auch mal eine MessageQueue auf C und WinAPI basis mal implementiert haben. Nur fürs Lernen, nicht für "produktive Zwecke".

    Wozu das denn?



  • Na damit man besser versteht wie so ne GUI eigentlich funktioniert.
    Ich kannte einige GUI Programmierer die nicht wussten wer wie wo wann ihre Message-Handler aufruft. Die denken dann auch nicht gross drüber nach was passiert wenn sie eine Funktion aufrufen die einen modalen Dialog anzeigt - oder auch einfach nur die MessageBox Funktion. "Das geht schon irgendwie."


Anmelden zum Antworten