Triangle und ShadedTriangle

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

tasky

Betreff: Triangle und ShadedTriangle

BeitragSo, März 28, 2004 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich hab diesen Code schon mal im letzten Forum gepostet. Damit könnt ihr gefüllte Dreiecke und Dreiecke mit weichen Farbübergängen zeichnen.
Der Code ist nicht von irgendwo übernommen (bzw. übersetzt) worden, sondern stammt von mir. Er ist sehr schnell, aber dafür auch ziemlich gross.

Befehle:

InitTriangle()
Initialisiert den Viewport

TriangleViewPort(wLeft, wTop, wRight, wBottom)
Beschreibt den eingegrenzten Bildschirmausschnitt, in dem das Dreieck gezeichnet werden soll

Triangle(x0, y0, x1, y1, x2, y2, rgb, [buffer])
Zeichnet ein einfaches, gefülltes Dreieck

ShadedTriangle(x0, y0, x1, y1, x2, y2, r0, g0, b0, r1, g1, b1, r2, g2, b2, [buffer])
Zeichnet ein gefülltes Dreieck mit einem Farbübergang


Code: [AUSKLAPPEN]
Global winLeft
Global winRight
Global winTop
Global winBottom

Graphics 1024, 768, 32, 1
SetBuffer BackBuffer()

InitTriangle()

r = 500

While Not KeyHit(1)
   Cls

   a# = a# + 1

   x0 = 512 + Sin(a) * r
   y0 = 384 + Cos(a) * r
   x1 = 512 + Sin(a + 120) * r
   y1 = 384 + Cos(a + 120) * r
   x2 = 512 + Sin(a + 240) * r
   y2 = 384 + Cos(a + 240) * r

   LockBuffer
   ShadedTriangle(x0, y0, x1, y1, x2, y2, 255, 0, 0, 0, 255, 0, 0, 0, 255)
   UnlockBuffer

   Flip 0
Wend

Function InitTriangle()
   winLeft = 0
   winTop = 0
   winRight = GraphicsWidth() - 1
   winBottom = GraphicsHeight() - 1
End Function

Function TriangleViewPort(wLeft, wTop, wRight, wBottom)
   winLeft = wLeft
   winTop = wTop
   winRight = wRight
   winBottom = wBottom
End Function

