Grafikprogrammierung in C++



  • Hallo Community,

    Ich benutze Rad Studio 2009, C++, und
    Momentan ist es so, das ich meine Grafiksymbole, die ich in meinem Programm benutze, als Objekt (TImage) zeichne. Wichtig ist für mich das die Objekte Skalierbar sind. Also ich nicht unbedingt einen Pixelsalat bekomme.
    Also z.B ein Kreis, Rechteck, Linie, ect. zusammengefügt das es bestimmte Symbol ergibt.
    Jedoch ist das alles recht "Schlicht".
    Daher die Frage:

    Was benutzt ihr unter C++ für grafische Objekte / Effekte ?

    Gibt es Fertige Komponeten die Ihr benutzt ?
    Verwendet ihr Open GL , Direct X oder Flash ?

    Was ist sinnvoll, um eine aussagekräftige Grafik zu erstellen bzw. so eine Art Zeichenprogramm?

    Edit:
    Es geht rein um die Darstellung von Körpern, die gemeinsam ein Bild/Schema abbilden. Diese Objekte sollten aber auch erstellbar sein.
    Also Eine Komponente bzw. Art die es ermöglicht ein Höherwertiges Paint zu programmieren 🙂

    Danke



  • Hallo

    Wenn du wirklich deine Grafikausgabe skalierbar halten willst, dann darfst du auf interner Verwaltungsebene keine Bitmaps verwenden, sondern "Vektoren". Wenn du also ein Objekt aus einem Kreis mit einer Linie durch den Mittelpunkt verwaltest, dann speicherst du 2 Elemente : Kreis mit Mittelpunkt [x,y] und Durchmesser [z], dazu noch Linie mit Anfang [a,b] und Ende [c,d]. Die Werte sind dabei auf Basis einer virtuellen Zeichenfläche (mit möglichst hoher Auflösung), die nichts mit einer Canvas-Auflösung zu tun hat. Erst wenn du die Elemente auf ein konkretes Canvas zeichnen willst, rechnest du deine virtuellen Werte um, indem du die Auflösungen von Virtueller Zeichenfläche und konkreten Canvas ins Verhältnis setzt.

    bis bald
    akari



  • Und welchen Weg der Ausgabe empfiehlst du / schlägst du vor ?

    Ergänzung:

    Ich will z.B. eine Art (Schalt)Plan zeichnen können und diesen wieder Darstellen.
    Momentan passiert dies mit Canvas auf einem Image.
    Da dies jedoch nicht viel her gibt würde ich dies grafisch gern ansprechender lösen. Und hierfür suche ich Vorschläge, Empfehlungen, Komponenten.



  • Hallo

    Was verstehst du unter "gibt nicht viel her"? Auf einem Canvas kannst du alles machen. Windows und die VCL bieten grundlegende Manipulation bis auf Pixelebene an. Alle aufwendigeren Darstellungen kannst du aus den Grundfunktionen zusammensetzen. Daran ändert sich erstmal auch nichts, wenn du statt desen auf DirectX oder so umsteigst. Auch dort must du erstmal deine Elemente manuell darstellen.
    Ich könnte mir vorstellen das es für die VCL im Netz bereits Komponenten gibt, die so einen Schaltplan abbilden. Wenn du passende findest, kannst du die bei dir importieren und verwenden.

    bis bald
    akari



  • Momentan bin ich mit meiner Darstellung hier:

    http://www.etm-gmbh.de/Anlagendateien/C8_1LT 2BE_V1/index-Dateien/image002.jpg

    und da ist ungefähr das wo ich hin will:

    http://www.etm.at/images/b_gedi_gr.jpg

    und ich denke das hierfür mehr brauche als das normale canvas.

    Eventuell liegt die Erstellung dieser Objekte ja auch in HTML oder ähnlichem und ich muss sie dann nur in C++ darstellen.
    eventuell hat ja hier schon jemand erfahrung mit so etwas.



  • Hallo

    Nein, auch das zweite Programm führt definitiv Zeichenoperation durch. Auch für die Farbverläufe zum Beispiel gibt es WinAPI-Funktionen. Natürlich must du manuell die Darstellung zusammenstellen. Auf dem Bild ist jetzt nicht erkennbar, was davon einfache vorbereite Bitmaps und was skalierbare Echtzeitzeichnungen sind. Zum Beispiel könnten die "Tank"-Elemente noch mit hinreichend wenig aufwand im Programm skaliert und gezeichnet worden sein, gleichzeitg aber die Ventile gleich drunter einfach als Bitmap geladen und kopiert worden sein.
    Ist alles nur eine Frage, wieviel Aufwand du für wieviel Aussehen und Funktionalität betreiben willst.

    Mit der Frage nach HTML und so verrennst du dich aber auf jedenfall.

    bis bald
    akari



  • Also sehe ich das richtig das ich ich mit den Funktionen und dem Werkzeug (Image/Canvas) die ich jetzt verwende, genauso Grafisch ansprechend programmieren kann , wie wenn ich OpenGL oder DirectX programmiere, ich muss nur entsprechendem Aufwand treiben?

    Ich sage Danke für deine Hilfe.
    🙂



  • Ich möchte mein Thema nochmal in den Vordergrund rücken.
    Und zwar habe ich mich entschlossen nochmal von vorne anzufangen. und von vorne anzufangen heißt ja auch andere möglichkeiten in betracht ziehen.
    Hier bin ich auf eure Erfahrungen, Informationen , Kenntnisse angewiesen.

    Folgendes habe ich probiert :
    - Programmieren eigener Objekte in C++ auf Basis eines TImages und dessen Canvas.
    Der aufwand ist enorm ,z.B. eine Gauge, grafisch zu Programmieren und dann mit entsprechenden Funktionen zu versorgen. Mein Problem hier ist die Optik , das Flackern, da ich bei Wertänderung komplett neu zeichnen muss.

    - Laden von fertigen Bildern (BMPs,GIFs) in Images, Bei Gifs ist hier auch dieses andauernde flackern. Ich habe versucht auf das geladene Bild ein weiteres Objekt zu legen, das z.B. mein Zeiger für die Gauge ist. Jedoch muss ich hier ja auch schräge Zeiger können. Folglich muss mein Zeigerobjekt ähnlich groß wie das Bild sein und dann eben auch noch Transparent. Aber dann kann ich gleich wieder alles zeichnen, weil es wieder flackert.

    Folgendes hätte ich gerne :

    (- Fertige Komponente)
    - Flackerfrei
    - Skalierungsfähig
    - Optisch ansprechend
    - Animationen

    Meine Frage an euch:
    -Wie setzt ihr grafische Objekte mit C++ um ?
    -Welche Komponenten benutzt ihr ?
    -Ist eine andere Programmiersprache (C#,Java,PHP,JavaScript,...) besser für mein anliegen geeignet ?
    - Kennt jemand solche Packeges, Komponenten für Compiler die ähnliches beinhalten , bieten?
    - Lösungsansätze?

    Danke für eure Hilfe.



  • Ein Beispiel: http://www.mitov.com/html/instrumentlab.html
    Das Werkzeug, mit dem die Sachen erstellt wurden, gibt's dort gleich mit: http://www.mitov.com/products/igdi+



  • Das sieht sehr vielversprechend aus.
    Danke 🙂



  • das "flackern" bekommst Du weg wenn du Deine Elemente auf ein Panel stellst umd dem Panel die Property "double buffered" auf true setzt.



  • Ne Frage zu dem IGDI+ Werkzeug Herr Jansen.

    Es gibt dieses IGDI+ Werkzeug von motive und man kann ein
    GDI+ Werkzeug "installieren" dessen ".dll" schon im Compilerverzeischnis hinterlegt ist.

    Welches eignet sich nun besser für C++ Programmierung unter Codegear?
    Wenn ich ähnliche Komponenten wie die des InstrumentalLAB erstellen will wird sich wohl das IGDI+ von motive anbieten oder ?

    Haben Sie bereits erfahrungen mit dem Werkzeug ?
    Könnten Sie mir gegenfalls Beispiele zukommen lassen?

    Das Beispiel von Motive ist in Delphi und sämtliche Anpassungen meinerseits schlagen fehl.

    Danke

    @Sabaoth
    Danke für den Hinweis, das habe ich schon länger gesucht.


Anmelden zum Antworten