(Spiele-/Gra...) z-Bufferalgo



  • hallo

    ich habe ein würfel erstellt den ich in der ebene 3Dimensional darstellen kann.
    ich kann ihn auch um alle achsen drehen. jetzt ist es aber so das auch die verdeckten kannten noch sichtbar sind. Mit hilfe des z-Bufferalgo ist es möglich nur die sichtbaren linien zu zeichnen. aber ich komme da irgendwie nicht weiter.
    also ich habe einen array mit lauter punkten (matrix[4][36]) die punkte bilden dreiecke und die dreiecke bilden den würfel.

    jetzt sehe ich noch nicht ganz wie ich mit hilfe des z wertes bestimmen kann ob eine linie verdeckt ist oder nicht.



  • Hab ich dich richtig verstanden? Du willst die nicht sichtbaren Seiten nicht Zeichnen. Das geht aber nicht mit dem Z-Buffer.

    2           3
      |---------|
      |         |
      |         |
      |_________|
     1           4
    

    Nehmen wir mal an das ist eine Seite des Würfels. Du beginnst bei 1 und Zeichnest dein Rechteck 2-3 bis 4. Die Richtung ist im Uhrzeigersinn.
    Drehst du das Teil kommt der Moment in dem das Rechteck gegen dem Uhrzeigersinn gezeichnet wird. Und ist das der Fall zeichnest du es nicht.

    Ich Such mal. Ich hab das mal gemacht. Sollte ich es finden poste ich den Quellcode (in C ).



  • Also ich will nur die Sichtbaren Kanten zeichnen. (Bis jetzt ist es eben so das man noch alle kanten des Würfels sieht).

    mir ist noch nicht ganz klar wie ich die einzelnen Z werte bekomme ( die zwischen den einzelnen eckpunkten).

    (mit dem Breseham vielleicht) 😕



  • Ich habe den Quellcode gefunde. Ich habe das damals mit dem Normalvektor berechnet.

    P2
       |
     u |
       |
       |________
      P1  v     P3
    

    z=(p2.x-p1.x)(p3.y-p1.y)-(p2.y-p1.y)(p3.x-p1.x)

    ist z<0 = nicht sichtbar
    ist z>0 = sichtbar



  • ich muss ja für jedes pixel den z-wert berechnen aber wie mache ich das?



  • Nein musst du nicht. Du musst nur den Normalvektor einer Fläche berechnen. Das macht man mit der Funktion (siehe oben).

    MMM                        
                          MMMMZ                       
                         M7 M M;  Das ist der Normalvektor.                    
                        MZ :M  Mr  Er steht immer 90Grad zur Fläche                 
                       ia  7M  .M                     
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                           7M                         
                            M          Xa@0M          
                         X7MMMMMMMMMMMMMX MM          
              MMMMMMMMMMMM2ZM            M8           
              MM           .M           Ma            
               MM          ZM          MS             
                7M         .M         M7              
         P2       MM                 Mr               
           M8      MM               M.         P3       
           MMMMMM,   M:            M.         ;       
           M  M  MM   MM          M,       rMMM       
           MW  M:      MM        M      MMM,M M       
           MM   MM       M2     M      MM  MW M.      
           i     WM       MM   M          MM  MS      
                   MZ      ZM7M          Ma   MZ      
                    MM       M          M7            
                     @M                M7             
                U      M8             M     V          
                        MM           M                
                         @M         M                 
                           M8     iM                  
                            MM   ;M                   
                             MM iM                    
                               MM      
                              P1
    

    Das was du machen musst ist rauszufinden wie der Normalvektor steht. Du brauchst dazu Die Punkte P1 P2 und P3.

    [ Dieser Beitrag wurde am 08.01.2003 um 11:57 Uhr von fiGGn editiert. ]



  • @Troll:
    Lass Dass!! Bist im falschen Forum

    @fiGGn
    ok das könnte gehen aber was ich immer noch nicht sehe ist wie ich die einzelnen pixel der Fläche durchlaufen soll

    [ Dieser Beitrag wurde am 08.01.2003 um 12:03 Uhr von stef editiert. ]



  • Das ist wieder ein anders Problem. Wenn du weisst ob die Fläche sichtbar ist kannst du entscheiden ob du es ausfüllst oder nicht. Solltest du mehrer Objekt haben. Brauchst du den Z-Buffer. In deiner Fragestellung war aber nur die Rede von einem Würfel.

    Schau dir mal die Sachen auf dieser Seite an. Da wird vieles erklärt.
    http://olli.informatik.uni-oldenburg.de/Grafiti3/



  • ist ja auch nur ein würfel der aus einzelnen dreiecken zusammen gesetzt ist.

    edit: http://olli.informatik.uni-oldenburg.de/Grafiti3/grafiti/flow8/page8.html
    dass habe ich mir auch angeschaut. und eben da berechnet er jeden z-Wert

    [ Dieser Beitrag wurde am 08.01.2003 um 12:21 Uhr von stef editiert. ]



  • ab in das Grafik Forum damit

    (und nicht auf die Trolle reagieren, dafür gibt es Lösch Funktionen ;))


Anmelden zum Antworten