Function Triangle(x0, y0, x1, y1, x2, y2, rgb, buffer = 0)
   Local xc1, xp1, xp, dx1, dy1, df1, dm1, mc1, xs1
   Local xc2, xp2, yp, dx2, dy2, df2, dm2, mc2, xs2
   Local ey
   
   If buffer = 0 buffer = GraphicsBuffer()

   If y0 > y1
      tmp = y0
      y0 = y1
      y1 = tmp
      tmp = x0
      x0 = x1
      x1 = tmp
   End If
   If y0 > y2
      tmp = y0
      y0 = y2
      y2 = tmp
      tmp = x0
      x0 = x2
      x2 = tmp
   End If
   If y1 > y2
      tmp = y1
      y1 = y2
      y2 = tmp
      tmp = x1
      x1 = x2
      x2 = tmp
   End If
   
   If y0 <> y1
      If y1 = y2
         ey = y1
      Else
         ey = y1 - 1
      End If
   
      dx1 = x1 - x0
      dy1 = y1 - y0
      df1 = dx1 / dy1
      dm1 = Abs(dx1 Mod dy1)
      
      If x0 > x1
         xs1 = -1
      Else
         xs1 = 1
      End If
      
      dx2 = x2 - x0
      dy2 = y2 - y0
      df2 = dx2 / dy2
      dm2 = Abs(dx2 Mod dy2)

      If x0 > x2
         xs2 = -1
      Else
         xs2 = 1
      End If

      xp1 = x0
      mc1 = dm1
      xp2 = x0
      mc2 = dm2
      For yp = y0 To ey
         xc1 = xp1
         xc2 = xp2
         
         If xc1 <> xc2
            If yp >= winTop
               If yp <= winBottom
                  If xc1 > xc2
                     tmp = xc1
                     xc1 = xc2
                     xc2 = tmp
                  End If
                  
                  If xc1 <= winRight
                     If xc2 >= winLeft
                        If xc1 < winLeft xc1 = winLeft
                        If xc2 > winRight xc2 = winRight
               
                        For xp = xc1 To xc2
                           WritePixelFast xp, yp, rgb, buffer
                        Next
                     End If
                  End If
               End If
            End If
         End If

         xp1 = xp1 + df1
         
         mc1 = mc1 + dm1
         If mc1 >= dy1
            mc1 = mc1 - dy1
            xp1 = xp1 + xs1
         End If

         xp2 = xp2 + df2
         
         mc2 = mc2 + dm2
         If mc2 >= dy2
            mc2 = mc2 - dy2
            xp2 = xp2 + xs2
         End If         
      Next
   Else
      If y1 = y2 Return
      
      dx2 = x2 - x0
      dy2 = y2 - y0
      df2 = dx2 / dy2
      dm2 = Abs(dx2 Mod dy2)

      If x0 > x2
         xs2 = -1
      Else
         xs2 = 1
      End If

      xp2 = x0
      mc2 = dm2
   End If

   If y1 <> y2
      dx1 = x2 - x1
      dy1 = y2 - y1
      df1 = dx1 / dy1
      dm1 = Abs(dx1 Mod dy1)
      
      If x1 > x2
         xs1 = -1
      Else
         xs1 = 1
      End If

      xp1 = x1
      mc1 = dm1
      
      If y2 > winBottom y2 = winBottom
      
      For yp = y1 To y2
         xc1 = xp1
         xc2 = xp2
         
         If xc1 <> xc2
            If yp >= winTop
               If yp <= winBottom
                  If xc1 > xc2
                     tmp = xc1
                     xc1 = xc2
                     xc2 = tmp
                  End If
                  
                  If xc1 <= winRight
                     If xc2 >= winLeft
                        If xc1 < winLeft xc1 = winLeft
                        If xc2 > winRight xc2 = winRight
               
                        For xp = xc1 To xc2
                           WritePixelFast xp, yp, rgb, buffer
                        Next
                     End If
                  End If
               End If
            End If
         End If

         xp1 = xp1 + df1
         
         mc1 = mc1 + dm1
         If mc1 >= dy1
            mc1 = mc1 - dy1
            xp1 = xp1 + xs1
         End If

         xp2 = xp2 + df2
         
         mc2 = mc2 + dm2
         If mc2 >= dy2
            mc2 = mc2 - dy2
            xp2 = xp2 + xs2
         End If         
      Next
   End If
End Function

