Metaballs 3D / Marching Cubes

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Noobody

Betreff: Metaballs 3D / Marching Cubes

BeitragSa, Mai 02, 2009 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor kurzem bin ich über einen kleinen Code von mir gestolpert, der sich mit Metaballs in 2D beschäftigte.
Metaballs sind, wie der Name schon sagt, einzelne Bälle, die aber auf alle möglichen Arten ineinander zerfliessen und verschmelzen können. Sie sind nicht nur schön anzusehen, sondern können auch nützlich werden, wenn man etwa Wassertropfen oder organische Stoffe darstellen will (weswegen sie auch zum Funktionsumfang einiger Modellierungsprogramme gehören).

Damals bin ich kläglich an der Umsetzung in 3D gescheitert, da es nicht ohne weiteres möglich ist, das berechnete Voxelgitter darstellen zu lassen.
Durch den sogenannten Marching Cubes - Algorithmus wird dies aber ermöglicht, weswegen ich ihn nachprogrammiert habe.

Die Metaballs verschlingen leider relativ viel Berechnungszeit, weswegen das Ganze nicht wirklich Echtzeitfähig ist (so um die 10 FPS).
Falls also jemand Tipps zur Optimierung hat - her damit Razz

Edit: Okay, ich nehme das oben zurück. Sie sind tatsächlich echtzeitfähig Razz

Screenshot:
user posted image

Der Code: BlitzBasic: [AUSKLAPPEN]
Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()

Const TRESHOLD# = 0.5

Const GRIDWIDTH = 64
Const GRIDHEIGHT = 64
Const GRIDDEPTH = 64

Dim TLT( 255, 15 )
Dim EdgeTable( 255 )
Dim VoxelData#( 0, 0, 0 )

Type TMetaBall
Field X#
Field Y#
Field Z#

Field Charge#
End Type

Init()

Timer = CreateTimer( 60 )

While Not KeyHit( 1 )
If KeyHit( 57 ) Or Mesh = 0 Then
For MetaBall.TMetaBall = Each TMetaBall
MetaBall\X# = Rnd( 10, 60 )
MetaBall\Y# = Rnd( 10, 60 )
MetaBall\Z# = Rnd( 10, 60 )
MetaBall\Charge# = Rnd( 10, 40 )
Next

If Mesh Then FreeEntity Mesh

Counter = MilliSecs()
UpdateMetaballs()
Delta = MilliSecs() - Counter
Mesh = MarchingCubes( GRIDWIDTH, GRIDHEIGHT, GRIDDEPTH )
Delta2 = MilliSecs() - Counter - Delta

DeltaTime$ = "Berechnungszeit: Metaballs " + Delta + "ms Marching Cubes " + Delta2 + "ms"

UpdateNormals Mesh
EndIf

RenderWorld

Text 0, 0, DeltaTime$

Flip 0
WaitTimer Timer
Wend
End

Function Init()
Cam = CreateCamera()
PositionEntity Cam, 32, 32, -32

Light = CreateLight( 2 )
PositionEntity Light, 64, 64, 0
LightRange Light, 32

LoadTLT()
LoadEdgeTable()

For i = 1 To 5
MetaBall.TMetaBall = New TMetaBall
MetaBall\X# = Rnd( 5, 60 )
MetaBall\Y# = Rnd( 5, 60 )
MetaBall\Z# = Rnd( 5, 30 )
MetaBall\Charge# = Rnd( 10, 40 )
Next
End Function

Function UpdateMetaballs()
Dim VoxelData#( GRIDWIDTH - 1, GRIDHEIGHT - 1, GRIDDEPTH - 1 )

For X = 0 To GRIDWIDTH - 1
For Y = 0 To GRIDHEIGHT - 1
For Z = 0 To GRIDDEPTH - 1
For MetaBall.TMetaBall = Each TMetaBall
DistSq# = ( X - Metaball\X# )*( X - Metaball\X# ) + ( Y - Metaball\Y# )*( Y - Metaball\Y# ) + ( Z - Metaball\Z# )*( Z - Metaball\Z# )
VoxelData( X, Y, Z ) = VoxelData( X, Y, Z ) + MetaBall\Charge/DistSQ#
Next
Next
Next
Next
End Function

Function LoadTLT()
Restore TLT

For CubeIndex = 0 To 255
For EdgeIndex = 0 To 15
Read TLT( CubeIndex, EdgeIndex )
Next
Next
End Function

Function LoadEdgeTable()
Restore EdgeTable

For CubeIndex = 0 To 255
Read EdgeTable( CubeIndex )
Next
End Function

Function MarchingCubes( Width, Height, Depth )
Local EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ], VertexCount

Local TriMesh = CreateMesh()
Local TriSurf = CreateSurface( TriMesh )

For Z = 0 To Depth - 2
For X = 0 To Width - 2
For Y = 0 To Height - 2
Local CubeIndex = 0

If VoxelData#( X + 0, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000001
If VoxelData#( X + 1, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000010
If VoxelData#( X + 1, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000100
If VoxelData#( X + 0, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00001000
If VoxelData#( X + 0, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00010000
If VoxelData#( X + 1, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00100000
If VoxelData#( X + 1, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %01000000
If VoxelData#( X + 0, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %10000000

