Na gut, hab ihn aber jetzt ein bissl aufgeräumt:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Graphics3D 1024,768,32 SetBuffer BackBuffer() SeedRnd MilliSecs()
Global wdb
Type shiptype Field ship Field mesh Field x,y Field p1,p2,p3,p4
End Type
AmbientLight 255,255,255 Global wellenhohe=50 Global wasserflaeche=8 Global wassersteuer=1
Global FXCamera=CreateCamera()
Global WaterMapTexture=CreateTexture(wasserflaeche,wasserflaeche,128+256+48) CameraClsMode FXCamera,False,True CameraProjMode FXCamera,0 CameraViewport FXCamera,0,0,wasserflaeche,wasserflaeche
Global wasserframe
Dim WaterY(wasserflaeche+1,wasserflaeche+1)
Global water=CreateTerrain(wasserflaeche)
EntityTexture water,WaterMapTexture
erstelle_meer
For a=0 To 20
schiff=LoadMesh(\"galleon.3ds\") FlipMesh(schiff)
createship(schiff,Rand(100,1000),Rand(100,1000),Rand(0,360)) Next
Global cam=CreateCamera() PositionEntity cam,0,150,0 TurnEntity cam,0,-45,0 loadskybox() CameraRange cam,1,100000000 TerrainShading water,1 TerrainDetail water,2000
EntityFX water,1
Repeat Cls If KeyDown(200) Then MoveEntity cam,0,0,1 If KeyDown(208) Then MoveEntity cam,0,0,-1 If KeyDown(203) Then MoveEntity cam,-1,0,0 If KeyDown(205) Then MoveEntity cam,1,0,1
If KeyDown(17) Then TurnEntity cam,1,0,0 If KeyDown(31) Then TurnEntity cam,-1,0,0 If KeyDown(30) Then TurnEntity cam,0,1,0 If KeyDown(32) Then TurnEntity cam,0,-1,0 RotateEntity cam,EntityPitch(cam),EntityYaw(cam),0
cubemap updatewellen updateships UpdateWorld RenderWorld If KeyDown(2) Then WireFrame 1:Else WireFrame 0 If MilliSecs()-frameszeit=>1000 Then frames=durchlauf frameszeit=MilliSecs() durchlauf=0 End If durchlauf=durchlauf +1 Text 1,1,frames Flip 0
Until KeyHit(1)
Function erstelle_meer()
For q = 0 To wasserflaeche For j = 0 To wasserflaeche WaterY(q,j) = Sin(q-j)*50000+10 Next Next
ScaleEntity water,200,wellenhohe,200 PositionEntity water,-500,0,-500
End Function
Function updatewellen() If KeyDown(79) Then wassersteuer=-1 If KeyDown(80) Then wassersteuer=1 Select wassersteuer Case -1 For z = 0 To wasserflaeche-1 Step 2 For x = 0 To wasserflaeche-1 Step 1 high# = Sin(WaterY(z,x)*3) ModifyTerrain water,x,z,(high#/2)+.5,False WaterY(z,x) = WaterY(z,x) + 1 Next Next
Case 1 For z = 1 To wasserflaeche-1 Step 2 For x = 0 To wasserflaeche-1 Step 1 high# = Sin(WaterY(z,x)*2) ModifyTerrain water,x,z,(high#/2)+.5,False WaterY(z,x) = WaterY(z,x) + 1 Next Next End Select wassersteuer=wassersteuer*(-1)
EntityTexture water,watermaptexture
End Function
Function createship(mesh,x=0,z=0,rotate=0)
Local neu.shiptype
neu=New shiptype
neu\ship=CreatePivot()
neu\p1=CreatePivot(neu\ship) PositionEntity neu\p1,10,0,+25
neu\p2=CreatePivot(neu\ship) PositionEntity neu\p2,10,0,-10
neu\p3=CreatePivot(neu\ship) PositionEntity neu\p3,-10,0,+25
neu\p4=CreatePivot(neu\ship) PositionEntity neu\p4,-10,0,-10
neu\mesh=mesh EntityParent neu\mesh,neu\ship
PositionEntity neu\ship,x,0,z RotateEntity neu\ship,0,rotate,0
End Function
Function updateships() Local update.shiptype For update=Each shiptype PositionEntity update\mesh,EntityX(update\mesh,1),TerrainY(water,EntityX(update\mesh,1),0,EntityZ(update\mesh,1))+10,EntityZ(update\mesh,1),1
PositionEntity update\p1,EntityX(update\p1,1),TerrainY(water,EntityX(update\p1,1),0,EntityZ(update\p1,1)),EntityZ(update\p1,1),1 PositionEntity update\p2,EntityX(update\p2,1),TerrainY(water,EntityX(update\p2,1),0,EntityZ(update\p2,1)),EntityZ(update\p2,1),1 PositionEntity update\p3,EntityX(update\p3,1),TerrainY(water,EntityX(update\p3,1),0,EntityZ(update\p3,1)),EntityZ(update\p3,1),1 PositionEntity update\p4,EntityX(update\p4,1),TerrainY(water,EntityX(update\p4,1),0,EntityZ(update\p4,1)),EntityZ(update\p4,1),1 zx#=(EntityX( update\p2,True )+EntityX( update\p4,True ))/2 zx=zx-(EntityX( update\p1,True )+EntityX( update\p3,True ))/2 zy#=(EntityY( update\p2,True )+EntityY( update\p4,True ))/2 zy=zy-(EntityY( update\p1,True )+EntityY( update\p3,True ))/2 zz#=(EntityZ( update\p2,True )+EntityZ( update\p4,True ))/2 zz=zz-(EntityZ( update\p1,True )+EntityZ( update\p3,True ))/2 AlignToVector update\mesh,zx,zy,zz,1,0.1 zx#=(EntityX( update\p1,True )+EntityX( update\p2,True ))/2 zx=zx-(EntityX( update\p3,True )+EntityX( update\p4,True ))/2 zy#=(EntityY( update\p1,True )+EntityY( update\p2,True ))/2 zy=zy-(EntityY( update\p3,True )+EntityY(update\p4,True ))/2 zz#=(EntityZ( update\p1,True )+EntityZ( update\p2,True ))/2 zz=zz-(EntityZ( update\p3,True )+EntityZ( update\p4,True ))/2 AlignToVector update\mesh,zx,zy,zz,3,0.1 TurnEntity update\ship,0,Rnd(0,0.15),0 MoveEntity update\ship,0,0,-0.5 Next
End Function
Function LoadSkyBox( parent=0 ) m=CreateMesh(parent) b=LoadBrush( \"sky_f.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0 AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b b=LoadBrush( \"sky_l.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0 AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b b=LoadBrush( \"sky_b.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0 AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b b=LoadBrush( \"sky_r.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0 AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b b=LoadBrush( \"sky_u.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0 AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b b=LoadBrush( \"sky_d.bmp\",49 ) s=CreateSurface( m,b ) AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1 AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0 AddTriangle s,0,1,2:AddTriangle s,0,2,3 FreeBrush b ScaleMesh m,5000,5000,5000 EntityOrder m,1 FlipMesh m EntityFX m,1 PositionEntity m,0,300,0 Return m End Function
Function cubemap()
CameraProjMode cam,0 CameraProjMode FXCamera,1 wdb=1-wdb PositionEntity FXCamera,EntityX(cam),EntityY(water)+2,EntityZ(cam)
If wdb SetCubeFace WaterMapTexture,0 RotateEntity FXCamera,0,90,0 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture) SetCubeFace WaterMapTexture,1 RotateEntity FXCamera,0,0,0 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture) Else SetCubeFace WaterMapTexture,2 RotateEntity FXCamera,0,-90,0 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture) SetCubeFace WaterMapTexture,3 RotateEntity FXCamera,0,180,0 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture) EndIf SetCubeFace WaterMapTexture,4 RotateEntity FXCamera,-90,0,0 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture) SetCubeFace WaterMapTexture,5 RotateEntity FXCamera,-90,0,180 RenderWorld CopyRect 0,0,wasserflaeche,wasserflaeche,0,0,BackBuffer(),TextureBuffer(WaterMapTexture)
CameraProjMode FXCamera,0 CameraProjMode cam,1
End Function
Die Cubemap-Funktion stammt aus der Cubewater-demo!
und wer sich das Disaster live ansehen will:
http://home.arcor.de/il.al.mue...ubemap.rar
Ich hoffe ihr könnt mir helfen!
MFG
Waveblue
|