Function ShadedTriangle(x0, y0, x1, y1, x2, y2, r0, g0, b0, r1, g1, b1, r2, g2, b2, buffer = 0)
   Local xc1, xp1, xp, dx1, dy1, df1, dm1, mc1, xs1
   Local xc2, xp2, yp, dx2, dy2, df2, dm2, mc2, xs2
   Local rcg1, rg1, dfrg1, mcrg1, dmrg1, rsg1, drg1, rg2, dfrg2, mcrg2, dmrg2, rcg2, rsg2, drg2
   Local gcg1, gg1, dfgg1, mcgg1, dmgg1, gsg1, dgg1, gg2, dfgg2, mcgg2, dmgg2, gcg2, gsg2, dgg2
   Local bcg1, bg1, dfbg1, mcbg1, dmbg1, bsg1, dbg1, bg2, dfbg2, mcbg2, dmbg2, bcg2, bsg2, dbg2
   Local d, r, dfr, mcr, dmr, rs, dr, g, dfg, mcg, dmg, gs, dg, b, dfb, mcb, dmb, bs, db
   Local ey
   
   If buffer = 0 buffer = GraphicsBuffer()

   If y0 > y1
      tmp = y0
      y0 = y1
      y1 = tmp
      tmp = x0
      x0 = x1
      x1 = tmp
      tmp = r0
      r0 = r1
      r1 = tmp
      tmp = g0
      g0 = g1
      g1 = tmp
      tmp = b0
      b0 = b1
      b1 = tmp
   End If
   If y0 > y2
      tmp = y0
      y0 = y2
      y2 = tmp
      tmp = x0
      x0 = x2
      x2 = tmp
      tmp = r0
      r0 = r2
      r2 = tmp
      tmp = g0
      g0 = g2
      g2 = tmp
      tmp = b0
      b0 = b2
      b2 = tmp
   End If
   If y1 > y2   
      tmp = y1
      y1 = y2
      y2 = tmp
      tmp = x1
      x1 = x2
      x2 = tmp
      tmp = r1
      r1 = r2
      r2 = tmp
      tmp = g1
      g1 = g2
      g2 = tmp
      tmp = b1
      b1 = b2
      b2 = tmp
   End If
   
   If y0 <> y1
      If y1 = y2
         ey = y1
      Else
         ey = y1 - 1
      End If

      dx1 = x1 - x0
      dy1 = y1 - y0
      df1 = dx1 / dy1
      dm1 = Abs(dx1 Mod dy1)      
      dx2 = x2 - x0
      dy2 = y2 - y0
      df2 = dx2 / dy2
      dm2 = Abs(dx2 Mod dy2)

      drg1 = r1 - r0
      dfrg1 = drg1 / dy1
      dmrg1 = Abs(drg1 Mod dy1)
      dgg1 = g1 - g0
      dfgg1 = dgg1 / dy1
      dmgg1 = Abs(dgg1 Mod dy1)
      dbg1 = b1 - b0
      dfbg1 = dbg1 / dy1
      dmbg1 = Abs(dbg1 Mod dy1)
      drg2 = r2 - r0
      dfrg2 = drg2 / dy2
      dmrg2 = Abs(drg2 Mod dy2)
      dgg2 = g2 - g0
      dfgg2 = dgg2 / dy2
      dmgg2 = Abs(dgg2 Mod dy2)
      dbg2 = b2 - b0
      dfbg2 = dbg2 / dy2
      dmbg2 = Abs(dbg2 Mod dy2)

      If x0 > x2
         xs2 = -1
      Else
         xs2 = 1
      End If
      If x0 > x1
         xs1 = -1
      Else
         xs1 = 1
      End If
      If r0 > r1
         rsg1 = -1
      Else
         rsg1 = 1
      End If
      If g0 > g1
         gsg1 = -1
      Else
         gsg1 = 1
      End If
      If b0 > b1
         bsg1 = -1
      Else
         bsg1 = 1
      End If
      If r0 > r2
         rsg2 = -1
      Else
         rsg2 = 1
      End If
      If g0 > g2
         gsg2 = -1
      Else
         gsg2 = 1
      End If
      If b0 > b2
         bsg2 = -1
      Else
         bsg2 = 1
      End If

      xp1 = x0
      mc1 = dm1
      xp2 = x0
      mc2 = dm2
      rg1 = r0
      mcrg1 = dmrg1
      gg1 = g0
      mcgg1 = dmgg1
      bg1 = b0
      mcbg1 = dmbg1
      rg2 = r0
      mcrg2 = dmrg2
      gg2 = g0
      mcgg2 = dmgg2
      bg2 = b0
      mcbg2 = dmbg2
      For yp = y0 To ey
         xc1 = xp1
         xc2 = xp2
         rcg1 = rg1
         gcg1 = gg1
         bcg1 = bg1
         rcg2 = rg2
         gcg2 = gg2
         bcg2 = bg2
         
         If xc1 <> xc2
            If yp >= winTop
               If yp <= winBottom
                  If xc1 > xc2
                     tmp = xc1
                     xc1 = xc2
                     xc2 = tmp
                     tmp = rcg1
                     rcg1 = rcg2
                     rcg2 = tmp
                     tmp = gcg1
                     gcg1 = gcg2
                     gcg2 = tmp
                     tmp = bcg1
                     bcg1 = bcg2
                     bcg2 = tmp
                  End If
                        
                  If xc1 <= winRight
                     If xc2 >= winLeft
                        d = xc2 - xc1
      
                        If xc1 < winLeft xc1 = winLeft
                        If xc2 > winRight xc2 = winRight
      
                        If rcg1 > rcg2
                           rs = -1
                        Else
                           rs = 1
                        End If
                        If gcg1 > gcg2
                           gs = -1
                        Else
                           gs = 1
                        End If
                        If bcg1 > bcg2
                           bs = -1
                        Else
                           bs = 1
                        End If
      
                        dr = rcg2 - rcg1
                        dfr = dr / d
                        dmr = Abs(dr Mod d)
                        dg = gcg2 - gcg1
                        dfg = dg / d
                        dmg = Abs(dg Mod d)
                        db = bcg2 - bcg1
                        dfb = db / d
                        dmb = Abs(db Mod d)
                              
                        r = rcg1
                        mcr = dmr
                        g = gcg1
                        mcg = dmg
                        b = bcg1
                        mcb = dmb
                        For xp = xc1 To xc2
                           WritePixelFast xp, yp, (r Shl 16) Or (g Shl 8) Or b, buffer
      
                           r = r + dfr
                           g = g + dfg
                           b = b + dfb
                                 
                           mcr = mcr + dmr
                           If mcr >= d
                              mcr = mcr - d
                              r = r + rs
                           End If
                           mcg = mcg + dmg
                           If mcg >= d
                              mcg = mcg - d
                              g = g + gs
                           End If
                           mcb = mcb + dmb
                           If mcb >= d
                              mcb = mcb - d
                              b = b + bs
                           End If
                        Next
                     End If
                  End If
               End If
            End If
         End If

         xp1 = xp1 + df1
         xp2 = xp2 + df2
         rg1 = rg1 + dfrg1
         gg1 = gg1 + dfgg1
         bg1 = bg1 + dfbg1
         rg2 = rg2 + dfrg2
         gg2 = gg2 + dfgg2
         bg2 = bg2 + dfbg2
         
         mc1 = mc1 + dm1
         mc2 = mc2 + dm2
         mcrg1 = mcrg1 + dmrg1
         mcgg1 = mcgg1 + dmgg1
         mcbg1 = mcbg1 + dmbg1
         mcrg2 = mcrg2 + dmrg2
         mcgg2 = mcgg2 + dmgg2
         mcbg2 = mcbg2 + dmbg2

         If mc1 >= dy1
            mc1 = mc1 - dy1
            xp1 = xp1 + xs1
         End If         
         If mc2 >= dy2
            mc2 = mc2 - dy2
            xp2 = xp2 + xs2
         End If         
         
         If mcrg1 >= dy1
            mcrg1 = mcrg1 - dy1
            rg1 = rg1 + rsg1
         End If         
         If mcgg1 >= dy1
            mcgg1 = mcgg1 - dy1
            gg1 = gg1 + gsg1
         End If         
         If mcbg1 >= dy1
            mcbg1 = mcbg1 - dy1
            bg1 = bg1 + bsg1
         End If         
         If mcrg2 >= dy2
            mcrg2 = mcrg2 - dy2
            rg2 = rg2 + rsg2
         End If         
         If mcgg2 >= dy2
            mcgg2 = mcgg2 - dy2
            gg2 = gg2 + gsg2
         End If         
         If mcbg2 >= dy2
            mcbg2 = mcbg2 - dy2
            bg2 = bg2 + bsg2
         End If
      Next
   Else
      If y1 = y2 Return
      
      dx2 = x2 - x0
      dy2 = y2 - y0
      df2 = dx2 / dy2
      dm2 = Abs(dx2 Mod dy2)
      drg2 = r2 - r0
      dfrg2 = drg2 / dy2
      dmrg2 = Abs(drg2 Mod dy2)
      dgg2 = g2 - g0
      dfgg2 = dgg2 / dy2
      dmgg2 = Abs(dgg2 Mod dy2)
      dbg2 = b2 - b0
      dfbg2 = dbg2 / dy2
      dmbg2 = Abs(dbg2 Mod dy2)

      If x0 > x2
         xs2 = -1
      Else
         xs2 = 1
      End If
      If r0 > r2
         rsg2 = -1
      Else
         rsg2 = 1
      End If
      If g0 > g2
         gsg2 = -1
      Else
         gsg2 = 1
      End If
      If b0 > b2
         bsg2 = -1
      Else
         bsg2 = 1
      End If

      xp2 = x0
      mc2 = dm2
      rg2 = r0
      mcrg2 = dmrg2
      gg2 = g0
      mcgg2 = dmgg2
      bg2 = b0
      mcbg2 = dmbg2
   End If

   If y1 <> y2
      dx1 = x2 - x1
      dy1 = y2 - y1
      df1 = dx1 / dy1
      dm1 = Abs(dx1 Mod dy1)
      drg1 = r2 - r1
      dfrg1 = drg1 / dy1
      dmrg1 = Abs(drg1 Mod dy1)
      dgg1 = g2 - g1
      dfgg1 = dgg1 / dy1
      dmgg1 = Abs(dgg1 Mod dy1)
      dbg1 = b2 - b1
      dfbg1 = dbg1 / dy1
      dmbg1 = Abs(dbg1 Mod dy1)
      
      If x1 > x2
         xs1 = -1
      Else
         xs1 = 1
      End If
      If r1 > r2
         rsg1 = -1
      Else
         rsg1 = 1
      End If
      If g1 > g2
         gsg1 = -1
      Else
         gsg1 = 1
      End If
      If b1 > b2
         bsg1 = -1
      Else
         bsg1 = 1
      End If

      xp1 = x1
      mc1 = dm1
      rg1 = r1
      mcrg1 = dmrg1
      gg1 = g1
      mcgg1 = dmgg1
      bg1 = b1
      mcbg1 = dmbg1
      
      If y2 > winBottom y2 = winBottom
      
      For yp = y1 To y2
         xc1 = xp1
         xc2 = xp2
         rcg1 = rg1
         gcg1 = gg1
         bcg1 = bg1
         rcg2 = rg2
         gcg2 = gg2
         bcg2 = bg2
         
         If xc1 <> xc2
            If yp >= winTop
               If yp <= winBottom
                  If xc1 > xc2
                     tmp = xc1
                     xc1 = xc2
                     xc2 = tmp
                     tmp = rcg1
                     rcg1 = rcg2
                     rcg2 = tmp
                     tmp = gcg1
                     gcg1 = gcg2
                     gcg2 = tmp
                     tmp = bcg1
                     bcg1 = bcg2
                     bcg2 = tmp
                  End If
                        
                  If xc1 <= winRight
                     If xc2 >= winLeft
                        d = xc2 - xc1
      
                        If xc1 < winLeft xc1 = winLeft
                        If xc2 > winRight xc2 = winRight
      
                        If rcg1 > rcg2
                           rs = -1
                        Else
                           rs = 1
                        End If
                        If gcg1 > gcg2
                           gs = -1
                        Else
                           gs = 1
                        End If
                        If bcg1 > bcg2
                           bs = -1
                        Else
                           bs = 1
                        End If
      
                        dr = rcg2 - rcg1
                        dfr = dr / d
                        dmr = Abs(dr Mod d)
                        dg = gcg2 - gcg1
                        dfg = dg / d
                        dmg = Abs(dg Mod d)
                        db = bcg2 - bcg1
                        dfb = db / d
                        dmb = Abs(db Mod d)
                              
                        r = rcg1
                        mcr = dmr
                        g = gcg1
                        mcg = dmg
                        b = bcg1
                        mcb = dmb
                        For xp = xc1 To xc2
                           WritePixelFast xp, yp, (r Shl 16) Or (g Shl 8) Or b, buffer
      
                           r = r + dfr
                           g = g + dfg
                           b = b + dfb
                                 
                           mcr = mcr + dmr
                           If mcr >= d
                              mcr = mcr - d
                              r = r + rs
                           End If
                           mcg = mcg + dmg
                           If mcg >= d
                              mcg = mcg - d
                              g = g + gs
                           End If
                           mcb = mcb + dmb
                           If mcb >= d
                              mcb = mcb - d
                              b = b + bs
                           End If
                        Next
                     End If
                  End If
               End If
            End If
         End If

         xp1 = xp1 + df1
         xp2 = xp2 + df2
         rg1 = rg1 + dfrg1
         gg1 = gg1 + dfgg1
         bg1 = bg1 + dfbg1
         rg2 = rg2 + dfrg2
         gg2 = gg2 + dfgg2
         bg2 = bg2 + dfbg2
         
         mc1 = mc1 + dm1
         mc2 = mc2 + dm2
         mcrg1 = mcrg1 + dmrg1
         mcgg1 = mcgg1 + dmgg1
         mcbg1 = mcbg1 + dmbg1
         mcrg2 = mcrg2 + dmrg2
         mcgg2 = mcgg2 + dmgg2
         mcbg2 = mcbg2 + dmbg2

         If mc1 >= dy1
            mc1 = mc1 - dy1
            xp1 = xp1 + xs1
         End If         
         If mc2 >= dy2
            mc2 = mc2 - dy2
            xp2 = xp2 + xs2
         End If         
         
         If mcrg1 >= dy1
            mcrg1 = mcrg1 - dy1
            rg1 = rg1 + rsg1
         End If         
         If mcgg1 >= dy1
            mcgg1 = mcgg1 - dy1
            gg1 = gg1 + gsg1
         End If         
         If mcbg1 >= dy1
            mcbg1 = mcbg1 - dy1
            bg1 = bg1 + bsg1
         End If         
         If mcrg2 >= dy2
            mcrg2 = mcrg2 - dy2
            rg2 = rg2 + rsg2
         End If         
         If mcgg2 >= dy2
            mcgg2 = mcgg2 - dy2
            gg2 = gg2 + gsg2
         End If         
         If mcbg2 >= dy2
            mcbg2 = mcbg2 - dy2
            bg2 = bg2 + bsg2
         End If
      Next
   End If
End Function
BlitzBasic 1.85 - BlitzPlus 1.37 - VC++ 6 - Delphi 7 - Haskell - FASM

Vertex

BeitragSo, März 28, 2004 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow wirklich sau schnell!
BlitzBasic: [AUSKLAPPEN]

Function culling(x1, y1, x2, y2, x3, y3)
If (x1-x2)*(y3-y2)-(y1-y2)*(x3-x2)<0 Then
Return True
Else
Return False
EndIf
End Function

Mit diesem Code kann man noch prüfen, ob das Triangle gerendert werden
soll, oder nicht. Also wenn culling() False zurück gibt, dann kann das
Triangle egrendert werden, andernfalls nicht. Ist BakcFaceCulling, also
ein Triangle wird gecullt, wenn die Vertices nicht im Uhrzeigersinn sind.
mfg olli
vertex.dreamfall.at | GitHub
 

Kekskiller

BeitragSo, März 28, 2004 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Heiliger Strohsack , ist das schnell!
Selbst auf meiner 200Mhz.Kiste läuft das fast perfekt flüssig!

tft

BeitragSo, März 28, 2004 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.....

ist ja komisch. Ich habe einen 2Ghz Rechner und habe etwa 2 FPS.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

OJay

BeitragSo, März 28, 2004 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
tft: debug-modus Wink


ich hab ca 65fps...
 

tasky

BeitragSo, März 28, 2004 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist wahrscheinlich sowieso jedem klar, aber:

Je kleiner r, desto mehr fps!!!
BlitzBasic 1.85 - BlitzPlus 1.37 - VC++ 6 - Delphi 7 - Haskell - FASM

tft

BeitragMo, März 29, 2004 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.....

r=300,kein debug,=16 FPS ????????
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Blatolo

BeitragMo, März 29, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ohne debug 67 fps und mit 4 fps.
Mit der Standarteinstellung r=500
 

Dreamora

BeitragMo, März 29, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
das ding ruckelt extrem durch die landschaft

Sys: P4-M 1,7ghz, GF4 440go, 1024mb RAM$


vielleicht ne optimierung im code die sich mit P4 net verträgt oder so
 

OJay

BeitragMo, März 29, 2004 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würds eher auf die grafikkarte schieben, da sowohl tft, als auch du, die allerletzten teile habt Wink
 

Dreamora

BeitragMo, März 29, 2004 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
In anbetracht der Tatsache das Leute mit P1/P2 bessere Resultate haben, glaub ich da nicht wirklich dran Smile

Blatolo

BeitragDi, März 30, 2004 6:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns an der Grafikkarte liegt dann verstehe ich meine hohen Raten nicht.
Habe ne geforce 2 mx 32 mb(shared), AMD Athlon 1700+ und 256 mb ddr ram
Ist meine Graka etwa gar nicht so schlecht wie bisher angenommen Laughing
 

Dreamora

BeitragDi, März 30, 2004 7:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch deine Karte is noch mieser, ne modifizierte GF1

Ich vermute es liegt an den P4-M prozessoren. Da wurde mit sicherheit irgendwo an den zusätzlichen Prozessoroptimierungen gespart und das wirkt sich verheerend aus so wie es aussieht.

Weil Grafikkarte und RAM fallen aus und die gemeinsamkeit von mir und tft is die Tatsache das wir auf Laptops arbeiten. ( Dell Inspiron 8200 in meinem Fall )
 

tasky

BeitragDi, März 30, 2004 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, die Optimierung bezieht sich im wesentlichen darauf, dass (in den Schleifen) die normalerweise notwendigen Multiplikationen / Divisionen auf Additionen / Subtraktionen reduziert werden.

Hier ein Code zum Vergleich der Geschwindigkeiten:

BlitzBasic: [AUSKLAPPEN]
Print "..."

ms = MilliSecs()
For i = 1 To 100
For j = 1 To 1000000
a = i - j
a = i + j
Next
Next
ms = MilliSecs() - ms
Print "Add / Sub: " + ms + "ms"

ms = MilliSecs()
For i = 1 To 100
For j = 1 To 1000000
a = i * j
a = i / j
Next
Next
ms = MilliSecs() - ms
Print "Mul / Div: " + ms + "ms"