If EdgeTable( CubeIndex ) > 0 Then
If EdgeTable( CubeIndex ) And %000000000001 Then InterpolateEdge( X + 0, Y + 1, Z + 1, X + 1, Y + 1, Z + 1, 0, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000010 Then InterpolateEdge( X + 1, Y + 1, Z + 1, X + 1, Y + 1, Z + 0, 1, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000100 Then InterpolateEdge( X + 1, Y + 1, Z + 0, X + 0, Y + 1, Z + 0, 2, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000001000 Then InterpolateEdge( X + 0, Y + 1, Z + 0, X + 0, Y + 1, Z + 1, 3, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000000010000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 1, Y + 0, Z + 1, 4, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000100000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 0, Z + 0, 5, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000001000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 0, Y + 0, Z + 0, 6, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000010000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 0, Z + 1, 7, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000100000000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 0, Y + 1, Z + 1, 8, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %001000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 1, Z + 1, 9, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %010000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 1, Y + 1, Z + 0, 10, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %100000000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 1, Z + 0, 11, EdgeX, EdgeY, EdgeZ )

Local TriIndex = 0
While TLT( CubeIndex, TriIndex ) >= 0
V1 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 0 ) ] )
V2 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 1 ) ] )
V3 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 2 ) ] )

AddTriangle TriSurf, V1, V2, V3

TriIndex = TriIndex + 3
VertexCount = VertexCount + 3
Wend

If VertexCount > 65000 Then TriSurf = CreateSurface( TriMesh ) ;Die Vertexbuffer von DX sollten wir nicht sprengen
EndIf
Next
Next
Next

Return TriMesh
End Function

Function InterpolateEdge( X1, Y1, Z1, X2, Y2, Z2, Index, EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ] )
Ratio# = ( TRESHOLD# - VoxelData#( X1, Y1, Z1 ) )/( VoxelData#( X2, Y2, Z2 ) - VoxelData#( X1, Y1, Z1 ) )

EdgeX[ Index ] = X1 + Ratio#*( X2 - X1 )
EdgeY[ Index ] = Y1 + Ratio#*( Y2 - Y1 )
EdgeZ[ Index ] = Z1 + Ratio#*( Z2 - Z1 )
End Function

.EdgeTable ;Die Seiten des Würfels, die geschnitten werden
Data $000, $109, $203, $30A, $406, $50F, $605, $70C
Data $80C, $905, $A0F, $B06, $C0A, $D03, $E09, $F00
Data $190, $099, $393, $29A, $596, $49F, $795, $69C
Data $99C, $895, $B9F, $A96, $D9A, $C93, $F99, $E90
Data $230, $339, $033, $13A, $636, $73F, $435, $53C
Data $A3C, $B35, $83F, $936, $E3A, $F33, $C39, $D30
Data $3A0, $2A9, $1A3, $0AA, $7A6, $6AF, $5A5, $4AC
Data $BAC, $AA5, $9AF, $8A6, $fAA, $EA3, $DA9, $CA0
Data $460, $569, $663, $76A, $066, $16F, $265, $36C
Data $C6C, $D65, $E6F, $F66, $86A, $963, $A69, $B60
Data $5F0, $4F9, $7F3, $6FA, $1F6, $0FF, $3F5, $2FC
Data $DFC, $CF5, $FFF, $EF6, $9FA, $8F3, $BF9, $AF0
Data $650, $759, $453, $55A, $256, $35F, $055, $15C
Data $E5C, $F55, $C5F, $D56, $A5A, $B53, $859, $950
Data $7C0, $6C9, $5C3, $4CA, $3C6, $2CF, $1C5, $0CC
Data $FCC, $EC5, $DCF, $CC6, $BCA, $AC3, $9C9, $8C0
Data $8C0, $9C9, $AC3, $BCA, $CC6, $DCF, $EC5, $FCC
Data $0CC, $1C5, $2CF, $3C6, $4CA, $5C3, $6C9, $7C0
Data $950, $859, $B53, $A5A, $D56, $C5F, $F55, $E5C
Data $15C, $055, $35F, $256, $55A, $453, $759, $650
Data $AF0, $BF9, $8F3, $9FA, $EF6, $FFF, $CF5, $DFC
Data $2FC, $3F5, $0FF, $1F6, $6FA, $7F3, $4F9, $5F0
Data $B60, $A69, $963, $86A, $F66, $E6F, $D65, $C6C
Data $36C, $265, $16F, $066, $76A, $663, $569, $460
Data $CA0, $DA9, $EA3, $FAA, $8A6, $9AF, $AA5, $BAC
Data $4AC, $5A5, $6AF, $7A6, $0AA, $1A3, $2A9, $3A0
Data $D30, $C39, $F33, $E3A, $936, $83F, $B35, $A3C
Data $53C, $435, $73F, $636, $13A, $033, $339, $230
Data $E90, $F99, $C93, $D9A, $A96, $B9F, $895, $99C
Data $69C, $795, $49F, $596, $29A, $393, $099, $190
Data $F00, $E09, $D03, $C0A, $B06, $A0F, $905, $80C
Data $70C, $605, $50F, $406, $30A, $203, $109, $000


