Sie selbst zeichnende bewegte Objekte



  • Hi,
    ich möchte ein einfaches 2D Object (z.B. Umriss von einem Auto) zeichnen. Die Koordinaten werden durch einen Thread verändert, d.h. das Objekt soll sich über die Oberfläche fortbewegen. Wie kann man soetwas flüssig mit der Winapi realisieren?



  • Naja mit WinApi ist wohl dann nur über GDI(+). Aber ob du damit das Flüssig hinbekommst weis ich nicht, die soll sehr langsam sein. Wie Komplex soll das denn sein? Richtig 3D? Wenn ja warum nutzt du nicht opengl oder DirectX die haben ja schon Methoden und alles um 3D-Modelle zu Zeichnen usw.

    MfG schirrmie



  • Ansonsten ist Double-Buffering eine recht gebräuchliche Methode. Wenn du das Auto normalerweise direkt in den Window-DC zeichnest, aktualisiert Windows dein Fenster nach jeder Operation.
    Man kann aber auch eine kompatible Bitmap erstellen (CreateCompatibleBitmap, hat selbe Farbtiefe), in die du zeichnest und dem DC dann diese zuweist. Das vermeidet Flickern und sollte ne Ecke schneller laufen...



  • Die Sache ist die: Ich verwende einen Kernel für Darstellung von Geodaten welcher mit der Win32-API arbeitet. Über die vom Kernel generierten Landschaft sollen einfache 2D Objekte "fahren". Solange der Anwender nicht die Position auf der Karte verändert, oder denn Zoom sollten nur diese Objekte neugezeichnet werden



  • Mal ne dumme Frage: Ist es möglich auf dem DC von der Win32-API aus mit OpenGL zu arbeiten?



  • Hm, hab ich keine Ahnung von, aber so dumm ist die Frage nicht 🙂
    Immerhin gibts ja sehr wohl eingebettete OpenGL- oder DirectX-Sachen.

    Edit: Hab grad was gefunden: http://www.nullterminator.net/opengl32.html.

    Auszug:

    www.nullterminator.net/opengl32.html schrieb:

    Device Context

    The first step to initializing OpenGL under Win32 is to grab a device context (DC). Since we're drawing to a window, we simply use the Win32 API function GetDC. There are other alternatives, such as BeginPaint, but GetDC will suffice. We only need the window's handle (hWnd). Simply make a call to GetDC to get a valid DC.

    HDC hDC = GetDC( hWnd );

    Once we're done with OpenGL and any other drawing, we call the function ReleaseDC to tell Windows we're done drawing for now.

    ReleaseDC( hWnd, hDC );

    Sieht gut aus, würde ich sagen 🤡


Anmelden zum Antworten