Pixelansteuerung und Grafikprogrammierung



  • Hallo!

    Ich habe mal eine Frage an diejenigen die sich etwas mit Grafikprogrammierung auskennen.

    Meine Frage ist einfach.

    Ich möchte gerne Pixelgenau ansteuer und natürlich auch (als nächsten Schritt) Farbsteuerung und Shading mit rein nehmen.
    Geplant ist damit eine Grafik zu steuern die evt. in ein Grafikprogramm eingebaut werden soll (ähnlich wie AutoCAD).

    Leider gehört die Grafikprogrammierung nicht zu den Ausbildungsthemen in Programmieren (hab ich erfragt).

    Im Netzt habe ich nur einige etwas konfusen Erklährungen gefunden.

    Meine Vorkenntnisse sind vielleicht nicht Rosig, aber Klassen und Strukturen beherrsche ich recht gut. Auch mit Funktionen und Vererbung habe ich mich schon beschäftigt.

    AM liebsten währe mir eine Anleitung wie ich einzelne Pixel auf dem Bildschirm (ohne MFC also für DOS und Linux ebenfalls einsetzbar) ansprechen kann. Den Rest dürfte ich mir selber herleiten können 😉

    Vielen Dank schon mal im Vorraus.

    Lodrill



  • Um mit C++ Graphik-Programmierung zu machen braucht man eine externe Library, sonst geht gar nix, noch erst recht nicht Crossplatform!

    Aber hier wären zwei Libs:
    http://www.libsdl.org/index.php

    und
    http://www.allegro.cc/

    Mit beiden habe ich schon ein paar kleine Sachen gemacht und sie sind relativ einfach zu benutzen. Um einzelne Pixel zu zeichne kann ich dir speziell Allegro empfehlen mit rund 10 Zeilen Code hast du da schon ein Fenster geöffnet und kannst Pixel setzen. Am Schluss kannst du dann dein Programm unter Linux, Dos, Windows uns sogar noch ein paar anderen Platformen compilieren.

    Übrigens gibts hier ja noch extra ein Graphik- uns Spieleprogrammier-Forum...



  • allegro würde ich erstmal ohne "gl" nutzen.
    der passende link dazu
    http://www.talula.demon.co.uk/allegro/

    im spieleforum - faq gibt es noch ein paar hinweise, wohin du sicher nachher auch verschoben wirst 😉



  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke soweit schon mal! Ich werde mir das anschauen!

    Also rein Theoretisch sollte es auch gehen ohne Vorgefertigte Bibliotheken (wie geasagt ich wollte es ohne MFC machen) zu schaffen!

    Ich meine eine Bibliothek ist auch nichts anderes als eine Sammlung schon geschriebener Routinen 😉 Ob nun in C++ oder in Assembler.

    Ich hatte eigendlich eher nach einer Antwort gesucht wie ich die Schnittstellen selber anspreche (also die Grafikkarte die ja dann den Pixel in ein Datenwort umwandelt und weiter gibt an den Monitor).

    Das es mit MFC geht ist mir klar. Wenn ich damit arbeiten wollte würde ich mir die Visual C++ Online Hilfe anschauen 😉

    Es ging darum auf einer nicht-Windows-Oberfläche (DOS zum Beispiel) eine eigene Schnittstelle zu programmieren und nach eigenen Bedürfnissen zu formen.

    Wenn ich die allgemeinen Bibliotheklen nehme (Wird im allgemeinen die "Engine" benutzen bezeichnet) dann währe das ja keine neue 3D Engine 😉 Sie währe nicht schneller und nicht anders als schon vorhandene 😉

    Nunja ich schaue mal was ich aus den Links raus holen kann!

    Danke!

    Vielleicht schaue ich mir mal die Bibliotheken von innen an um so die Ansteuerung zu erarbeiten!

    Gruß

    Lodrill



  • Lodrill schrieb:

    Es ging darum auf einer nicht-Windows-Oberfläche (DOS zum Beispiel) eine eigene Schnittstelle zu programmieren und nach eigenen Bedürfnissen zu formen.

    Witzbold! 🙄



  • So einen hatten wir doch schon vor Kurzem. Schade, das die Suche grad aus ist.

    Bye, TGGC \-/



  • Wenn du dir tatsächlich selbst ne Lib zusammenstellen willst brauchst du nicht nur Programmierkenntnisse, sondern auch ne ganze Menge Mathekenntnisse.



  • ...und vor allem Hardware-Kenntnisse von GraKas...



  • Okay ich habe mich mal mit einem Befreundeten Programmierer beraten 😉

    Werde mich da mal rantasten 😉

    Vielen dank für die Tips und hilfe!

    Lodrill



  • Ich find die frage gar nicht so schlecht und interessant wäre es sicherlich, deshalb kann ich reaktionen wie "du witzbold" nicht verstehen.
    Ich hab mich auch mal dafür interessiert; aber du wirst feststellen, das sowas eigentlich wenig spassig/interessant ist wenn du dich mit nervigen Hardwaredetails bzw. unetrschiedlichen Hardwareschnittstellen rumschlagen musst!
    Wo man eine referenz zu diesem thema findet weiß ich auch nicht.
    Aber ich glaube du kannst das was du erreichen willst auch tun, wenn du einen pointer auf den screen-Array hast und dann auf dieser Basis 3D-Ausgabe machst bzw. dir eine 3D-Engine erstellst. So mache ich es zur zeit, und es funktioniert ganz gut weil man alle mathematischen Algorithmen selbst implementieren muss und da lernst du sehr viel.

    Natürlich ist die Darstellung recht langsam da software.

    Ich denke, am screen-array selbst zu arbeiten gehört zu den Bereichen der grafik, die am meisten low-level sind (außer natürlich bios/dos grafik usw)



  • Man kann doch mit irgendwelchen Asm Interrupts in einen Grafik Modus wechseln (glaub Standard VGA). So richtig glücklich wirst du allerdings nicht damit werden, denn wirst kaum eine Auflösung über 640x480 kriegen.



  • randa schrieb:

    Ich find die frage gar nicht so schlecht und interessant wäre es sicherlich, deshalb kann ich reaktionen wie "du witzbold" nicht verstehen.

    Ich finde das auch 'ne kuhle Sache! 👍

    Allerdings klang er nicht so, als ob er im entferntesten wüsste, worauf er sich einlässt... 🙄

    Erstmal braucht's 'nen alten Rechner (P166 oder 486er) dafür, mit DOS, denn sowas unter WinXP & Co. KG zu machen hat wenig Sinn.
    Dafür müsste er sich dann 'nen Compiler organisieren, möglichst mit Doku.
    Im ASM Forum wird er schnell rausfinden, wie er IRQs anspricht (INT 13h und Konsorten), um in einen bestimmten (von der GraKa unterstützten) Grafikmodus zu wechseln.
    Dann kann's langsam losgehen...

    Genausogut könnte er sich aber auch'n C-64 bei ebay ersteigern und darauf dann den VID und SID programmieren... 🤡



  • Lodrill schrieb:

    Wie wurde denn auf DOS Basis programmiert?

    Ich suche eben [...] einen der [...] ahnung von programmieren hat

    Bin ja schon da.

    IIRC:

    mov     al,13h
    	int     10h
    
    	push    0a000h
    	pop     es
    
    	mov     al,5
            mov     bx,32100
            mov     es:[bx],al
    

    Und zeig mal was du dann soll Tolles damit bastelst...

    Bye, TGGC \-/



  • Dann noch schwabbeldirapp

    char far *video_buffer = (char far)0xA0000000L;
    
    for(int index=0; index<64000; index++)
        video_buffer[index] = 0;   // mit schwarz füllen
    
    void Plot_Pixel(int x, int y, char color)
    {
        video_buffer[320*y+x] = color;
    }
    

    ...und dann hast Du's auch schon fast... 🤡 😋 👍



  • Warum so low-level?
    Machs mit dx. Es sind nur ein paar zeilen code nötig: ein fenster erzeigen, ddraw initialisieren und cooperative level setzen => nicht viel, und selbst wenn man sich nicht auskennt kann man ja vorläufig copy&pasten, und dies dann benutzen, indem man von der surface den screen-pointer holt. Das kann man dann schön in einem fenster machen und muss sich nicht mit dos auseinandersetzen.


  • Mod

    randa schrieb:

    Warum so low-level?
    Machs mit dx. Es sind nur ein paar zeilen code nötig: ein fenster erzeigen, ddraw initialisieren und cooperative level setzen => nicht viel, und selbst wenn man sich nicht auskennt kann man ja vorläufig copy&pasten, und dies dann benutzen, indem man von der surface den screen-pointer holt. Das kann man dann schön in einem fenster machen und muss sich nicht mit dos auseinandersetzen.

    wozu so lowlevel? einfach mit paint nen pixel setzen und abspeichern. nichtmal ein recompile nötig 😉

    oft ist der weg das ziel, sonst gebe es so lustige sachen wie TMDC nicht.

    rapso->greets();



  • OMFG, immer diese Vorurteile. 😮
    =>

    Sgt. Nukem schrieb:

    Erstmal braucht's 'nen alten Rechner (P166 oder 486er) dafür

    ...mit einem aktuellen 1CPU-System und DOS, bzw. Win9X oder aelter klappt das aber auch hervorragend (solange bei Win9x nicht mehr als 512MB Speicher drin sind 😉 ).

    Sgt. Nukem schrieb:

    Genausogut könnte er sich aber auch'n C-64 bei ebay ersteigern und darauf dann den VID und SID programmieren... 🤡

    Stimmt, das waere bestimmt auch lustig, tut aber hier nichts zur Sache... :p

    tasti schrieb:

    Man kann doch mit irgendwelchen Asm Interrupts in einen Grafik Modus wechseln (glaub Standard VGA). So richtig glücklich wirst du allerdings nicht damit werden, denn wirst kaum eine Auflösung über 640x480 kriegen.

    Jo, mit VGA kommst du nicht ueber 640*480, jedoch gibt es (AFAIK seit 1993) so einen netten Standard (VESA), der auch hochaufloesende Grafikmodi unterstuetzt.
    Mit meinem 10Jahre alten 486DX-Board bekomme ich so auch schon 1024x768x8 hin - und das ganz ohne Windows oder dx. 😉



  • randa schrieb:

    Warum so low-level?
    Machs mit dx. Es sind nur ein paar zeilen code nötig: ein fenster erzeigen, ddraw initialisieren und cooperative level setzen => nicht viel, und selbst wenn man sich nicht auskennt kann man ja vorläufig copy&pasten, und dies dann benutzen, indem man von der surface den screen-pointer holt. Das kann man dann schön in einem fenster machen und muss sich nicht mit dos auseinandersetzen.

    Öhh... hattest Du ihn nicht erst noch unterstützt?!? 😕

    Das war doch der Sinn der Sache... 🙄

    Nobuo T schrieb:

    OMFG, immer diese Vorurteile. 😮
    =>

    Sgt. Nukem schrieb:

    Erstmal braucht's 'nen alten Rechner (P166 oder 486er) dafür

    ...mit einem aktuellen 1CPU-System und DOS, bzw. Win9X oder aelter klappt das aber auch hervorragend (solange bei Win9x nicht mehr als 512MB Speicher drin sind 😉 ).

    Öhh... ja. Stimmt. Logisch. Ich denke immer an meine alten Zocks (LucasArts & Co.) ... 😃
    Trotzdem lasse ich auf meine 120 Gig Platte / WinXP nicht noch DOS los...
    Und so'n alter Rechner is' ja auch schnell besorgt...

    Mal 'ne ernsthafte Frage: Läuft das eigentlich auch auf Athlon64 ?

    Nobuo T schrieb:

    tasti schrieb:

    Man kann doch mit irgendwelchen Asm Interrupts in einen Grafik Modus wechseln (glaub Standard VGA). So richtig glücklich wirst du allerdings nicht damit werden, denn wirst kaum eine Auflösung über 640x480 kriegen.

    Jo, mit VGA kommst du nicht ueber 640*480, jedoch gibt es (AFAIK seit 1993) so einen netten Standard (VESA), der auch hochaufloesende Grafikmodi unterstuetzt.
    Mit meinem 10Jahre alten 486DX-Board bekomme ich so auch schon 1024x768x8 hin - und das ganz ohne Windows oder dx. 😉

    Jups -> Siehe Arachne Browser, Zocks auf der BUILD Engine, etc. pp



  • Lodrill schrieb:

    Wenn ich die allgemeinen Bibliotheklen nehme (Wird im allgemeinen die "Engine" benutzen bezeichnet)

    Irgendwie habe ich das Gefühl, dass du nicht mal genau weißt, WAS eine Engine genau ist. 🙄


Anmelden zum Antworten