.TLT ;Triangle Lookup Table
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1
Data 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1
Data 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1
Data 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1
Data 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1
Data 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1
Data 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1
Data 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1
Data 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1
Data 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1
Data 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1
Data 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1
Data 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1
Data 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1
Data 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1
Data 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1
Data 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1
Data 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1
Data 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1
Data 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1
Data 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1
Data 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1
Data 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1
Data 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1
Data 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1
Data 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1
Data 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1
Data 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1
Data 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1
Data 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1
Data 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1
Data 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1
Data 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1
Data 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1
Data 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1
Data 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1
Data 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1
Data 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1
Data 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1
Data 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1
Data 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1
Data 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1
Data 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1
Data 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1
Data 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1
Data 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1
Data 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1
Data 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1
Data 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1
Data 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1
Data 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1
Data 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1
Data 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1
Data 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1
Data 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1
Data 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1
Data 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1
Data 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1
Data 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1
Data 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1
Data 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1
Data 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1
Data 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1
Data 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1
Data 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1
Data 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1
Data 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1
Data 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1
Data 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1
Data 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1
Data 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1
Data 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1
Data 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1
Data 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1
Data 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1
Data 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1
Data 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1
Data 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1
Data 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1
Data 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1
Data 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1
Data 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1
Data 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1
Data 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1
Data 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1
Data 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1
Data 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1
Data 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1
Data 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1
Data 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1
Data 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1
Data 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1
Data 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1
Data 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1
Data 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1
Data 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1
Data 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1

Mit der Leertaste werden die Metaballs zufällig positioniert und ein neues Bild berechnet.

Hier gibts das ganze noch in Echtzeit und mit Bewegung: BlitzBasic: [AUSKLAPPEN]
Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()

Const TRESHOLD# = 0.5

Const GRIDWIDTH = 32
Const GRIDHEIGHT = 32
Const GRIDDEPTH = 32

Dim TLT( 255, 15 )
Dim EdgeTable( 255 )
Dim VoxelData#( 0, 0, 0 )

Type TMetaBall
Field X#
Field Y#
Field Z#

Field VX#
Field VY#
Field VZ#

Field Charge#
End Type

Init()

Timer = CreateTimer( 60 )

While Not KeyHit( 1 )
Counter = MilliSecs()
UpdateMetaballs()
Delta = MilliSecs() - Counter
Mesh = MarchingCubes( GRIDWIDTH, GRIDHEIGHT, GRIDDEPTH )
Delta2 = MilliSecs() - Counter - Delta

ScaleEntity Mesh, 2, 2, 2
UpdateNormals Mesh

RenderWorld

FreeEntity Mesh

Text 0, 0, "Berechnungszeit: Metaballs " + Delta + "ms Marching Cubes " + Delta2 + "ms"

Flip 0
WaitTimer Timer
Wend
End

Function Init()
Cam = CreateCamera()
PositionEntity Cam, 32, 32, -32

Light = CreateLight( 2 )
PositionEntity Light, 64, 64, 0
LightRange Light, 32

LoadTLT()
LoadEdgeTable()

SeedRnd MilliSecs()

For i = 1 To 5
MetaBall.TMetaBall = New TMetaBall
MetaBall\X# = Rnd( 8, 24 )
MetaBall\Y# = Rnd( 8, 24 )
MetaBall\Z# = Rnd( 8, 24 )
MetaBall\VX# = Rnd( -0.5, 0.5 )
MetaBall\VY# = Rnd( -0.5, 0.5 )
MetaBall\VZ# = Rnd( -0.5, 0.5 )
MetaBall\Charge# = Rnd( 5, 8 )
Next
End Function

Function UpdateMetaballs()
Dim VoxelData#( GRIDWIDTH - 1, GRIDHEIGHT - 1, GRIDDEPTH - 1 )

For MetaBall.TMetaBall = Each TMetaBall
MetaBall\X# = MetaBall\X# + MetaBall\VX#
MetaBall\Y# = MetaBall\Y# + MetaBall\VY#
MetaBall\Z# = MetaBall\Z# + MetaBall\VZ#

If MetaBall\X# > GRIDWIDTH - 7 Or MetaBall\X# < 7 Then MetaBall\VX# = -MetaBall\VX#
If MetaBall\Y# > GRIDHEIGHT - 7 Or MetaBall\Y# < 7 Then MetaBall\VY# = -MetaBall\VY#
If MetaBall\Z# > GRIDDEPTH - 7 Or MetaBall\Z# < 7 Then MetaBall\VZ# = -MetaBall\VZ#
Next

For X = 0 To GRIDWIDTH - 1
For Y = 0 To GRIDHEIGHT - 1
For Z = 0 To GRIDDEPTH - 1
For MetaBall.TMetaBall = Each TMetaBall
DistSq# = ( X - Metaball\X# )*( X - Metaball\X# ) + ( Y - Metaball\Y# )*( Y - Metaball\Y# ) + ( Z - Metaball\Z# )*( Z - Metaball\Z# )
VoxelData( X, Y, Z ) = VoxelData( X, Y, Z ) + MetaBall\Charge/DistSQ#
Next
Next
Next
Next
End Function

Function LoadTLT()
Restore TLT

