Pixel schnell einstellen

8

Ich habe gesucht und nach einer guten Antwort gesucht und bin dabei, vor Frust zu weinen. Ich bin ein Hobby-Programmierer, ich mache keine Dinge, weil sie Sinn machen, oder sie sind der richtige Weg, sie zu tun. Ich mache sie, um zu lernen, wie es geht, und jetzt bin ich ratlos.

Ich möchte einzelne Pixel auf dem Bildschirm einstellen. Das klingt vielleicht einfach, aber es sind meine anderen Bedingungen, die es schwierig machen. Ich muss das schnell machen, CPU nur, 20 fps oder besser (mit anderen Programmelementen natürlich ausgeführt), auf einem 400 x 300 Bildschirm oder besser (Vollbild?).

Ich habe einige coole Bilder mit Programmen erstellt, die ich in Python geschrieben habe, die Pygame verwenden, aber es dauert 50 Millisekunden, um einen 100px x 100px Bildschirm mit zufälligen Pixeln zu füllen (das sind meine 20 fps genau dort und andere Programmbits verlangsamen es) unten mehr). Idealerweise würde ich es lieben, mein eigenes (mieses) 3D-Spiel zu machen, das nur die CPU verwendet und Pixel auf dem Bildschirm setzt (vielleicht eine Voxel-Octree-Art von Grafik).

Gibt es eine Möglichkeit (mit jeder Sprache, aber vorzugsweise Python), die ich möchte, ein 2D-Array von Pixelwerten (mehr wie 3D-Array mit RGB) (ist dies eine Bitmap?) im RAM und dump es auf auf dem Display oder etwas? Wäre das nicht schnell ??? Wie verbinden Sie sich direkt mit den Pixeln eines Fensters? Argh! Ich bin so ahnungslos. Ich bin kein Programmierer Noob. Gib mir alles, was du auf mich werfen kannst, ich kann es verdauen. Ich brauche nur ein paar Hinweise (haha) in die richtige Richtung.

    
Void Star 19.08.2011, 05:01
quelle

5 Antworten

4

Wenn Sie Ihre eigene "für jedes Pixel" -Mathematik erstellen möchten (im Gegensatz zum Verschieben von Kreisen und Bitmaps), müssen Sie dies in C (oder C ++) tun, um annähernd die Maschinengeschwindigkeit zu erreichen.

Andererseits, wenn Sie ein komplettes Spiel machen wollen, wird es keinen Spaß machen, alles in einer Low-Level-Sprache wie C zu schreiben. Sie müssen schnellen C-Code mit einigen High-Level-Skripten kombinieren Sprache. Mit Python können Sie über numpy zu einem C-Erweiterungsmodul brücken, oder Sie können eine Sprache wie Lua in C-Code einbetten, oder Sie können versuchen (oh Horror), High-Level-Codierung in C ++ zu lernen. So oder so wird es kompliziert.

Wenn Sie nur mit schnellem Pixel-Rendering spielen möchten, empfehle ich die Verwendung von SDL (das ist, was pygame intern verwendet), aber nur mit C oder C ++. Folge einem Tutorial wie diesem und hab Spaß.

Wenn Sie im Komfort von Python bleiben wollen, schlage ich vor, dass Sie zunächst ein 2D-Spiel ausprobieren (Laden und Bewegen von Bitmaps) oder mit Cairo experimentieren (geometrische Formen rendern).

    
maxy 19.08.2011, 09:33
quelle
3

Ich kann über 20 fps bei einer Auflösung von (1920.1080) mit pygame erreichen.

Wie Mallett darauf hingewiesen hat, sollten Sie die pygame.surfarray.blit_array () - Funktion verwenden, um die Pixeldaten in pygame zu kopieren, und dann den Bildschirm mit einem Aufruf von pygame.display.flip () aktualisieren.

%Vor%     
user545424 21.08.2011 20:48
quelle
1

Was Sie wirklich für PyGame tun möchten, ist pygame.surfarray oder pygame.pixelarray. Nachdem Sie die Werte im Array festgelegt haben, kopieren Sie sie alle auf einmal. Wenn Sie die Dokumentation zu "surface.set_at (...)" lesen, in der Pixel einzeln festgelegt werden, sehen Sie, dass dies nicht für alle Aufgaben mit Ausnahme der kleinsten empfohlen wird.

pygame.surfarray und pygame.pixelarray basieren normalerweise auf NumPy oder Numeric (verwenden Sie NumPy). Googling produziert Ссылка , was Ihnen einen grundlegenden Überblick über einige der großartigen Dinge gibt, die Sie tun können.

    
imallett 21.08.2011 19:46
quelle
0

Ihr müsst bitblit nachschauen. Obwohl ich in Python noch keine Bit-Blit getan habe, ergab das Googeln vielversprechende Ergebnisse . Hier ist eine verwandte Diskussion von Grafik Edelsteine ​​ p.134 , wo sie ähnliche Probleme diskutieren.

    
vine'th 19.08.2011 07:04
quelle
0
  

Blockquote Gibt es eine Möglichkeit (mit jeder Sprache, aber vorzugsweise Python), die ich möchte, machen Sie ein 2D-Array von Pixelwerten (mehr wie 3D-Array mit RGB) im RAM und dump es auf dem Display oder etwas?

Ja, das nennt man Frame Buffer . Sie zeichnen die Bitmap im Speicher und tauschen dann diesen Speicher in den Speicher des Displays aus.

    
Jason Hernandez 19.08.2011 07:03
quelle

Tags und Links