Grafiken einfügen?!
-
Moin,
ich habe mich freiwillig dazu bereit erklärt für unseren Unterricht ein C Programm zuschreiben das Grafiken wie z.B. Quadrate o.ä. zeichnet in dem ich die Grafikkarte anspreche (???).
Im Netz bin ich bisher nicht fündig, angeblich soll es eine Funktionsbibliothek dafür gebenDas Programm soll im Endeffekt nur auf Kommando nen Quadrat anzeigen o.ä.
Wäre um ein paar Tipps SEHR dankbar.
Gruß
Sven
-
also wenn du angibst für welches os das sein soll, könnte man spezifischer draufeingehen. würde dir die sdl empfehlen. fall du mit unix arbeitest schau mal nach der ncurses-lib
-
Such mal nach Mode 13 oder VGA Programming etc.
Ist halt nur mit einer max. Auflösung von 320x200.
Hier kannst Du wirklich direkt ins GFX-Karten Register schreiben ohne grössere Probleme.Ansonsten TinyPTC, SDL oder PixelToaster, das sind jeweils Libarys die alles auch wichtige für dich erledigen. Den Rest musst Du dann selber schreiben.
-
Also OS ist Dos Ebene. Naja wir sind in den Kinderschuhen der Programmierung. Haben gerade mit dem Thema Arrays abgeschlossen, also denke ich mal kann das ganze nicht soooo kompliziert sein. Aber ich check mal eure Tipps.
Danke schonmal
-
Darfs auch ne Windows Anwendung sein?
-
Ich weiss jetzt nicht genau wie das unter Dos heisst,
aber ich meine dort gibt es ein Pendant zur semi Grafik, irgendwas mit conio oder sowas.Damit sollte es relativ simpel sein kleine Grafik Demos zu schreiben.
-
es gibt zahlreiche Bibliotheken dafür z. B. http://www.dislin.de/, die man Einsetzen könnte
-
Wenn Du mit dem Delorie GCC-GNU-Dingens und im Mode13h arbeiten willst, kannst Du das hier benutzen:
Das hab ich mir so im Netz zusammen gesucht und irgendwann zum laufen gekriegt.
Bisher hatte ich keine Motivation das unter MSVSC++ zu laufen zu bringen.//Mode13_03.c //mk,2005 // //dosmode 13h gfx thingie #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> // req. for kbhit() #include <dos.h> // required for int86() #include <sys/nearptr.h> //<- __djgpp_conventional_base #include <sys/farptr.h> // Required for all _far* functions #include <go32.h> // Required for _dos_ds selector // #define stuff #define MCGA 0x13 #define TEXT 0x03 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SET MODE FOR SCREEN void SetMode (unsigned int Mode) { union REGS regs; regs.x.ax = Mode; // Put the desired mode in register AX int86(0x10,®s,®s); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // directly paint the pixel void directPixel(unsigned int x, unsigned int y, int color) { if ((x<0) || (x>=320) || (y<0) || (y>=200)) return; _farnspokeb(0xA0000 + (y<<8) + (y<<6) + x, color); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // paintpixel in the double buffer void bPixel(unsigned int x, unsigned int y, int color, unsigned char *double_buffer) { double_buffer[(y<<8) + (y<<6) + x] = color; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // clears the double Buffer! void clear_dBuff(unsigned char *double_buffer) { memset(double_buffer, 0, 64000); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // wait for the Kathodenstrahl void waitRetrace() { // Wait vertical retrace while(inportb(0x03DA)&0x08); // Wait refresh while(!(inportb(0x03DA)&0x08)); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MAIN int main() { int x_Coord =160, // x-mitte y_Coord =100, // y-mitte pixCol =0, // Base Color count =0, pFlag =0; int pDirection=0; char userKeyHit=0; // thats the name of my mother unsigned char *double_buffer; char *video_ram; // pointer to the video adress double_buffer = (unsigned char *) malloc(320*200); __djgpp_nearptr_enable(); // turn of protection _farsetsel(_dos_ds); video_ram=(char *)(0xA0000); srand(time(NULL)); printf("video_ram adress should be 0xA000. It is: %x\nBeenden mit ANYKEY." ,video_ram); getchar(); // begin to rock! SetMode(MCGA); while (!kbhit()) { for (count=32000;count;count-=2) bPixel(rand()%320,rand()%200,rand()%15+15,double_buffer); waitRetrace(); //memmove(video_ram,double_buffer,64000); // Does not work :( dosmemput(double_buffer, 64000, video_ram); //replace video_ram with 0xA0000 to get rid of the warning clear_dBuff(double_buffer); } //Fill Screen with Black waitRetrace(); clear_dBuff(double_buffer); dosmemput(double_buffer, 64000, 0xA0000); // exit Prog. and clean up! free(double_buffer); __djgpp_nearptr_disable(); //<--- SetMode(TEXT); return 0; }
-
Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.