OpenSource Software-Renderer
Übersicht

![]() |
Devils ChildBetreff: OpenSource Software-Renderer |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Schönes Projekt, nur leider ist der Quellcode grauenhaft unübersichtlich... grüße |
||
![]() |
Devils Child |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Nein, eben nicht. Eine gescheite Formatierung, gut gewählte Variablen- und Funktionsnamen und eine gute Kommentierung wirken Wunder... grüße |
||
![]() |
Mattis_the_brain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist doch schon mal was zum Vorzeigen... nicht wie die ganzen anderen Spielerein hier im Forum ![]() |
||
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
www.xairro.com |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
https://www.blitzforum.de/upload/file.php?id=5090
Wird sicherlich auch nicht (von mir) wieder gelöscht. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group