For CubeIndex = 0 To 255
For EdgeIndex = 0 To 15
Read TLT( CubeIndex, EdgeIndex )
Next
Next
End Function

Function LoadEdgeTable()
Restore EdgeTable

For CubeIndex = 0 To 255
Read EdgeTable( CubeIndex )
Next
End Function

Function MarchingCubes( Width, Height, Depth )
Local EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ], VertexCount

Local TriMesh = CreateMesh()
Local TriSurf = CreateSurface( TriMesh )

For Z = 0 To Depth - 2
For X = 0 To Width - 2
For Y = 0 To Height - 2
Local CubeIndex = 0

If VoxelData#( X + 0, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000001
If VoxelData#( X + 1, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000010
If VoxelData#( X + 1, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000100
If VoxelData#( X + 0, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00001000
If VoxelData#( X + 0, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00010000
If VoxelData#( X + 1, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00100000
If VoxelData#( X + 1, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %01000000
If VoxelData#( X + 0, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %10000000

If EdgeTable( CubeIndex ) > 0 Then
If EdgeTable( CubeIndex ) And %000000000001 Then InterpolateEdge( X + 0, Y + 1, Z + 1, X + 1, Y + 1, Z + 1, 0, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000010 Then InterpolateEdge( X + 1, Y + 1, Z + 1, X + 1, Y + 1, Z + 0, 1, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000100 Then InterpolateEdge( X + 1, Y + 1, Z + 0, X + 0, Y + 1, Z + 0, 2, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000001000 Then InterpolateEdge( X + 0, Y + 1, Z + 0, X + 0, Y + 1, Z + 1, 3, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000000010000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 1, Y + 0, Z + 1, 4, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000100000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 0, Z + 0, 5, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000001000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 0, Y + 0, Z + 0, 6, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000010000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 0, Z + 1, 7, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000100000000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 0, Y + 1, Z + 1, 8, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %001000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 1, Z + 1, 9, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %010000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 1, Y + 1, Z + 0, 10, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %100000000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 1, Z + 0, 11, EdgeX, EdgeY, EdgeZ )

Local TriIndex = 0
While TLT( CubeIndex, TriIndex ) >= 0
V1 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 0 ) ] )
V2 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 1 ) ] )
V3 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 2 ) ] )

AddTriangle TriSurf, V1, V2, V3

TriIndex = TriIndex + 3
VertexCount = VertexCount + 3
Wend

If VertexCount > 65000 Then TriSurf = CreateSurface( TriMesh ) ;Die Vertexbuffer von DX sollten wir nicht sprengen
EndIf
Next
Next
Next

Return TriMesh
End Function

Function InterpolateEdge( X1, Y1, Z1, X2, Y2, Z2, Index, EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ] )
Ratio# = ( TRESHOLD# - VoxelData#( X1, Y1, Z1 ) )/( VoxelData#( X2, Y2, Z2 ) - VoxelData#( X1, Y1, Z1 ) )

EdgeX[ Index ] = X1 + Ratio#*( X2 - X1 )
EdgeY[ Index ] = Y1 + Ratio#*( Y2 - Y1 )
EdgeZ[ Index ] = Z1 + Ratio#*( Z2 - Z1 )
End Function

.EdgeTable ;Die Seiten des Würfels, die geschnitten werden
Data $000, $109, $203, $30A, $406, $50F, $605, $70C
Data $80C, $905, $A0F, $B06, $C0A, $D03, $E09, $F00
Data $190, $099, $393, $29A, $596, $49F, $795, $69C
Data $99C, $895, $B9F, $A96, $D9A, $C93, $F99, $E90
Data $230, $339, $033, $13A, $636, $73F, $435, $53C
Data $A3C, $B35, $83F, $936, $E3A, $F33, $C39, $D30
Data $3A0, $2A9, $1A3, $0AA, $7A6, $6AF, $5A5, $4AC
Data $BAC, $AA5, $9AF, $8A6, $fAA, $EA3, $DA9, $CA0
Data $460, $569, $663, $76A, $066, $16F, $265, $36C
Data $C6C, $D65, $E6F, $F66, $86A, $963, $A69, $B60
Data $5F0, $4F9, $7F3, $6FA, $1F6, $0FF, $3F5, $2FC
Data $DFC, $CF5, $FFF, $EF6, $9FA, $8F3, $BF9, $AF0
Data $650, $759, $453, $55A, $256, $35F, $055, $15C
Data $E5C, $F55, $C5F, $D56, $A5A, $B53, $859, $950
Data $7C0, $6C9, $5C3, $4CA, $3C6, $2CF, $1C5, $0CC
Data $FCC, $EC5, $DCF, $CC6, $BCA, $AC3, $9C9, $8C0
Data $8C0, $9C9, $AC3, $BCA, $CC6, $DCF, $EC5, $FCC
Data $0CC, $1C5, $2CF, $3C6, $4CA, $5C3, $6C9, $7C0
Data $950, $859, $B53, $A5A, $D56, $C5F, $F55, $E5C
Data $15C, $055, $35F, $256, $55A, $453, $759, $650
Data $AF0, $BF9, $8F3, $9FA, $EF6, $FFF, $CF5, $DFC
Data $2FC, $3F5, $0FF, $1F6, $6FA, $7F3, $4F9, $5F0
Data $B60, $A69, $963, $86A, $F66, $E6F, $D65, $C6C
Data $36C, $265, $16F, $066, $76A, $663, $569, $460
Data $CA0, $DA9, $EA3, $FAA, $8A6, $9AF, $AA5, $BAC
Data $4AC, $5A5, $6AF, $7A6, $0AA, $1A3, $2A9, $3A0
Data $D30, $C39, $F33, $E3A, $936, $83F, $B35, $A3C
Data $53C, $435, $73F, $636, $13A, $033, $339, $230
Data $E90, $F99, $C93, $D9A, $A96, $B9F, $895, $99C
Data $69C, $795, $49F, $596, $29A, $393, $099, $190
Data $F00, $E09, $D03, $C0A, $B06, $A0F, $905, $80C
Data $70C, $605, $50F, $406, $30A, $203, $109, $000


.TLT ;Triangle Lookup Table
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1
Data 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1
Data 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1
Data 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1
Data 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1
Data 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1
Data 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1
Data 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1
Data 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1
Data 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1
Data 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1
Data 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1
Data 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1
Data 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1
Data 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1
Data 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1
Data 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1
Data 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1
Data 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1
Data 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1
Data 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1
Data 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1
Data 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1
Data 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1
Data 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1
Data 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1
Data 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1
Data 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1
Data 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1
Data 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1
Data 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1
Data 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1
Data 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1
Data 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1
Data 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1
Data 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1
Data 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1
Data 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1
Data 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1
Data 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1
Data 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1
Data 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1
Data 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1
Data 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1
Data 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1
Data 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1
Data 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1
Data 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1
Data 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1
Data 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1
Data 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1
Data 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1
Data 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1
Data 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1
Data 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1
Data 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1
Data 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1
Data 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1
Data 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1
Data 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1
Data 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1
Data 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1
Data 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1
Data 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1
Data 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1
Data 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1
Data 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1
Data 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1
Data 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1
Data 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1
Data 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1
Data 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1
Data 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1
Data 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1
Data 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1
Data 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1
Data 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1
Data 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1
Data 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1
Data 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1
Data 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1
Data 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1
Data 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1
Data 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1
Data 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1
Data 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1
Data 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1
Data 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1
Data 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1
Data 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1
Data 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1
Data 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1
Data 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1
Data 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1
Data 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1
Data 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1
Data 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
  • Zuletzt bearbeitet von Noobody am Mo, Nov 09, 2009 17:52, insgesamt 2-mal bearbeitet

MikeDee

BeitragSa, Mai 02, 2009 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
schade, würde es gerne ansehen, aber für die Demoversion von BB3D ist es zu viel code
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

Chrise

BeitragSa, Mai 02, 2009 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
is ganz nett ^^
wobei es natürlich noch schöner wäre wenn es animiert wäre. Aber für statische Bilder oder Objekte echt cool!
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
 

da_poller

BeitragSa, Mai 02, 2009 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
verdammt schön!!

woher nimmst du die ideen immer?

Xaymar

ehemals "Cgamer"

BeitragSa, Mai 02, 2009 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ne exe für die dies sich nit angucken können:

EXE, Compiled mit B3d V1.98(ich verlasse mich nicht auf spätere versionen)

ist ganz schon schnell für 10 fps;) ich würd so 20-30 fps sagen bei dauernden space gedrückte
Warbseite

MikeDee

BeitragSa, Mai 02, 2009 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, also ich kann auf der Leertaste drauf hauen wie sonst was und es kommt locker mit. Naja, mein Rechner ist ja auch erst 1,5 Jahre alt...
Richtig cool währe es, wenn sich das ganze Bewegen würde und so schwabbelt und wabbelt.

p.s. wie bekomme ich die fps raus?
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

Xaymar

ehemals "Cgamer"

BeitragSa, Mai 02, 2009 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
fraps, xfire usw haben so nen overlay(xfire nur bei dx8+ games, fraps überall)
Warbseite

MikeDee

BeitragSa, Mai 02, 2009 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, komme auch auf 20-30 fps bei dauerdrafgehaue
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

Chrise

BeitragSa, Mai 02, 2009 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
MikeDee hat Folgendes geschrieben:
ok, komme auch auf 20-30 fps bei dauerdrafgehaue


is ja wahrscheinlich klar, wenn du das ganze immer wieder neu berechnen lässt Wink
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Thorsten

BeitragSa, Mai 02, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr scheint die Bedeutung von FPS noch nicht wirklich verstanden zu haben.
Am besten lässt sich die Geschwindigkeit immer noch an der (auch oben angezeigten) Berechnungszeit erkennen.

Komme auf höchstens 6 FPS in Echtzeit..meine CPU ist aber auch nicht die neueste Wink

MikeDee

BeitragSa, Mai 02, 2009 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, fps sind mir neu...
zur berechnungszeit: Metaballs ca. 70ms, Marching Cubes ca. 20ms.
P.s. ich will immer noch, dass sich da mehr bewegt^^
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

Xaymar

ehemals "Cgamer"

BeitragSa, Mai 02, 2009 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ihr scheint die Bedeutung von FPS noch nicht wirklich verstanden zu haben.

