OpenSource Software-Renderer

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Devils Child

Betreff: OpenSource Software-Renderer

BeitragDo, Okt 20, 2005 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

hiermit stelle ich meinen opensource software-renderer vor.
er nutzt nur bb2D und nicht bb3d befehle.

er kann:

-kann primitives mit n segmenten generieren
-cube
-cone
-cylinder
-sphere
-tube
-torus
-frustrum
-addvertex und addtriangle und solche befehle womit ich z.b. eine wasser-engine programmiert habe
-multikamera(viewports)
-vertexcolors
-meshlader(*.3d), aber da ist auch ein konverter von *.... zu *.3d dabei!
-25 3d befehle ala positionentity


https://www.blitzforum.de/upload/file.php?id=5090

viel spass


edit by Triton---
Link aktuallisiert.
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN
  • Zuletzt bearbeitet von Devils Child am Fr, Okt 21, 2005 20:35, insgesamt einmal bearbeitet
 

David

BeitragDo, Okt 20, 2005 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Schönes Projekt, nur leider ist der Quellcode grauenhaft unübersichtlich...

grüße

Devils Child

BeitragDo, Okt 20, 2005 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, für mich nicht, ich finds schön strukturiert, aber bei fremden source-codes ist das immer so.
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN
 

David

BeitragDo, Okt 20, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nein, eben nicht. Eine gescheite Formatierung, gut gewählte Variablen- und Funktionsnamen und eine gute Kommentierung wirken Wunder...

grüße

Mattis_the_brain

BeitragMi, Nov 02, 2005 0:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist doch schon mal was zum Vorzeigen... nicht wie die ganzen anderen Spielerein hier im Forum Rolling Eyes

BlitzChecker

BeitragSa, Nov 05, 2005 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, bei mir kommt nur "Die Seite wurde nicht gefunden". Dabei könnte ich sowas gut gebrauchen!

Wundert mich jetzt auch schon, dass der fleissige Spammer jetzt mal was nützliges reinstellt! Laughing
www.xairro.com

Triton

BeitragSa, März 21, 2009 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Link ist 404.

Kann das jemand noch hochladen und damit vor dem löschen retten?



edit----
Hat sich erledigt.
Coding: silizium-net.de | Portfolio: Triton.ch.vu
  • Zuletzt bearbeitet von Triton am So, März 22, 2009 1:40, insgesamt einmal bearbeitet
 

#Reaper

Newsposter

BeitragSa, März 21, 2009 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/upload/file.php?id=5090
Wird sicherlich auch nicht (von mir) wieder gelöscht. Wink

Btw: Die Dateien für "vertexbasierende Animation" und "Breakout 3D" (und evt. weitere, muss noch suchen) besitzte ich auch noch, aber da die beiden Ersteller ja noch aktiv sind, sollte sich das von selbst regeln.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Silver_Knee

BeitragMo, März 23, 2009 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich fand ich hab das in meinem Thread ganz angenehm gelöst... das Problem mit dem Uploaden oder nicht.

Sollte der Upload mal wieder Weg sein, kann sich hier jeder Die Source zusammensetzten.

<Falls als überflüssig befunden: Trashen>

------------------------
Source
------------------------

/Media/Teapot.x
/Media/Teapot.3ds

/Lib_Control.bb
/Lib_Engine.bb
/Lib_Matrix.bb
/Tool_Converter.bb
+4Examples

Code: [AUSKLAPPEN]
;File:              Lib_Control.bb
;Author:            Devils Child
;Description:       Teil des Opensource Software-Renderer
;Original Uploaded: www.BlitzForum.de


Function rPositionEntity(e.Entity, x#, y#, z#)
e\X# = x#
e\Y# = y#
e\Z# = z#
End Function

Function rTranslateEntity(e.Entity, x#, y#, z#)
e\X# = e\X# + x#
e\Y# = e\Y# + y#
e\Z# = e\Z# + z#
End Function

Function rTurnEntity(e.Entity, x#, y#)
e\Pitch# = e\Pitch# + x#
e\Yaw# = e\Yaw# + y#
End Function

Function rRotateEntity(e.Entity, x#, y#)
e\Pitch# = x#
e\Yaw# = y#
End Function

Function rScaleEntity(e.Entity, x#, y#, z#)
e\sx# = x#
e\sy# = y#
e\sz# = z#
End Function

Function rCameraClsColor(e.Entity, col1, col2, col3)
e\ClsColor1 = col1
e\ClsColor2 = col2
e\ClsColor3 = col3
End Function

Function rCameraZoom(e.Entity, zoom#)
e\Zoom# = zoom#
End Function

Function rCameraProjMode(e.Entity, mode)
e\ProjMode = mode
End Function

Function rEntityX#(e.Entity)
Return e\X#
End Function

Function rEntityY#(e.Entity)
Return e\Y#
End Function

Function rEntityZ#(e.Entity)
Return e\Z#
End Function

Function rFreeEntity(e.entity)
For v.Vertex = Each Vertex
  If v\Entity = e Then
    Delete v\Vector3D
    Delete v
  EndIf
Next
For p.Polygon = Each Polygon
  If p\Entity = e Then Delete p
Next
FreeMatrix(e\Matrix)
Delete e
End Function

Function rFlipMesh(e.Entity)
e\Fliped = 1 - e\Fliped
End Function

Function rWireFrame(mode)
Wire = mode
End Function

Function rEntityColor(e.Entity, col1, col2, col3)
e\col1 = col1
e\col2 = col2
e\col3 = col3
End Function

Function rEntityVertexColorRandom(e.Entity, min = 0, max = 255)
For v.Vertex = Each Vertex
  If v\Entity = e Then
    v\col1 = Rand(min, max)
    v\col2 = Rand(min, max)
    v\col3 = Rand(min, max)
  EndIf
Next
End Function

Function rVertexCoords(v.Vertex, x#, y#, z#)
v\x# = x#
v\y# = y#
v\z# = z#
End Function

Function rVertexColor(v.Vertex, col1, col2, col3)
v\col1 = col1
v\col2 = col2
v\col3 = col3
End Function

Function rVertexX#(v.Vertex)
Return v\x#
End Function

Function rVertexY#(v.Vertex)
Return v\y#
End Function

Function rVertexZ#(v.Vertex)
Return v\z#
End Function

Function rTrisRendered()
Return Tris
End Function

Function rCameraViewPort(e.Entity, x, y, w, h)
e\ViewX = x
e\ViewY = y
e\ViewWidth = w
e\ViewHeight = h
End Function

Function rHideEntity(e.Entity)
e\vis = False
End Function

Function rShowEntity(e.Entity)
e\vis = True
End Function

Code: [AUSKLAPPEN]
;File:              Lib_Engine.bb
;Author:            Devils Child
;Description:       Hauptteil des Opensource Software-Renderer
;Original Uploaded: www.BlitzForum.de

Include "Lib_Matrix.bb"
Include "Lib_Control.bb"

;Global
Type Entity
  Field Matrix.Matrix, vis, typ

  Field X#, Y#, Z#
  Field sx#, sy#, sz#
  Field Pitch#, Yaw#
  Field col1, col2, col3
  Field Fliped

  Field Zoom#, ProjMode
  Field ClsColor1, ClsColor2, ClsColor3
  Field ViewX, ViewY, ViewWidth, ViewHeight
End Type
Type Vertex
  Field Entity.Entity
  Field x#, y#, z#
  Field px, py
  Field Vector3D.Vector
  Field col1, col2, col3
End Type
Type Polygon
  Field Entity.Entity
  Field v1.Vertex, v2.Vertex, v3.Vertex
  Field Distance#
End Type
Global Mat1.Matrix = CreateMatrix()
Global Mat2.Matrix = CreateMatrix()
Global Mat3.Matrix = CreateMatrix()
Global Mat4.Matrix = CreateMatrix()
Const TypeCamera = 1
Global ScreenWidth, ScreenHeight
Dim xval(3), yval(3)
Dim Tmp.Vertex(1000000), Tmp2.Vertex(1024, 1024), Tmp3.Vertex(100, 100, 4)
Global Tris
Global Wire = False
Global winLeft
Global winRight
Global winTop
Global winBottom

Function rInit(width, height, depth, windowmode)
Graphics width, height, depth, windowmode
SetBuffer BackBuffer()
SeedRnd MilliSecs()
ScreenWidth = width
ScreenHeight = height
End Function

Function rRenderWorld()
;Position&Rotate Objects
For e.Entity = Each Entity
  MatrixRotateY(Mat2, -e\Yaw#)
  MatrixRotateX(Mat3, -e\Pitch#)
  MatrixScale(Mat4, e\sx#, e\sz#, e\sz#)
  MatrixMultiplyMatrix(Mat2, Mat3, e\Matrix)
  MatrixMultiplyMatrix(Mat4, e\Matrix, e\Matrix)
Next
;Render
Tris = 0
For c.Entity = Each Entity
  If c\typ = TypeCamera And c\vis And c\ProjMode <> 0 Then
    ;Set ViewPort Options
    winLeft = c\ViewX
    winTop = c\ViewY
    winRight = c\ViewWidth + c\ViewX - 1
    winBottom = c\ViewHeight + c\ViewY - 1
    Color c\ClsColor1 * c\col1 / 255, c\ClsColor2 * c\col2 / 255, c\ClsColor3 * c\col3 / 255
    Rect c\ViewX, c\ViewY, c\ViewWidth, c\ViewHeight
    LockBuffer BackBuffer()
    ;Translate Camera
    MatrixTranslate(Mat1, -c\X#, -c\Y#, -c\Z#)
    MatrixMultiplyMatrix(Mat1, c\Matrix, c\Matrix)
    ;Project Vertices
    For v.Vertex = Each Vertex
      ;Transpose Vertex to Vector3D
      v\Vector3D\x# = v\x#
      v\Vector3D\y# = v\y#
      v\Vector3D\z# = v\z#
      ;Vector * Entity * Camera
      VectorMultiplyMatrix(v\Vector3D, v\Entity\Matrix)
      VectorMultiplyMatrix(v\Vector3D, c\Matrix)
      ;Project Vertices
      Select c\ProjMode
        Case 1
          v\px = Render_ProjectX(v\Vector3D\x# + v\Entity\X#, v\Vector3D\z# + v\Entity\Z#, c\Zoom#, c\ViewWidth, c\ViewX)
          v\py = Render_ProjectY(v\Vector3D\y# + v\Entity\Y#, v\Vector3D\z# + v\Entity\Z#, c\Zoom#, c\ViewWidth, c\ViewY - c\ViewWidth / 8)
        Case 2
          v\px = Render_ProjectX(v\Vector3D\x# + v\Entity\X#, 1, c\Zoom#, c\ViewWidth, c\ViewX)
          v\py = Render_ProjectY(v\Vector3D\y# + v\Entity\Y#, 1, c\Zoom#, c\ViewWidth, c\ViewY - c\ViewWidth / 8)
      End Select
    Next
    ;Sort Polygons
    If Wire = False Then
      cnt = 0
      For p.Polygon = Each Polygon
        VX# = (p\v1\Vector3D\x# + p\v2\Vector3D\x# + p\v3\Vector3D\x#) / 3 + p\Entity\X#
        VY# = (p\v1\Vector3D\y# + p\v2\Vector3D\y# + p\v3\Vector3D\y#) / 3 + p\Entity\Y#
        VZ# = (p\v1\Vector3D\z# + p\v2\Vector3D\z# + p\v3\Vector3D\z#) / 3 + p\Entity\Z#
        p\Distance# = VX# * VX# + VY# * VY# + VZ# * VZ#
        cnt = cnt + 1
      Next
      If cnt > 1 Then
        bs = 1
        Repeat
          p.Polygon = Last Polygon
          Insert p Before First Polygon
          p.Polygon = First Polygon
          value# = p\Distance#
          x = 1
          bs = bs + 1
          While bs <> x
            p.Polygon = After p
            x = x + 1
            If value# < p\Distance# Then
              Insert p Before Before p
              p.Polygon = After p
            Else
              Exit
            End If
          Wend
        Until cnt = bs
      EndIf
    EndIf
    ;Draw Triangles
    For p.Polygon = Each Polygon
      If p\Entity\vis Then
        If Render_Cull(p\v1\px, p\v1\py, p\v2\px, p\v2\py, p\v3\px, p\v3\py) Xor p\Entity\Fliped And (p\v1\px > 0 Or p\v2\px > 0 Or p\v3\px > 0) And (p\v1\py > 0 Or p\v2\py > 0 Or p\v3\py > 0) And (p\v1\px < ScreenWidth Or p\v2\px < ScreenWidth Or p\v3\px < ScreenWidth) And (p\v1\py < ScreenHeight Or p\v2\py < ScreenHeight Or p\v3\py < ScreenHeight) And p\v1\Vector3D\z# + p\Entity\Z# > 0 And p\v2\Vector3D\z# + p\Entity\Z# > 0 And p\v3\Vector3D\z# + p\Entity\Z# > 0 Then
          If Wire Then
            Color 255, 255, 255
            Line p\v1\px, p\v1\py, p\v2\px, p\v2\py
            Line p\v2\px, p\v2\py, p\v3\px, p\v3\py
            Line p\v3\px, p\v3\py, p\v1\px, p\v1\py
          Else
            sc1# = c\col1 * p\Entity\col1 / 65025.0
            sc2# = c\col2 * p\Entity\col2 / 65025.0
            sc3# = c\col3 * p\Entity\col3 / 65025.0
            Render_DrawTriangle(p\v1\px, p\v1\py, p\v2\px, p\v2\py, p\v3\px, p\v3\py, p\v1\col1 * sc1, p\v1\col2 * sc2, p\v1\col3 * sc3, p\v2\col1 * sc1, p\v2\col2 * sc2, p\v2\col3 * sc3, p\v3\col1 * sc1, p\v3\col2 * sc2, p\v3\col3 * sc3)
          EndIf
          Tris = Tris + 1
        EndIf
      EndIf
    Next
    UnlockBuffer BackBuffer()
  EndIf
Next
End Function

Function Render_ProjectX(x#, z#, zoom#, ViewportWidth, ViewPortX)
Return x# * ViewportWidth * zoom# / z# / 2 + ViewportWidth / 2 + ViewPortX
End Function

Function Render_ProjectY(y#, z#, zoom#, ViewportHeight, ViewPortY)
Return y# * ViewportHeight * -zoom# / z# / 2 + ViewportHeight / 2 + ViewPortY
End Function

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

Function Render_DrawTriangle(x0, y0, x1, y1, x2, y2, r0, g0, b0, r1, g1, b1, r2, g2, b2)
If y0 > y1 Then
  tmpx = y0
  y0 = y1
  y1 = tmpx
  tmpx = x0
  x0 = x1
  x1 = tmpx
  tmpx = r0
  r0 = r1
  r1 = tmpx
  tmpx = g0
  g0 = g1
  g1 = tmpx
  tmpx = b0
  b0 = b1
  b1 = tmpx
End If
If y0 > y2 Then
  tmpx = y0
  y0 = y2
  y2 = tmpx
  tmpx = x0
  x0 = x2
  x2 = tmpx
  tmpx = r0
  r0 = r2
  r2 = tmpx
  tmpx = g0
  g0 = g2
  g2 = tmpx
  tmpx = b0
  b0 = b2
  b2 = tmpx
End If
If y1 > y2 Then
  tmpx = y1
  y1 = y2
  y2 = tmpx
  tmpx = x1
  x1 = x2
  x2 = tmpx
  tmpx = r1
  r1 = r2
  r2 = tmpx
  tmpx = g1
  g1 = g2
  g2 = tmpx
  tmpx = b1
  b1 = b2
  b2 = tmpx
End If
If y0 <> y1 Then
  If y1 = y2 Then ey = y1 Else ey = y1 - 1
  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 Then xs2 = -1 Else xs2 = 1
  If x0 > x1 Then xs1 = -1 Else xs1 = 1
  If r0 > r1 Then rsg1 = -1 Else rsg1 = 1
  If g0 > g1 Then gsg1 = -1 Else gsg1 = 1
  If b0 > b1 Then bsg1 = -1 Else bsg1 = 1
  If r0 > r2 Then rsg2 = -1 Else rsg2 = 1
  If g0 > g2 Then gsg2 = -1 Else gsg2 = 1
  If b0 > b2 Then bsg2 = -1 Else bsg2 = 1
  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 And yp => winTop And yp <= winBottom Then
      If xc1 > xc2 Then
        tmpx = xc1
        xc1 = xc2
        xc2 = tmpx
        tmpx = rcg1
        rcg1 = rcg2
        rcg2 = tmpx
        tmpx = gcg1
        gcg1 = gcg2
        gcg2 = tmpx
        tmpx = bcg1
        bcg1 = bcg2
        bcg2 = tmpx
      End If
      If xc1 <= winRight And xc2 => winLeft Then
        d = xc2 - xc1
        If xc1 < winLeft Then xc1 = winLeft
        If xc2 > winRight Then xc2 = winRight
        If rcg1 > rcg2 Then rs = -1 Else rs = 1
        If gcg1 > gcg2 Then gs = -1 Else gs = 1
        If bcg1 > bcg2 Then bs = -1 Else bs = 1
        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, BackBuffer()
          r = r + dfr
          g = g + dfg
          b = b + dfb
          mcr = mcr + dmr
          If mcr => d Then
            mcr = mcr - d
            r = r + rs
          End If
          mcg = mcg + dmg
          If mcg => d Then
            mcg = mcg - d
            g = g + gs
          End If
          mcb = mcb + dmb
          If mcb => d Then
            mcb = mcb - d
            b = b + bs
          End If
        Next
      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 Then
      mc1 = mc1 - dy1
      xp1 = xp1 + xs1
    End If
    If mc2 => dy2 Then
      mc2 = mc2 - dy2
      xp2 = xp2 + xs2
    End If
    If mcrg1 => dy1 Then
      mcrg1 = mcrg1 - dy1
      rg1 = rg1 + rsg1
    End If
    If mcgg1 => dy1 Then
      mcgg1 = mcgg1 - dy1
      gg1 = gg1 + gsg1
    End If
    If mcbg1 => dy1 Then
      mcbg1 = mcbg1 - dy1
      bg1 = bg1 + bsg1
    End If
    If mcrg2 => dy2 Then
      mcrg2 = mcrg2 - dy2
      rg2 = rg2 + rsg2
    End If
    If mcgg2 => dy2 Then
      mcgg2 = mcgg2 - dy2
      gg2 = gg2 + gsg2
    End If
    If mcbg2 => dy2 Then
      mcbg2 = mcbg2 - dy2
      bg2 = bg2 + bsg2
    End If
  Next
Else
  If y1 = y2 Then 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 Then xs2 = -1 Else xs2 = 1
  If r0 > r2 Then rsg2 = -1 Else rsg2 = 1
  If g0 > g2 Then gsg2 = -1 Else gsg2 = 1
  If b0 > b2 Then bsg2 = -1 Else bsg2 = 1
  xp2 = x0
  mc2 = dm2
  rg2 = r0
  mcrg2 = dmrg2
  gg2 = g0
  mcgg2 = dmgg2
  bg2 = b0
  mcbg2 = dmbg2
End If
If y1 <> y2 Then
  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 Then xs1 = -1 Else xs1 = 1
  If r1 > r2 Then rsg1 = -1 Else rsg1 = 1
  If g1 > g2 Then gsg1 = -1 Else gsg1 = 1
  If b1 > b2 Then bsg1 = -1 Else bsg1 = 1
  xp1 = x1
  mc1 = dm1
  rg1 = r1
  mcrg1 = dmrg1
  gg1 = g1
  mcgg1 = dmgg1
  bg1 = b1
  mcbg1 = dmbg1
  If y2 > winBottom Then 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 And yp => winTop And yp <= winBottom Then
      If xc1 > xc2 Then
        tmpx = xc1
        xc1 = xc2
        xc2 = tmpx
        tmpx = rcg1
        rcg1 = rcg2
        rcg2 = tmpx
        tmpx = gcg1
        gcg1 = gcg2
        gcg2 = tmpx
        tmpx = bcg1
        bcg1 = bcg2
        bcg2 = tmpx
      End If
      If xc1 <= winRight And xc2 => winLeft Then
        d = xc2 - xc1
        If xc1 < winLeft Then xc1 = winLeft
        If xc2 > winRight Then xc2 = winRight
        If rcg1 > rcg2 Then rs = -1 Else rs = 1
        If gcg1 > gcg2 Then gs = -1 Else gs = 1
        If bcg1 > bcg2 Then bs = -1 Else bs = 1
        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, BackBuffer()
          r = r + dfr
          g = g + dfg
          b = b + dfb
          mcr = mcr + dmr
          If mcr => d Then
            mcr = mcr - d
            r = r + rs
          End If
          mcg = mcg + dmg
          If mcg => d Then
            mcg = mcg - d
            g = g + gs
          End If
          mcb = mcb + dmb
          If mcb => d Then
            mcb = mcb - d
            b = b + bs
          End If
        Next
      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 Then
      mc1 = mc1 - dy1
      xp1 = xp1 + xs1
    End If
    If mc2 => dy2 Then
      mc2 = mc2 - dy2
      xp2 = xp2 + xs2
    End If
    If mcrg1 => dy1 Then
      mcrg1 = mcrg1 - dy1
      rg1 = rg1 + rsg1
    End If
    If mcgg1 => dy1 Then
      mcgg1 = mcgg1 - dy1
      gg1 = gg1 + gsg1
    End If
    If mcbg1 => dy1 Then
      mcbg1 = mcbg1 - dy1
      bg1 = bg1 + bsg1
    End If
    If mcrg2 => dy2 Then
      mcrg2 = mcrg2 - dy2
      rg2 = rg2 + rsg2
    End If
    If mcgg2 => dy2 Then
      mcgg2 = mcgg2 - dy2
      gg2 = gg2 + gsg2
    End If
    If mcbg2 => dy2 Then
      mcbg2 = mcbg2 - dy2
      bg2 = bg2 + bsg2
    End If
  Next
End If
End Function

Function rAddTriangle.Polygon(Mesh.Entity, v1.Vertex, v2.Vertex, v3.Vertex)
p.Polygon = New Polygon
p\Entity = Mesh
p\v1 = v1
p\v2 = v2
p\v3 = v3
Return p
End Function

Function rAddVertex.Vertex(Mesh.Entity, x#, y#, z#)
v.Vertex = New Vertex
v\Entity.Entity = Mesh
v\x# = x#
v\y# = y#
v\z# = z#
v\col1 = 255
v\col2 = 255
v\col3 = 255
v\Vector3D = CreateVector()
Return v
End Function

Function rCreateMesh.Entity()
e.Entity = New Entity
e\Matrix.Matrix = CreateMatrix()
e\sx# = 1
e\sy# = 1
e\sz# = 1
e\vis = True
e\Zoom# = 1
e\ProjMode = 1
e\col1 = 255
e\col2 = 255
e\col3 = 255
Return e
End Function

Function rCreateCube.Entity()
Mesh.Entity = rCreateMesh()
v1.Vertex = rAddVertex(Mesh, -.5, -.5, -.5)
v2.Vertex = rAddVertex(Mesh, .5, -.5, -.5)
v3.Vertex = rAddVertex(Mesh, -.5, -.5, .5)
v4.Vertex = rAddVertex(Mesh, .5, -.5, .5)
v5.Vertex = rAddVertex(Mesh, -.5, .5, -.5)
v6.Vertex = rAddVertex(Mesh, .5, .5, -.5)
v7.Vertex = rAddVertex(Mesh, -.5, .5, .5)
v8.Vertex = rAddVertex(Mesh, .5, .5, .5)
rAddTriangle(Mesh, v1, v5, v6)
rAddTriangle(Mesh, v1, v6, v2)
rAddTriangle(Mesh, v1, v7, v5)
rAddTriangle(Mesh, v1, v3, v7)
rAddTriangle(Mesh, v6, v8, v2)
rAddTriangle(Mesh, v4, v2, v8)
rAddTriangle(Mesh, v7, v3, v8)
rAddTriangle(Mesh, v3, v4, v8)
rAddTriangle(Mesh, v5, v7, v8)
rAddTriangle(Mesh, v5, v8, v6)
rAddTriangle(Mesh, v1, v2, v3)
rAddTriangle(Mesh, v2, v4, v3)
Return Mesh
End Function

Function rCreateCone.Entity(seg# = 8)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
For i# = 1 To seg#
  w# = 360 * i# / seg#
  Tmp(i) = rAddVertex(Mesh, Cos(w#) / 2, -.5, Sin(w#) / 2)
Next
v1.Vertex = rAddVertex(Mesh, 0, .5, 0)
For i = 1 To seg#
  a = i + 1
  If a > seg Then a = 1
  rAddTriangle(Mesh, Tmp(a), Tmp(i), v1)
Next
For i = 1 To seg - 2
  a = i + 1: If a > seg Then a = 1
  b = i + 2: If b > seg Then b = 2
  rAddTriangle(Mesh, Tmp(1), Tmp(a), Tmp(b))
Next
Return Mesh
End Function

Function rCreateCylinder.Entity(seg# = 8)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
For i# = 1 To seg#
  w# = 360 * i# / seg#
  Tmp2(i, 0) = rAddVertex(Mesh, Cos(w#) / 2, -.5, Sin(w#) / 2)
  Tmp2(i, 1) = rAddVertex(Mesh, Cos(w#) / 2, .5, Sin(w#) / 2)
Next
For i = 1 To seg#
  a = i + 1
  If a > seg Then a = 1
  rAddTriangle(Mesh, Tmp2(a, 0), Tmp2(i, 0), Tmp2(a, 1))
  rAddTriangle(Mesh, Tmp2(i, 0), Tmp2(i, 1), Tmp2(a, 1))
Next
For i = 1 To seg - 2
  a = i + 1: If a > seg Then a = 1
  b = i + 2: If b > seg Then b = 2
  rAddTriangle(Mesh, Tmp2(1, 0), Tmp2(a, 0), Tmp2(b, 0))
  rAddTriangle(Mesh, Tmp2(1, 1), Tmp2(b, 1), Tmp2(a, 1))
Next
Return Mesh
End Function

Function rCreateFrustrum.Entity(seg# = 8, rad# = .5)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
For i# = 1 To seg#
  w# = 360 * i# / seg#
  Tmp2(i, 0) = rAddVertex(Mesh, Cos(w#) / 2, -.5, Sin(w#) / 2)
  Tmp2(i, 1) = rAddVertex(Mesh, Cos(w#) * rad# / 2, .5, Sin(w#) * rad# / 2)
Next
For i = 1 To seg#
  a = i + 1
  If a > seg Then a = 1
  rAddTriangle(Mesh, Tmp2(a, 0), Tmp2(i, 0), Tmp2(a, 1))
  rAddTriangle(Mesh, Tmp2(i, 0), Tmp2(i, 1), Tmp2(a, 1))
Next
For i = 1 To seg - 2
  a = i + 1: If a > seg Then a = 1
  b = i + 2: If b > seg Then b = 2
  rAddTriangle(Mesh, Tmp2(1, 0), Tmp2(a, 0), Tmp2(b, 0))
  rAddTriangle(Mesh, Tmp2(1, 1), Tmp2(b, 1), Tmp2(a, 1))
Next
Return Mesh
End Function

Function rCreateTube.Entity(seg# = 8, rad# = .5)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
For i# = 1 To seg#
  w# = 360 * i# / seg#
  Tmp2(i, 0) = rAddVertex(Mesh, Cos(w#) / 2, -.5, Sin(w#) / 2)
  Tmp2(i, 1) = rAddVertex(Mesh, Cos(w#) / 2, .5, Sin(w#) / 2)
  Tmp2(i, 2) = rAddVertex(Mesh, Cos(w#) * rad# / 2, -.5, Sin(w#) * rad# / 2)
  Tmp2(i, 3) = rAddVertex(Mesh, Cos(w#) * rad# / 2, .5, Sin(w#) * rad# / 2)
Next
For i = 1 To seg#
  a = i + 1
  If a > seg Then a = 1
  rAddTriangle(Mesh, Tmp2(a, 0), Tmp2(i, 0), Tmp2(a, 1))
  rAddTriangle(Mesh, Tmp2(i, 0), Tmp2(i, 1), Tmp2(a, 1))
  rAddTriangle(Mesh, Tmp2(a, 2), Tmp2(a, 3), Tmp2(i, 2))
  rAddTriangle(Mesh, Tmp2(i, 2), Tmp2(a, 3), Tmp2(i, 3))
  rAddTriangle(Mesh, Tmp2(i, 0), Tmp2(a, 0), Tmp2(i, 2))
  rAddTriangle(Mesh, Tmp2(i, 2), Tmp2(a, 0), Tmp2(a, 2))
  rAddTriangle(Mesh, Tmp2(i, 1), Tmp2(i, 3), Tmp2(a, 1))
  rAddTriangle(Mesh, Tmp2(i, 3), Tmp2(a, 3), Tmp2(a, 1))
Next
Return Mesh
End Function

Function rCreateTorus.Entity(seg# = 8, rad# = .5)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
For cnt1 = 1 To seg#
  fat# = cnt1 * 360.0 / seg#
  radius# = 1 + rad# * Sin(fat)
  deg# = 0
  z# = rad# * Cos(fat)
  For cnt2 = 1 To seg#
    deg# = cnt2 * 360.0 / seg#
     x# = radius# * Cos(deg)
    y# = radius# * Sin(deg)
    Tmp2(cnt1, cnt2) = rAddVertex(Mesh, x# / 2, y# / 2, z# / 2)
  Next
Next
For x = 1 To seg#
  For y = 1 To seg#
    a = x + 1
    b = y + 1
    If a > seg# Then a = 1
    If b > seg# Then b = 1
    rAddTriangle Mesh, Tmp2(x, y), Tmp2(a, y), Tmp2(x, b)
    rAddTriangle Mesh, Tmp2(a, b), Tmp2(x, b), Tmp2(a, y)
  Next
Next
Return Mesh
End Function

Function rCreateSphere.Entity(seg# = 8)
If seg < 3 Or seg > 100 Then RuntimeError("Illegal number of segments.")
Mesh.Entity = rCreateMesh()
div# = 180.0 / seg
height# = 1.0
RotAngle# = 0
For i = 1 To seg * 2
  np.Vertex = rAddVertex(Mesh, 0, height / 2, 0)
  sp.Vertex = rAddVertex(Mesh, 0, -height / 2, 0)
  YPos# = Cos(div#)
  XPos# = -Cos(RotAngle#) * Sin(div#)
  ZPos# = Sin(RotAngle#) * Sin(div#)
  v0t.Vertex = rAddVertex(Mesh, XPos# / 2, YPos# / 2, ZPos# / 2)
  v0b.Vertex = rAddVertex(Mesh, XPos# / 2, -YPos# / 2, ZPos# / 2)
  RotAngle# = RotAngle# + div#
  XPos# = -Cos(RotAngle#) * Sin(div#)
  ZPos# = Sin(RotAngle#) * Sin(div#)
  upos# = upos# - udiv#
  v1t.Vertex = rAddVertex(Mesh, XPos# / 2, YPos# / 2, ZPos# / 2)
  v1b.Vertex = rAddVertex(Mesh, XPos# / 2, -YPos# / 2, ZPos# / 2)
  rAddTriangle Mesh, np, v0t, v1t
  rAddTriangle Mesh, v1b, v0b, sp
Next
RotAngle# = 0
For i = 1 To seg * 2
  mult# = 1
  YPos# = Cos(div# * mult#)
  YPos2# = Cos(div# * mult# + div#)
  Thisvdiv# = vdiv#
  For j = 1 To seg - 2
    XPos# = -Cos(RotAngle#) * Sin(div# * mult#)
    ZPos# = Sin(RotAngle#) * Sin(div# * mult#)
    XPos2# = -Cos(RotAngle#) * Sin(div# * mult# + div#)
    ZPos2# = Sin(RotAngle#) * Sin(div# * mult# + div#)
    v0t.Vertex = rAddVertex(Mesh, XPos# / 2, YPos# / 2, ZPos# / 2)
    v0b.Vertex = rAddVertex(Mesh, XPos2# / 2, YPos2# / 2, ZPos2# / 2)
    tempRotAngle# = RotAngle# + div#
    XPos# = -Cos(tempRotAngle#) * Sin(div# * mult#)
    ZPos# = Sin(tempRotAngle#) * Sin(div# * mult#)
    XPos2# = -Cos(tempRotAngle#) * Sin(div# * mult# + div#)
    ZPos2# = Sin(tempRotAngle#) * Sin(div# * mult# + div#)
    v1t.Vertex = rAddVertex(Mesh, XPos# / 2, YPos# / 2, ZPos# / 2)
    v1b.Vertex = rAddVertex(Mesh, XPos2# / 2, YPos2# / 2, ZPos2# / 2)
    rAddTriangle Mesh, v1t, v0t, v0b
    rAddTriangle Mesh, v1b, v1t, v0b
    mult# = mult# + 1
    YPos# = Cos(div# * mult#)
    YPos2# = Cos(div# * mult# + div#)
  Next
  RotAngle# = RotAngle# + div#
Next
Return Mesh
End Function

Function rCreateCamera.Entity()
e.Entity = rCreateMesh()
e\typ = TypeCamera
e\ViewWidth = ScreenWidth
e\ViewHeight = ScreenHeight
Return e
End Function

Function rLoadMesh.Entity(path$)
Mesh.Entity = rCreateMesh()
file = ReadFile(path$)
VCnt = ReadInt(file)
TCnt = ReadInt(file)
For v = 0 To VCnt
  Tmp(v) = rAddVertex(Mesh, ReadFloat(file), ReadFloat(file), ReadFloat(file))
Next
For t = 0 To TCnt
  rAddTriangle(Mesh, Tmp(ReadInt(file)), Tmp(ReadInt(file)), Tmp(ReadInt(file)))
Next
Return Mesh
End Function

Function UpdateDebugLine(x = 0, y = 0)
Color 0, 0, 0
Rect x, y, 98, 25
Color 255, 255, 255
Rect x - 1, y - 1, 100, 27, False
Text x + 5, y + 5,  "FPS = " + Int(FPS)
End Function

Code: [AUSKLAPPEN]
;File:              Lib_Matrix.bb
;Author:            Devils Child
;Description:       Teil des Opensource Software-Renderer
;Original Uploaded: www.BlitzForum.de

Type Matrix
  Field aa#, ab#, ac#, ad#
  Field ba#, bb#, bc#, bd#
  Field ca#, cb#, cc#, cd#
  Field da#, db#, dc#, dd#
End Type

Type Vector
  Field x#, y#, z#
End Type

Function CreateMatrix.Matrix()
Local m.Matrix = New Matrix
MatrixIdentity(m)
Return m
End Function

Function FreeMatrix(m.Matrix)
Delete m
m = Null
End Function

Function MatrixIdentity(m.Matrix)
m\aa# = 1: m\ab# = 0: m\ac# = 0: m\ad# = 0
m\ba# = 0: m\bb# = 1: m\bc# = 0: m\bd# = 0
m\ca# = 0: m\cb# = 0: m\cc# = 1: m\cd# = 0
m\da# = 0: m\db# = 0: m\dc# = 0: m\dd# = 1
End Function

Function MatrixRotateX(m.Matrix, a#)
m\aa# = 1: m\ab# = 0:         m\ac# = 0:        m\ad# = 0
m\ba# = 0: m\bb# = Cos#(a#):  m\bc# = Sin#(a#): m\bd# = 0
m\ca# = 0: m\cb# = -Sin#(a#): m\cc# = Cos#(a#): m\cd# = 0
m\da# = 0: m\db# = 0:         m\dc# = 0:        m\dd# = 1
End Function

Function MatrixRotateY(m.Matrix, a#)
m\aa# = Cos#(a#): m\ab# = 0: m\ac# = -Sin#(a#): m\ad# = 0
m\ba# = 0:        m\bb# = 1: m\bc# = 0:         m\bd# = 0
m\ca# = Sin#(a#): m\cb# = 0: m\cc# = Cos#(a#):  m\cd# = 0
m\da# = 0:        m\db# = 0: m\dc# = 0:         m\dd# = 1
End Function

Function MatrixRotateZ(m.Matrix, a#)
m\aa# =  Cos#(a#): m\ab# = Sin#(a#): m\ac# = 0: m\ad# = 0
m\ba# = -Sin#(a#): m\bb# = Cos#(a#): m\bc# = 0: m\bd# = 0
m\ca# =  0:        m\cb# = 0:        m\cc# = 1: m\cd# = 0
m\da# =  0:        m\db# = 0:        m\dc# = 0: m\dd# = 1
End Function

Function MatrixScale(m.Matrix, sx#, sy#, sz#)
m\aa# = sx#: m\ab# = 0:   m\ac# = 0:   m\ad# = 0
m\ba# = 0:   m\bb# = sy#: m\bc# = 0:   m\bd# = 0
m\ca# = 0:   m\cb# = 0:   m\cc# = sz#: m\cd# = 0
m\da# = 0:   m\db# = 0:   m\dc# = 0:   m\dd# = 1
End Function

Function MatrixTranslate(m.Matrix, tx#, ty#, tz#)
m\aa# = 1:   m\ab# = 0:   m\ac# = 0:   m\ad# = 0
m\ba# = 0:   m\bb# = 1:   m\bc# = 0:   m\bd# = 0
m\ca# = 0:   m\cb# = 0:   m\cc# = 1:   m\cd# = 0
m\da# = tx#: m\db# = ty#: m\dc# = tz#: m\dd# = 1
End Function

Function MatrixMultiplyMatrix(a.Matrix, b.Matrix, c.Matrix)
c\aa# = a\aa# * b\aa# + a\ab# * b\ba# + a\ac# * b\ca# + a\ad# * b\da#
c\ab# = a\aa# * b\ab# + a\ab# * b\bb# + a\ac# * b\cb# + a\ad# * b\db#
c\ac# = a\aa# * b\ac# + a\ab# * b\bc# + a\ac# * b\cc# + a\ad# * b\dc#
c\ad# = a\aa# * b\ad# + a\ab# * b\bd# + a\ac# * b\cd# + a\ad# * b\dd#
c\ba# = a\ba# * b\aa# + a\bb# * b\ba# + a\bc# * b\ca# + a\bd# * b\da#
c\bb# = a\ba# * b\ab# + a\bb# * b\bb# + a\bc# * b\cb# + a\bd# * b\db#
c\bc# = a\ba# * b\ac# + a\bb# * b\bc# + a\bc# * b\cc# + a\bd# * b\dc#
c\bd# = a\ba# * b\ad# + a\bb# * b\bd# + a\bc# * b\cd# + a\bd# * b\dd#
c\ca# = a\ca# * b\aa# + a\cb# * b\ba# + a\cc# * b\ca# + a\cd# * b\da#
c\cb# = a\ca# * b\ab# + a\cb# * b\bb# + a\cc# * b\cb# + a\cd# * b\db#
c\cc# = a\ca# * b\ac# + a\cb# * b\bc# + a\cc# * b\cc# + a\cd# * b\dc#
c\cd# = a\ca# * b\ad# + a\cb# * b\bd# + a\cc# * b\cd# + a\cd# * b\dd#
c\da# = a\da# * b\aa# + a\db# * b\ba# + a\dc# * b\ca# + a\dd# * b\da#
c\db# = a\da# * b\ab# + a\db# * b\bb# + a\dc# * b\cb# + a\dd# * b\db#
c\dc# = a\da# * b\ac# + a\db# * b\bc# + a\dc# * b\cc# + a\dd# * b\dc#
c\dd# = a\da# * b\ad# + a\db# * b\bd# + a\dc# * b\cd# + a\dd# * b\dd#
End Function

Function CreateVector.Vector()
Local v.Vector = New Vector
Return v
End Function

Function VectorMultiplyMatrix(v.Vector, m.Matrix)
tx# = v\x#
ty# = v\y#
tz# = v\z#
v\x# = m\aa# * tx# + m\ba# * ty# + m\ca# * tz# + m\da#
v\y# = m\ab# * tx# + m\bb# * ty# + m\cb# * tz# + m\db#
v\z# = m\ac# * tx# + m\bc# * ty# + m\cc# * tz# + m\dc#
End Function

Code: [AUSKLAPPEN]
;File:              Tool_Converter.bb
;Author:            Devils Child
;Description:       Convertiert ein Mesh zu einer,
;                   von dem Open Source-Renderer verwendbaren, .3d-Datei
;Original Uploaded: www.BlitzForum.de

Graphics3D 400, 300, 32, 2

Sphere = LoadMesh("Model.3ds")
ConvertObject(Sphere, "Model.3d")

Function ConvertObject(Mesh, FileTo$)
Surf = GetSurface(Mesh, 1)
file = WriteFile(FileTo$)
WriteInt file, CountVertices(Surf)
WriteInt file, CountTriangles(Surf)
For v = 0 To CountVertices(Surf) - 1
  WriteFloat file, VertexX(Surf, v)
  WriteFloat file, VertexY(Surf, v)
  WriteFloat file, VertexZ(Surf, v)
Next
For t = 0 To CountTriangles(Surf) - 1
  WriteInt file, TriangleVertex(Surf, t, 0)
  WriteInt file, TriangleVertex(Surf, t, 1)
  WriteInt file, TriangleVertex(Surf, t, 2)
Next
End Function

Code: [AUSKLAPPEN]
;File:              Example1 - Primitives&Effects.bb
;Author:            Devils Child
;Description:       Demonstriert den Open Source-Renderer
;Original Uploaded: www.BlitzForum.de

Include "Lib_Engine.bb"
rInit 800, 600, 32, 2

;Globs
Global FPS#

;Camera
Global Cam.Entity = rCreateCamera()
rCameraClsColor Cam, 64, 127, 255

;Entity
Global Entity.Entity[7]
Entity[1] = rCreateCube()
Entity[2] = rCreateCylinder()
Entity[3] = rCreateFrustrum()
Entity[4] = rCreateTube()
Entity[5] = rCreateCone()
Entity[6] = rCreateSphere()
Entity[7] = rCreateTorus()
cnt = 0
For x = 1 To 4
  For y = 1 To 2
    cnt = cnt + 1
    If cnt < 8 Then
      rPositionEntity Entity[cnt], x * 2 - 6 + y, y * 2 - 3.5, 4.5
      rEntityColor Entity[cnt], Rand(0, 255), Rand(0, 255), Rand(0, 255)
    EndIf
  Next
Next

gamma = False
proj = False
wf = False
FPS# = 100
While Not KeyHit(1)
  For i = 1 To 7
    rTurnEntity Entity[i], 80.0 / FPS#, 80.0 / FPS#
  Next
  If KeyHit(2) Then
    For i = 1 To 7
      rEntityVertexColorRandom Entity[i]
      rEntityColor Entity[i], 255, 255, 255
    Next
  EndIf
  If KeyHit(3) Then gamma = 1 - gamma
  If gamma Then
    gam = Sin(MilliSecs() / 5) * 100 + 155
    rEntityColor Cam, gam, gam, gam
  Else
    rEntityColor Cam, 255, 255, 255
  EndIf
  If KeyHit(4) Then
    For i = 1 To 7
      rFlipMesh Entity[i]
    Next
  EndIf
  If KeyHit(5) Then
    proj = 1 - proj
    rCameraProjMode Cam, proj + 1
    If proj Then rCameraZoom Cam, .251 Else rCameraZoom Cam, 1
  EndIf
  If KeyHit(6) Then
    wf = 1 - wf
    rWireFrame wf
  EndIf

  ;FPS
  loops = loops + 1
  If MilliSecs() - time1 > 500 Then
    FPS# = loops * 2
    loops = 0
    time1 = MilliSecs()
  End If

  rRenderWorld()
  UpdateDebugLine(10, 10)

  Color 0, 0, 0
  Rect 200, 10, 500, 105
  Color 255, 255, 255
  Rect 199, 9, 502, 107, False
  Text 205, 15, "Press key 1 to set random vertex-colors."
  Text 205, 35, "Press key 2 to swich gamma mode."
  Text 205, 55, "Press key 3 to flip all entitys."
  Text 205, 75, "Press key 4 to change camera project mode."
  Text 205, 95, "Press key 5 to change wireframe mode."
  Flip 0
Wend
End

Code: [AUSKLAPPEN]
;File:              Example2 - SpeedTest_DirectX.bb
;Author:            Devils Child
;Description:       Demonstriert den Open Source-Renderer
;Original Uploaded: www.BlitzForum.de

Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()
AmbientLight 255, 255, 255

;Globs
Global FPS#

;Camera
Global Cam = CreateCamera()
PositionEntity Cam, 0, 2.6, -3.5
CameraClsColor Cam, 64, 127, 255
RotateEntity Cam, 40, 0, 0
CameraZoom Cam, 2

;Entity
Mesh = LoadMesh("Media\Teapot.x")
EntityFX Mesh, 2
Surf = GetSurface(Mesh, 1)
For i = 0 To CountVertices(Surf) - 1
  VertexColor(Surf, i, Rand(0, 255), Rand(0, 255), Rand(0, 255))
Next

FPS# = 100
While Not KeyHit(1)
  TurnEntity Mesh, 0, 80.0 / FPS#, 0

  ;FPS
  loops = loops + 1
  If MilliSecs() - time1 > 500 Then
    FPS# = loops * 2
    loops = 0
    time1 = MilliSecs()
  End If

  RenderWorld()
  UpdateDebugLine(10, 10)
  Flip 0
Wend
End

Function UpdateDebugLine(x = 0, y = 0)
cnt1 = 0: cnt2 = 0: cnt3 = 0: cnt4 = 0
Color 0, 0, 0
Rect x, y, 98, 25
Color 255, 255, 255
Rect x - 1, y - 1, 100, 27, False
Text x + 5, y + 5,  "FPS = " + Int(FPS)
End Function

Code: [AUSKLAPPEN]
;File:              Example2 - SpeedTest_Software.bb
;Author:            Devils Child
;Description:       Demonstriert den Open Source-Renderer
;Original Uploaded: www.BlitzForum.de

Include "Lib_Engine.bb"
rInit 800, 600, 32, 2

;Globs
Global FPS#

;Camera
Global Cam.Entity = rCreateCamera()
rPositionEntity Cam, 0, 2.6, -3.5
rCameraClsColor Cam, 64, 127, 255
rRotateEntity Cam, 40, 0
rCameraZoom Cam, 2

;Entity
Mesh.Entity = rLoadMesh("Media\Teapot.3d")
rEntityVertexColorRandom Mesh

FPS# = 100
While Not KeyHit(1)
  rTurnEntity Mesh, 0, 80.0 / FPS#

  ;FPS
  loops = loops + 1
  If MilliSecs() - time1 > 500 Then
    FPS# = loops * 2
    loops = 0
    time1 = MilliSecs()
  End If

  rRenderWorld()
  UpdateDebugLine(10, 10)
  Flip 0
Wend
End

Code: [AUSKLAPPEN]
;File:              Example3 - Water-Engine.bb
;Author:            Devils Child
;Description:       Demonstriert den Open Source-Renderer
;Original Uploaded: www.BlitzForum.de

Include "Lib_Engine.bb"
rInit 1024, 768, 32, 2

Global FPS#

;Camera
Global Cam.Entity = rCreateCamera()
rPositionEntity Cam, 11, 10, -2
rCameraClsColor Cam, 64, 127, 255
rRotateEntity Cam, 35, 0

Global WaterGridSize = 20

;Entity
Dim wt.Vertex(WaterGridSize + 1, WaterGridSize + 1), wh(WaterGridSize + 1, WaterGridSize + 1)
Water.Entity = rCreateMesh()
For x = 1 To WaterGridSize + 1
  For z = 1 To WaterGridSize + 1
    wt(x, z) = rAddVertex(Water, x, 0, z)
    wh(x, z) = Rand(0, 360)
  Next
Next
For x = 1 To WaterGridSize
  For z = 1 To WaterGridSize
    rAddTriangle(Water, wt(x, z), wt(x, z + 1), wt(x + 1, z))
    rAddTriangle(Water, wt(x + 1, z + 1), wt(x + 1, z), wt(x, z + 1))
  Next
Next

While Not KeyHit(1)
  For x = 1 To WaterGridSize + 1
    For z = 1 To WaterGridSize + 1
      rVertexCoords wt(x, z), rVertexX(wt(x, z)), Sin(MilliSecs() / 3 + wh(x, z)) / 6, rVertexZ(wt(x, z))
      rVertexColor wt(x, z), 0, 0, rVertexY(wt(x, z)) * 100 + 200
    Next
  Next

  ;FPS
  loops = loops + 1
  If MilliSecs() - time1 > 500 Then
    FPS# = loops * 2
    loops = 0
    time1 = MilliSecs()
  End If

  rRenderWorld()
  UpdateDebugLine(10, 10)
  Flip 0
Wend
End

Code: [AUSKLAPPEN]
;File:              Example4 - ViewPorts.bb
;Author:            Devils Child
;Description:       Demonstriert den Open Source-Renderer
;Original Uploaded: www.BlitzForum.de

Include "Lib_Engine.bb"
rInit 800, 600, 32, 2

;Globs
Global FPS#

;Camera1
Cam1.Entity = rCreateCamera()
rPositionEntity Cam1, 0, 0, -1.3
rCameraClsColor Cam1, 64, 127, 255
rCameraViewPort Cam1, 0, 0, 390, 290

;Camera2
Cam2.Entity = rCreateCamera()
rPositionEntity Cam2, 0, 0, 1.3
rCameraClsColor Cam2, 64, 127, 255
rCameraViewPort Cam2, 410, 0, 390, 290
rRotateEntity Cam2, 0, 180

;Camera3
Cam3.Entity = rCreateCamera()
rPositionEntity Cam3, 0, 1.3, 0
rCameraClsColor Cam3, 64, 127, 255
rCameraViewPort Cam3, 0, 310, 390, 290
rRotateEntity Cam3, 90, 0

;Entity
Mesh.Entity = rCreateTube()
rEntityVertexColorRandom Mesh

FPS# = 100
While Not KeyHit(1)
  rTurnEntity Mesh, 80.0 / FPS#, 80.0 / FPS#

  ;FPS
  loops = loops + 1
  If MilliSecs() - time1 > 500 Then
    FPS# = loops * 2
    loops = 0
    time1 = MilliSecs()
  End If

  rRenderWorld()
  UpdateDebugLine(355, 288)
  Color 255, 255, 255
  Text 5, 5, "Front"
  Text 415, 5, "Back"
  Text 5, 315, "Top"
  Flip 0
Wend
End

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group