Показать сообщение отдельно
Старый 12.11.2005, 21:21   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Вот седня накатал...
Type Lightning
	Field LStartObj%
	Field LEndObj%
	Field Segments%
	Field LSeed%
	Field LUpdateTime%
	Field LLastUpdate%
	Field LPivot%
	Field RandomForce%
	Field LMesh%
	Field LSurface%[2]
	Field LThickness%
End Type

Function CreateLightning(StartObj%,EndObj%,RandomForce%,Segments%,Thickness%,UpdateSpeed%=100)
	
	L.Lightning = New Lightning
	
	L\LStartObj% = StartObj%
	L\LEndObj% = EndObj%
	
	L\LPivot%=CreatePivot(L\LStartObj%)
	
	L\Segments% = Segments%
	If L\Segments%<5 Then L\Segments%=5
	
	L\LThickness% = Thickness%
	
	L\LSeed% = MilliSecs()
	L\RandomForce% = RandomForce%
	
	UpdateSpeed% = Abs(UpdateSpeed%)
	If UpdateSpeed% < 10 Then UpdateSpeed% = 10
	L\LUpdateTime% = UpdateSpeed%
	
	L\LMesh=CreateMesh()
	EntityFX(L\LMesh,1+2+32+16)
	
	For k=0 To 2
 *L\LSurface[K]=CreateSurface(L\LMesh)
	Next
 *
	Local SX#=EntityX#(L\LStartObj%), SY#=EntityY#(L\LStartObj%), SZ#=EntityZ#(L\LStartObj%)
	Local EX#=EntityX#(L\LEndObj%), EY#=EntityY#(L\LEndObj%), EZ#=EntityZ#(L\LEndObj%)
	Local XS#=(EX#-SX#)/(L\Segments%-1), YS#=(EY#-SY#)/(L\Segments%-1), ZS#=(EZ#-SZ#)/(L\Segments%-1)
	Local V%,T#
	For k=0 To 2
 *For I=0 To L\Segments%-1
 *	For J=-1 To 1 Step 1
 * *V%=AddVertex(L\LSurface[K], SX#+I*XS#, SY#+I*YS#, SZ#+I*ZS#,Float(J+1)/Float(2),Float(I)/Float(L\Segments%-1))
 * *If J Then T=0 Else T=1
 * *VertexColor(L\LSurface[K], V%, ColorRed%()*Abs(K-1), ColorGreen%()*Abs(J-1)/2, ColorBlue%(),T)
 *	Next
 *Next
 *
 *For I=0 To L\Segments%-2
 *	For J=0 To 1
 * *AddTriangle (L\LSurface%[K],3*I+J, 3*I+J+1, J+1+3*(I+1))
 * *AddTriangle (L\LSurface%[K],3*I+J, J+1+3*(I+1), J+3*(I+1))
 *	Next
 *Next
	Next
;FlipMesh(L\LMesh)
 *UpdateNormals(L\LMesh)
 *UpdateLightning(L.Lightning)
 *
End Function

Function UpdateLightning(L.Lightning)
	Local SX#=EntityX#(L\LStartObj%,1), SY#=EntityY#(L\LStartObj%,1), SZ#=EntityZ#(L\LStartObj%,1)
	Local EX#=EntityX#(L\LEndObj%,1), EY#=EntityY#(L\LEndObj%,1), EZ#=EntityZ#(L\LEndObj%,1)
	Local XS#=(EX#-SX#)/(L\Segments%-1), YS#=(EY#-SY#)/(L\Segments%-1), ZS#=(EZ#-SZ#)/(L\Segments%-1)
	Local V%,DX#,DY#,DZ#
	
	If (MilliSecs()-L\LLastUpdate%)>L\LUpdateTime% Then 
 *L\LLastUpdate%=MilliSecs()
 *L\LSeed%=MilliSecs()
	EndIf
	
For k=0 To 2
	SeedRnd(L\LSeed%)
	For I=0 To L\Segments%-1
 *RotateEntity(L\LPivot, VectorPitch#(-XS#, -YS#, -ZS#),VectorYaw#(-XS#, -YS#, -ZS#),0,1)
 *TurnEntity(L\LPivot,0,0,k*60)
 *PositionEntity(L\LPivot,SX#,SY#,SZ#,1)
 *	If I=0 Or I=(L\Segments%-1) Then
 * *DX#=0: DY#=0: DZ#=0
 *	Else
 * *DX#=Rand(-L\RandomForce%,L\RandomForce%): DY#=Rand(-L\RandomForce%,L\RandomForce%): DZ#=Rand(-L\RandomForce%,L\RandomForce%)
 *	EndIf
 *For J=0 To 2
 *	V% = I*3+J
 *	Select J
 * *Case 0
 * *	MoveEntity(L\LPivot,0,L\LThickness%/2.0,0)
 * *Default
 * *	MoveEntity(L\LPivot,0,-L\LThickness%/2.0,0)
 *	End Select
 *	VertexCoords(L\LSurface%[K], V%, SX#+I*XS#+EntityX#(L\LPivot)+DX#, SY#+I*YS#+EntityY#(L\LPivot)+DY#, SZ#+I*ZS#+EntityZ#(L\LPivot)+DZ#)
 *Next
	Next
Next
End Function


Graphics3D 1024,768,32
SetBuffer BackBuffer()

SeedRnd MilliSecs()

Global Cam=CreateCamera()
PositionEntity Cam,0,50,-180
RotateEntity Cam,30,0,0
CameraClsColor Cam,5,20,30

SetFont (LoadFont ("Arial",20))

WorldLight=CreateLight()
RotateEntity WorldLight,20,40,0

For i=1 To 20
 For j=1 To 20
 *t=CreateCube()
	PositionEntity t,i*10-100,-30,j*10-100
	ScaleEntity t,3,1,3
 Next
Next

Global Piv=CreatePivot()

Global S1%=CreateSphere(8,Piv)
ScaleEntity S1,2,2,2
PositionEntity S1,-50,20,60
EntityColor S1,10,250,20

Global S2%=CreateSphere(8,Piv)
ScaleEntity S2,2,2,2
PositionEntity S2,80,50,-30
EntityColor S2,10,250,20

Color 35,0,255
CreateLightning(S1,S2,3,30,5,50)

Color 255,0,255
CreateLightning(S1,S2,3,30,5,50)

Repeat
For L.Lightning=Each Lightning
	UpdateLightning(L.Lightning)
Next
 gradx=gradx+MouseXSpeed()*0.1
 grady=grady+MouseYSpeed()*0.1
 RotateEntity Cam,grady,-gradx,0,False
 MoveEntity Cam,KeyDown(205)-KeyDown(203),0,KeyDown(200)-KeyDown(208)+MouseDown(1)-MouseDown(2)
 MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
 *	If KeyHit(17) Then W=Not w
 *	WireFrame W
 *	TurnEntity(Piv,0,0.5,0)
 UpdateWorld
 RenderWorld
 Flip
 
Until KeyHit(1)

End
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием