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] [EINKLAPPEN] Graphics3D 800, 600, 16, 2 SetBuffer BackBuffer( )
Const WaterDetail = 64 Local WaterWaveHeight# = 0.5 Local WaterWaveWidth# = 25.0 Local WaterWaveAngle# = 45 Local WaterWave# = 0 Local DoWater = True
Local Camera = CreateCamera( ) Local light = CreateLight( ) Local Timer = CreateTimer( 60 )
Local WaterMesh = CreateMesh( ) Local WaterSurface = CreateSurface( WaterMesh, CreateBrush( 64, 64, 255 ) )
Dim WaterVertex( WaterDetail-1, WaterDetail-1 )
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
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 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 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
|