[B3D] Wellen-Generator

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ToeB

Betreff: [B3D] Wellen-Generator

BeitragFr, Jun 03, 2011 2:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

Ich habe aus ein wenig Langeweile und ner schnellen Idee einen Wellen-Generator gebastelt, welcher auf einer Oberfläche Wellen erzeugt. Hinzu kommt noch, das man die Parameter verändern kann, also Wellenbreite, Wellenhöhe und Wellen-Winkel, in welche Richtung diese gehen sollen. Das ganze ist in einem einheitlichem Blau, man kann es aber locker mit einer Wasser-Texture belegen.

BlitzBasic: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer( )

Const WaterDetail = 64 ;Anzahl der Quadrate an jeder Seite
Local WaterWaveHeight# = 0.5 ;Höhe der Wellen
Local WaterWaveWidth# = 25.0 ;Abstand zwischen den Wellen -> Je größer der Wert, desto weniger Abstand zwischen ihnen
Local WaterWaveAngle# = 45 ;Winkel in welche Richtung die Wellen "wellen"
Local WaterWave# = 0
Local DoWater = True

Local Camera = CreateCamera( )
Local light = CreateLight( )
Local Timer = CreateTimer( 60 )

;Mesh mit Blauem Surface erstellen (Geht auch mit Wassertextur)
Local WaterMesh = CreateMesh( )
Local WaterSurface = CreateSurface( WaterMesh, CreateBrush( 64, 64, 255 ) )


Dim WaterVertex( WaterDetail-1, WaterDetail-1 )

;Array mit Vertex-Daten füllen
Local xx, yy
For xx = 0 To WaterDetail-1
For yy = 0 To WaterDetail-1
WaterVertex( xx, yy ) = AddVertex( WaterSurface, xx, 0, yy, Float(WaterDetail-1)/Float(xx), Float(WaterDetail-1)/Float(yy) )
Next
Next

;Aus dem Array die Vertices zu Triangles verbinden
For xx = 0 To WaterDetail-2
For yy = 0 To WaterDetail-2
AddTriangle( WaterSurface, WaterVertex( xx, yy ), WaterVertex( xx, yy+1 ), WaterVertex( xx+1, yy+1 ) )
AddTriangle( WaterSurface, WaterVertex( xx+1, yy+1 ), WaterVertex( xx+1, yy ), WaterVertex( xx, yy ) )
Next
Next
UpdateNormals( WaterMesh )

PositionEntity( Camera, (WaterDetail-1)/2, 2, 0 )

Repeat
If KeyHit( 57 ) Then DoWater = Not DoWater
If KeyDown( 203 ) Then WaterWaveAngle = WaterWaveAngle + 1
If KeyDown( 205 ) Then WaterWaveAngle = WaterWaveAngle - 1

If DoWater = True Then
WaterWave = WaterWave + 1
EndIf

;Vertices nach neuer Position ausrichten und daurch Wellenförmige Gebilde schaffen
For xx = 0 To WaterDetail-1
For yy = 0 To WaterDetail-1
VertexCoords( WaterSurface, WaterVertex( xx, yy ), xx, Sin( WaterWave+(xx+1)*Cos( WaterWaveAngle )*WaterWaveWidth+(yy+1)*Sin( WaterWaveAngle )*WaterWaveWidth)*WaterWaveHeight, yy )
Next
Next
UpdateNormals( WaterMesh )



RenderWorld( )
If KeyDown( 17 ) Then
;Wireframe über das normale Gerenderte malen
CameraClsMode( Camera, False, True )
WireFrame True
EntityColor WaterMesh, 255, 0, 0
RenderWorld( )
EntityColor WaterMesh, 255, 255, 255
WireFrame False
CameraClsMode( Camera, True, True )
EndIf

Text( 0, 0, "Wasser steuern : " )
Text( 0, 15, "Leertaste - Wellen erzeugen" )
Text( 0, 30, "W - Gitternetz der Polygone" )
Text( 0, 45, "Pfeiltasten - Richtung der Wellen ("+WaterWaveAngle+")" )

Flip 0
WaitTimer( Timer )

Until KeyHit( 1 )
End



Viel Spaß !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group