3D Grafik am C64

Es gibt 71 Antworten in diesem Thema, welches 4.299 mal aufgerufen wurde. Der letzte Beitrag (27. März 2025 um 18:46) ist von ivettaB.

  • Ich such später am Abend mal ein entsprechendes Beispiel im Source raus.

    Here we go:

    Yep, keine Zeilennummern.

    In der 54. Zeile transformiert die Matrix-Multiplikation w()=m().v() gleich alle Ecken des Würfels auf einmal. :D

    Viele Grüße,

    Michael

  • Moin,

    vielleicht ist da ja was abzuschauen.......:)

    Bitte melde dich an, um diesen Link zu sehen.

    Thread Nr.: Bitte melde dich an, um diesen Link zu sehen. + Bitte melde dich an, um diesen Link zu sehen. + Bitte melde dich an, um diesen Link zu sehen.

    Liebe Grüße,

    Jojo

  • Danke JoJo !

    so ich habe jetzt aus chaos heraus mich mit dem cc65 c Compiler gespielt.

    Da ich nicht weiss warum die TGI Library nicht multicolor kann musste ich einen Monochrom schattierer bauen und das ist irgendwie Mist.

    Auch der Speed ist mit der TGI (Setpixel) arschlahm ... aber ich weiss nicht wie ich das anders beschleundigen soll.

    selbst am X64SPU ist der Code lahm.

    Aber das Trianglefill ist so mühsam das ich das mit C machen musste. Habe das in Assembler mit dem pseudo floatingpoint routinen nicht richtig hinbekommen. Jetzt verwende ich 8.8 fixed Integer Zahlen statt dem floats.

    würde statt der TGI Routine lieber was eigenes einbauen aber keine Ahnung wie man von C eigene Assembler code blöcke anspringt und parameter übergiebt.

    Der innere Loop meiner Drawing Routine sieht so aus:
    zwei for schleifen welche das Dreieck von Punkt1 nach 2 und nach 3 füllt:

  • Hier noch ein rotierendes Dreieck welches mit weiss gefüllt wird. samt Source code für cc65
    ich kompiliere die fill9.c zum Beispiel mit:

    D:\c64\cc65\bin>cl65 ..\samples\fill9.c

    die innere Loop OHNE Schattierung sieht dann so aus:

  • Du kannst doch einfach inline Assembler schreiben

    Bitte melde dich an, um diesen Link zu sehen.

    , wobei bei meinen Tests der gcc-6502 schnelleren Code erzeugt hat

  • puh , eigentlich habe ich die Demosourcen als ACME Source vom C64 studio. Der C Teil ist eigentlich untergeordnet. Meine damit das Projekt aus 90% Assembler besteht. Es sollte also die C Datei irgendwie ins C64 studio dazu statt alles in den CC65 C Compiler einzufügen....
    Brauche das C nur wegen dem Arithmetischen Mist zur Berechnung der Eckpunkte für den Füller.

    Gibts den GCC von dem du sprichst auch für Win10 ? ich finde nur so unix Sachen. Wo kann ich die Exe finden ?


    Da du dich besser mit C auskennst , weisst du welche Optimizers man dem Compiler mitgeben kann um schnelleren Code zu erzeugen ?

    Und wie ist das mit der TGI Grafik Lib, sollte die nicht 4 Farben ausgeben wenn man nach der Farbtiefe fragt ?
    bekomme nur Hires Modus ? Ich kann doch nicht der einzige Mensch sein dem das auffällt ?
    Hätten die Leute beim "Mandelbrot.C" doch sehen müssen das da keine Farben sind ?

  • Moin,

    ein interessantes Thema, bei dem ich sonst leider nichts beitragen kann.

    Ausser etwas Basic, verstehe ich vom programmieren nicht wirklich was. Aber alles was später eventuell mit CMD SCPU funktioniert, ist so mein Ding.....:)

    Liebe Grüße,

    Jojo

  • Moin,

    ein interessantes Thema, bei dem ich sonst leider nichts beitragen kann.

    Ausser etwas Basic, verstehe ich vom programmieren nicht wirklich was. Aber alles was später eventuell mit CMD SCPU funktioniert, ist so mein Ding.....:)

    Liebe Grüße,

    Jojo

    Ja basic wird einem schnell fad. langsam, unflexy da wird man später auf assembler oder besser heute gleich C umsteigen...

  • Bitte melde dich an, um diesen Link zu sehen.

    Da hab ich Grafiken mit dem GCC gemalt

    Wie hast du die Farbe da hinein gehackt ?

    C Anfängerfrage:
    Wie macht man eigentlich Peeks und Pokes in C ?
    zb in einer loop auf Rasterzeile X warten aus register $d012 um danach etwas zu poken wie zb. poke 53280,1 ???

  • Peeks und Pokes brauchst Du in dem Sinn nicht.

    Du kannst ja einen Pointer auf die Adresse definieren und dann den Wert lesen, auf den der Pointer zeigt. So in etwa

    char * p = (char *)0xd012;

    while(*p != gesuchterWert) {

    machWas();

    }

    Aber schöner ist natürlich, wenn man die VIC Register gleich als Struct definiert und dann auf die Register mit Namen zugreifen kann:

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    ====

    /**

    * Wait for the end of screen.

    */

    void video_wait4screen_end( void) {

    while( VIC.rasterline != 250) {

    }

    }

    ====

  • ah check ! danke daybyter. So geht das... wäre nie auf die pointersache gekommen...

    wie lange hast du an dem Spiel geschrieben ca. ?

  • Das Spiel war so nebenher in paar Wochen denk ich. Ist ja nie fertig geworden, weil ich keine Grafik kann.

  • Das Spiel war so nebenher in paar Wochen denk ich. Ist ja nie fertig geworden, weil ich keine Grafik kann.

    kann hier niemand aushelfen mit grafik ? sind doch viele hier ? Ging es um sprites / Animations ?

    dein colorapfelmännchen ist HAMMER GEIL !! Echt !

  • dagegen ist meines der CRAP - aber optimiert :wink:

    habe herausgefunden das man auch optimieren kann :

    cl65 -Oirs -t c64 -o ..\samples\mandel5.prg ..\samples\mandel5.c

    (aus bin verzeichnis heraus gerufen)

    Bin am Zeitmessen ob die Optimierte Version schneller als das original mandelbrot.c vom cc65 ist.... muss noch warten - MANN DAS DAUERT

    Habe die Plotpixels mit ASM beschleunigt. und am code etwas gefummelt.. erwarte mir eh keine Welten davon.


    ** Dein Colorbrot ist interessanterweise bei den schwarzen Flächen langsamer als bei den bunten mit Details im gegensatz zum original mandelbrot.c vom CC65. Hast du anderen Algorithmus gefunden ?

    **

  • Das Spiel war so nebenher in paar Wochen denk ich. Ist ja nie fertig geworden, weil ich keine Grafik kann.

    kann hier niemand aushelfen mit grafik ? sind doch viele hier ? Ging es um sprites / Animations ?

    dein colorapfelmännchen ist HAMMER GEIL !! Echt !

    Meine Ursprungsidee für das Spiel war Swiv (nicht, dass ich annähernd an die Qualität herankommen könnte), aber das sollte so in etwa der Stil sein. Ich wollte eine scrollende Grafik aus Tiles aufbauen, die aus 4 oder 6 Zeichen bestehen könnten. Ich hatte damals sogar einen einfachen Tile-Editor gestartet, aber mangels Talent wurde das nix. Interessant fand ich an dem Konzept eher die Idee, dass man so Funktionen verketten kann, die dann jeweils in bestimmten Rasterzeilen ausgeführt werden.

    Bitte melde dich an, um diesen Link zu sehen.

    Hier sieht man, wie diese Tasks aneinander gehängt werden. Muss man sich aber wohl bisserl einlesen, um das zu verstehen.