Falls ich gemeint war: wtf? -.- Als hardcore gamer weiß man was FPS sind, und was FPS bedeutet

berechnungszeit: metaballs: 15ms, marching: 20ms
Warbseite

Chrise

BeitragSa, Mai 02, 2009 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:

Falls ich gemeint war: wtf? -.- Als hardcore gamer weiß man was FPS sind, und was FPS bedeutet


Du hast das Wort FPS ja nicht mal in den Mund genommen XD
Wahrscheinlich war ich gemeint, obwohl ich eigentlich auch weiß was FPS sind und dessen Bedeutung kenne ^^
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

MikeDee

BeitragSa, Mai 02, 2009 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich ehrlich bin weiß ich was fps sind, "benutzt" dies aber zum ersten mal...
Hab mein vorherigen Post schlecht formuliert.
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.

Noobody

BeitragSo, Mai 03, 2009 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Et voilà - das Ganze in Echtzeit!

Der Trick dahinter bestand darin, das Voxelgitter zu verkleinern. Damit verliert das Mesh zwar ein wenig an Qualität, da es vorher aber bereits ziemlich hoch aufgelöst war, bemerkt man das fast nicht. Das Gitter habe ich nun halb so gross gemacht; dadurch wird die Berechnungszeit acht mal kleiner, womit es selbst auf meinem technisch nicht mehr so modernem Laptop mit mehr als 60 FPS läuft Razz

Der Code: BlitzBasic: [AUSKLAPPEN]
Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()

Const TRESHOLD# = 0.5

Const GRIDWIDTH = 32
Const GRIDHEIGHT = 32
Const GRIDDEPTH = 32

Dim TLT( 255, 15 )
Dim EdgeTable( 255 )
Dim VoxelData#( 0, 0, 0 )

Type TMetaBall
Field X#
Field Y#
Field Z#

Field VX#
Field VY#
Field VZ#

Field Charge#
End Type

Init()

Timer = CreateTimer( 60 )

While Not KeyHit( 1 )
Counter = MilliSecs()
UpdateMetaballs()
Delta = MilliSecs() - Counter
Mesh = MarchingCubes( GRIDWIDTH, GRIDHEIGHT, GRIDDEPTH )
Delta2 = MilliSecs() - Counter - Delta

ScaleEntity Mesh, 2, 2, 2
UpdateNormals Mesh

RenderWorld

FreeEntity Mesh

Text 0, 0, "Berechnungszeit: Metaballs " + Delta + "ms Marching Cubes " + Delta2 + "ms"

Flip 0
WaitTimer Timer
Wend
End

Function Init()
Cam = CreateCamera()
PositionEntity Cam, 32, 32, -32

Light = CreateLight( 2 )
PositionEntity Light, 64, 64, 0
LightRange Light, 32

LoadTLT()
LoadEdgeTable()

SeedRnd MilliSecs()

For i = 1 To 5
MetaBall.TMetaBall = New TMetaBall
MetaBall\X# = Rnd( 8, 24 )
MetaBall\Y# = Rnd( 8, 24 )
MetaBall\Z# = Rnd( 8, 24 )
MetaBall\VX# = Rnd( -0.5, 0.5 )
MetaBall\VY# = Rnd( -0.5, 0.5 )
MetaBall\VZ# = Rnd( -0.5, 0.5 )
MetaBall\Charge# = Rnd( 5, 8 )
Next
End Function

Function UpdateMetaballs()
Dim VoxelData#( GRIDWIDTH - 1, GRIDHEIGHT - 1, GRIDDEPTH - 1 )

For MetaBall.TMetaBall = Each TMetaBall
MetaBall\X# = MetaBall\X# + MetaBall\VX#
MetaBall\Y# = MetaBall\Y# + MetaBall\VY#
MetaBall\Z# = MetaBall\Z# + MetaBall\VZ#

If MetaBall\X# > GRIDWIDTH - 7 Or MetaBall\X# < 7 Then MetaBall\VX# = -MetaBall\VX#
If MetaBall\Y# > GRIDHEIGHT - 7 Or MetaBall\Y# < 7 Then MetaBall\VY# = -MetaBall\VY#
If MetaBall\Z# > GRIDDEPTH - 7 Or MetaBall\Z# < 7 Then MetaBall\VZ# = -MetaBall\VZ#
Next

For X = 0 To GRIDWIDTH - 1
For Y = 0 To GRIDHEIGHT - 1
For Z = 0 To GRIDDEPTH - 1
For MetaBall.TMetaBall = Each TMetaBall
DistSq# = ( X - Metaball\X# )*( X - Metaball\X# ) + ( Y - Metaball\Y# )*( Y - Metaball\Y# ) + ( Z - Metaball\Z# )*( Z - Metaball\Z# )
VoxelData( X, Y, Z ) = VoxelData( X, Y, Z ) + MetaBall\Charge/DistSQ#
Next
Next
Next
Next
End Function

Function LoadTLT()
Restore TLT

For CubeIndex = 0 To 255
For EdgeIndex = 0 To 15
Read TLT( CubeIndex, EdgeIndex )
Next
Next
End Function

Function LoadEdgeTable()
Restore EdgeTable

For CubeIndex = 0 To 255
Read EdgeTable( CubeIndex )
Next
End Function