Print "Fertig!"

WaitKey()


Add / Sub: 458ms
Mul / Div: 2920ms

System: Fujitsu Siemens Laptop mit Athlon 2400+, 512MB DDR, ATI Radeon IGP (eigentlich schlechte Grafikkarte)

Schreibt bitte mal eure Ergebnisse rein mit entsprechendem System.
BlitzBasic 1.85 - BlitzPlus 1.37 - VC++ 6 - Delphi 7 - Haskell - FASM
 

HOT-BIT

Gast

BeitragDi, März 30, 2004 11:32
Antworten mit Zitat
Hi !

@tasky:
Da kann doch was nicht stimmen !

Wenn ich für die i-Schleife nur 10 nehme, habe ich schon 14,6 Sekunden pro Durchlauf. Der zweite Wert liegt um 2 Zehntel darüber.

Wie kann es sein, daß ein 2400er schneller rennt als ein 2600er ?

Irgendwas passt da nicht !

Und zu dem Programm oben kann ich sagen, 94 FPS bei r=500.
Mit Debug habe ich aber nur 1 FPS. Pfffft, das bremst !


Toni
 

tasky

BeitragDi, März 30, 2004 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam, ich hab das ganze jetzt mal auf nem Athlon 1GHz ausprobiert und bekomme folgende Wert:

Add / Sub: 812ms
Mul / Div: 5163ms

Kann aber trotzdem keinen Fehler im Code des Gechwindigkeitstest finden. Wenn die Werte stimmen, ist das wirklich interressant, wie sich die verschiedenen CPUs verhalten. Blitz benutzt wahrscheinlich erweiterte Prozessorbefehle von MMX, SSE, usw. Das könnte auf jeden Fall eine Rolle spielen. Eine grosse Rolle könnte auch der Cache spielen, den dann wäre (unter Umständen) der Datenzugriff (z.B. auf Variablen) schneller.
BlitzBasic 1.85 - BlitzPlus 1.37 - VC++ 6 - Delphi 7 - Haskell - FASM

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, März 30, 2004 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab da
388ms
3015ms
2000+ Ahtlon XP
512 DDR-333
Via KT333 + VT8233A
FSB 200/266
mit Win98 und DirectX 9
[BB2D | BB3D | BB+]

regaa

BeitragDi, März 30, 2004 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Debug 2 FPS, ohne so um die 4.

P4 2,26
512 DDR 266
PX
Dx 9.0b

Schon seltsam
 

OJay

BeitragDi, März 30, 2004 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
du scherzkeks! wie sollen reine mathematische berechnungen zu vergleichen sein mit writepixelfast - auf welcher die shaded triangle funktionen basieren!

denkt doch bitte mal nach, bevor ihr euren geistigen durchfall hier fallen lasst! danke.
 

Dreamora

BeitragDi, März 30, 2004 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Er hat schon reicht
weil writepixelfast kanns net sein, das wäre bandbreitenbedingt. aber da wir ja selbst von PCI Systemen ausgetoppt werden, wurde da irgendwas am mobile prozessor modifiziert was gewaltig was gezogen hat
Sei es SSE rausgenommen oder MMX oder einfach sonstwas ...


Zeiten der bereichnungen oben

Add: 707ms
Multi: 5807ms


P4-M 1.7ghz, 1024mb RAM

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group