Function MarchingCubes( Width, Height, Depth )
Local EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ], VertexCount

Local TriMesh = CreateMesh()
Local TriSurf = CreateSurface( TriMesh )

For Z = 0 To Depth - 2
For X = 0 To Width - 2
For Y = 0 To Height - 2
Local CubeIndex = 0

If VoxelData#( X + 0, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000001
If VoxelData#( X + 1, Y + 1, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000010
If VoxelData#( X + 1, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00000100
If VoxelData#( X + 0, Y + 1, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00001000
If VoxelData#( X + 0, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00010000
If VoxelData#( X + 1, Y + 0, Z + 1 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %00100000
If VoxelData#( X + 1, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %01000000
If VoxelData#( X + 0, Y + 0, Z + 0 ) > TRESHOLD# Then CubeIndex = CubeIndex Or %10000000

If EdgeTable( CubeIndex ) > 0 Then
If EdgeTable( CubeIndex ) And %000000000001 Then InterpolateEdge( X + 0, Y + 1, Z + 1, X + 1, Y + 1, Z + 1, 0, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000010 Then InterpolateEdge( X + 1, Y + 1, Z + 1, X + 1, Y + 1, Z + 0, 1, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000000100 Then InterpolateEdge( X + 1, Y + 1, Z + 0, X + 0, Y + 1, Z + 0, 2, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000001000 Then InterpolateEdge( X + 0, Y + 1, Z + 0, X + 0, Y + 1, Z + 1, 3, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000000010000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 1, Y + 0, Z + 1, 4, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000000100000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 0, Z + 0, 5, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000001000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 0, Y + 0, Z + 0, 6, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %000010000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 0, Z + 1, 7, EdgeX, EdgeY, EdgeZ )

If EdgeTable( CubeIndex ) And %000100000000 Then InterpolateEdge( X + 0, Y + 0, Z + 1, X + 0, Y + 1, Z + 1, 8, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %001000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 1, X + 1, Y + 1, Z + 1, 9, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %010000000000 Then InterpolateEdge( X + 1, Y + 0, Z + 0, X + 1, Y + 1, Z + 0, 10, EdgeX, EdgeY, EdgeZ )
If EdgeTable( CubeIndex ) And %100000000000 Then InterpolateEdge( X + 0, Y + 0, Z + 0, X + 0, Y + 1, Z + 0, 11, EdgeX, EdgeY, EdgeZ )

Local TriIndex = 0
While TLT( CubeIndex, TriIndex ) >= 0
V1 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 0 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 0 ) ] )
V2 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 1 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 1 ) ] )
V3 = AddVertex( TriSurf, EdgeX[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeY[ TLT( CubeIndex, TriIndex + 2 ) ], EdgeZ[ TLT( CubeIndex, TriIndex + 2 ) ] )

AddTriangle TriSurf, V1, V2, V3

TriIndex = TriIndex + 3
VertexCount = VertexCount + 3
Wend

If VertexCount > 65000 Then TriSurf = CreateSurface( TriMesh ) ;Die Vertexbuffer von DX sollten wir nicht sprengen
EndIf
Next
Next
Next

Return TriMesh
End Function

Function InterpolateEdge( X1, Y1, Z1, X2, Y2, Z2, Index, EdgeX#[ 11 ], EdgeY#[ 11 ], EdgeZ#[ 11 ] )
Ratio# = ( TRESHOLD# - VoxelData#( X1, Y1, Z1 ) )/( VoxelData#( X2, Y2, Z2 ) - VoxelData#( X1, Y1, Z1 ) )

EdgeX[ Index ] = X1 + Ratio#*( X2 - X1 )
EdgeY[ Index ] = Y1 + Ratio#*( Y2 - Y1 )
EdgeZ[ Index ] = Z1 + Ratio#*( Z2 - Z1 )
End Function

.EdgeTable ;Die Seiten des Würfels, die geschnitten werden
Data $000, $109, $203, $30A, $406, $50F, $605, $70C
Data $80C, $905, $A0F, $B06, $C0A, $D03, $E09, $F00
Data $190, $099, $393, $29A, $596, $49F, $795, $69C
Data $99C, $895, $B9F, $A96, $D9A, $C93, $F99, $E90
Data $230, $339, $033, $13A, $636, $73F, $435, $53C
Data $A3C, $B35, $83F, $936, $E3A, $F33, $C39, $D30
Data $3A0, $2A9, $1A3, $0AA, $7A6, $6AF, $5A5, $4AC
Data $BAC, $AA5, $9AF, $8A6, $fAA, $EA3, $DA9, $CA0
Data $460, $569, $663, $76A, $066, $16F, $265, $36C
Data $C6C, $D65, $E6F, $F66, $86A, $963, $A69, $B60
Data $5F0, $4F9, $7F3, $6FA, $1F6, $0FF, $3F5, $2FC
Data $DFC, $CF5, $FFF, $EF6, $9FA, $8F3, $BF9, $AF0
Data $650, $759, $453, $55A, $256, $35F, $055, $15C
Data $E5C, $F55, $C5F, $D56, $A5A, $B53, $859, $950
Data $7C0, $6C9, $5C3, $4CA, $3C6, $2CF, $1C5, $0CC
Data $FCC, $EC5, $DCF, $CC6, $BCA, $AC3, $9C9, $8C0
Data $8C0, $9C9, $AC3, $BCA, $CC6, $DCF, $EC5, $FCC
Data $0CC, $1C5, $2CF, $3C6, $4CA, $5C3, $6C9, $7C0
Data $950, $859, $B53, $A5A, $D56, $C5F, $F55, $E5C
Data $15C, $055, $35F, $256, $55A, $453, $759, $650
Data $AF0, $BF9, $8F3, $9FA, $EF6, $FFF, $CF5, $DFC
Data $2FC, $3F5, $0FF, $1F6, $6FA, $7F3, $4F9, $5F0
Data $B60, $A69, $963, $86A, $F66, $E6F, $D65, $C6C
Data $36C, $265, $16F, $066, $76A, $663, $569, $460
Data $CA0, $DA9, $EA3, $FAA, $8A6, $9AF, $AA5, $BAC
Data $4AC, $5A5, $6AF, $7A6, $0AA, $1A3, $2A9, $3A0
Data $D30, $C39, $F33, $E3A, $936, $83F, $B35, $A3C
Data $53C, $435, $73F, $636, $13A, $033, $339, $230
Data $E90, $F99, $C93, $D9A, $A96, $B9F, $895, $99C
Data $69C, $795, $49F, $596, $29A, $393, $099, $190
Data $F00, $E09, $D03, $C0A, $B06, $A0F, $905, $80C
Data $70C, $605, $50F, $406, $30A, $203, $109, $000


.TLT ;Triangle Lookup Table
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1
Data 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1
Data 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1
Data 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1
Data 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1
Data 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1
Data 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1
Data 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1
Data 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1
Data 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1
Data 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1
Data 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1
Data 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1
Data 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1
Data 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1
Data 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1
Data 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1
Data 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1
Data 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1
Data 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1
Data 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1
Data 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1
Data 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1
Data 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1
Data 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1
Data 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1
Data 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1
Data 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1
Data 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1
Data 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1
Data 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1
Data 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1
Data 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1
Data 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1
Data 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1
Data 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1
Data 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1
Data 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1
Data 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1
Data 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1
Data 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1
Data 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1
Data 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1
Data 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1
Data 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1
Data 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1
Data 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1
Data 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1
Data 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1
Data 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1
Data 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1
Data 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1
Data 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1
Data 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1
Data 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1
Data 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1
Data 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1
Data 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1
Data 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1
Data 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1
Data 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1
Data 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1
Data 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1
Data 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1
Data 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1
Data 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1
Data 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1
Data 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1
Data 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1
Data 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1
Data 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1
Data 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1
Data 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1
Data 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1
Data 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1
Data 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1
Data 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1
Data 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1
Data 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1
Data 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1
Data 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1
Data 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1
Data 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1
Data 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1
Data 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1
Data 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1
Data 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1
Data 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1
Data 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1
Data 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1
Data 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1
Data 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1
Data 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1
Data 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1
Data 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1
Data 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1
Data 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1
Data 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1
Data 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1
Data 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1
Data 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1
Data 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1
Data 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1
Data 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1
Data 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1
Data 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1
Data 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1
Data 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1
Data 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1
Data 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1
Data 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1
Data 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1
Data 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1
Data 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1
Data 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1
Data 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1
Data 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1
Data 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1
Data 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1
Data 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1
Data 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1
Data 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1
Data 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1
Data 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1
Data 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1
Data 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1
Data 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1
Data 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Data -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1


Für die Blitzer ohne Vollversion habe ich hier eine kompilierte .exe hochgeladen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

kog

BeitragSo, Mai 03, 2009 1:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Läuft zwar schnell, aber wieso baust du keine FPS anzeige ein???
Habe kein Fraps oder ähnliches ...

ComNik

BeitragSo, Mai 03, 2009 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich find das sauschön! Ich mag so organische Sachen.
Läuft schnell und flüssig. *Ich hab nix mit FPS gesagt* *freu*

lg
WIP: Vorx.Engine

Thorsten

BeitragSo, Mai 03, 2009 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick schick! Ca. 50 FPS

MikeDee

BeitragSo, Mai 03, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Noobody hat Folgendes geschrieben:
Et voilà - das Ganze in Echtzeit!

Für die Blitzer ohne Vollversion habe ich hier eine kompilierte .exe hochgeladen.


Guter Service hier^^
Sieht gut aus und läuft flüssig und schnell, für meinen Geschmack aber ein tick zu schnell.

Blöde frage am Rande: für was kann man das gebrauchen?
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden.
 

mDave

BeitragSo, Mai 03, 2009 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hat Noobody aber wieder ein Meisterwerk hingezaubert.

@ MikeDee:
Nun... Noobody will halt seine Fähigkeiten ausreizen.
Als Augenschmankerl ist dieses doch tadellos.


Aber nun zurück zu deiner Frage:
Wie wäre es zum Beispiel mit einem Spiel in dem man einen Makrophagen spielt und Viren/Bakterien abwehren muss?
Oder in dem man andere Objekte umschließen muss?

Einige Sachen gäbe es schon dafür... aber eben nur einige... Smile

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group