Code archives/3D Graphics - Effects/3d lightning
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Please add me (EdzUp) and Zenith' to the credits ;) This effect is useful for wizard spells etc :) | |||||
; ; Lightning.bb - Copyright ©2002 EdzUp ; Coded by Ed Upton ; ;Uses Zenith's CreateQuad function (modified by EdzUp ;) ) Graphics3D 640,480,16,2 SetBuffer BackBuffer() Global camera = CreateCamera() AmbientLight 255,255,255 Global emitter = CreateSphere() EntityColor Emitter, 255, 0, 0 MoveEntity Emitter, -3,0,0 Global target = CreateSphere() EntityColor target, 0, 255, 0 MoveEntity target, 3,0,0 MoveEntity camera, 0, 0, -5 ScaleEntity emitter,.1,.1,.1 ScaleEntity Target,.1,.1,.1 Global Range# = 0 Global Division# = 0 Global DummyEntity = CreatePivot() Type LightningType Field Entity End Type Global ang#=0 While Not KeyDown(1) ang# = ang# + 1 PositionEntity camera, 0, 0, 0 RotateEntity camera, 0, ang#, 0 MoveEntity camera, 0,0,-5 ResetLightning() CreateLightning( emitter, target, 10, .5 ) UpdateWorld RenderWorld Flip Wend End Function ResetLightning() For Lightning.LightningType = Each LightningType If Lightning<>Null If Lightning\Entity<>0 Then FreeEntity Lightning\Entity Delete Lightning EndIf Next End Function Function CreateLightning( FromEntity, ToEntity, Parts, Deviation# ) Local DeviationEntity = CreatePivot() Local TargetEntity = CreatePivot() Local TE=CreatePivot() Local PartCount = 0 PositionEntity DummyEntity, EntityX#( FromEntity ), EntityY#( FromEntity ), EntityZ#( FromEntity ) PointEntity DummyEntity, ToEntity Range# = EntityDistance#( FromEntity, ToEntity ) Division# = Range# / Parts PositionEntity DeviationEntity, EntityX#( FromEntity ), EntityY#( FromEntity ), EntityZ#( FromEntity ) For PartCount = 0 To Parts-1 PositionEntity TargetEntity, EntityX#( DummyEntity ), EntityY#( DummyEntity ), EntityZ#( DummyEntity ) MoveEntity TargetEntity, 0, Rnd( Deviation# )-Rnd( Deviation# ), Rnd( Deviation# )-Rnd(Deviation#) Lightning.LightningType = New LightningType Lightning\Entity = CreateSight() PointEntity DeviationEntity, TargetEntity PositionEntity Lightning\Entity, EntityX#( Deviationentity ), EntityY#( Deviationentity ), EntityZ#( Deviationentity ) RotateEntity Lightning\Entity, EntityPitch#( DeviationEntity ), EntityYaw#( DeviationEntity ), EntityRoll#( DeviationEntity ) ScaleEntity Lightning\Entity, EntityDistance#( DeviationEntity, TargetEntity ), .02, 1 TurnEntity Lightning\Entity, 0, 90, 0 ;move the deviationentity to the target PositionEntity DeviationEntity, EntityX#( TargetEntity, 1 ), EntityY#( TargetEntity, 1 ), EntityZ#( TargetEntity, 1 ) MoveEntity DummyEntity, 0, 0, Division# Next PositionEntity TargetEntity, EntityX#( ToEntity ), EntityY#( ToEntity ), EntityZ#( ToEntity ) Lightning.LightningType = New LightningType Lightning\Entity = CreateSight() PointEntity DeviationEntity, TargetEntity PositionEntity Lightning\Entity, EntityX#( Deviationentity ), EntityY#( Deviationentity ), EntityZ#( Deviationentity ) RotateEntity Lightning\Entity, EntityPitch#( DeviationEntity ), EntityYaw#( DeviationEntity ), EntityRoll#( DeviationEntity ) ScaleEntity Lightning\Entity, EntityDistance#( DeviationEntity, TargetEntity ), .02, 1 TurnEntity Lightning\Entity, 0, 90, 0 FreeEntity DeviationEntity FreeEntity TargetEntity End Function Function CreateSight() ;by Zenith sprite=CreateMesh() he=CreateBrush(255,255,255) v=CreateSurface(sprite,he) FreeBrush he AddVertex ( v,0,1,0,1,0) ; top left 0,1;1,0 AddVertex ( v,1,1,0,0,0) ; top right 1,1;1,1 AddVertex ( v,0,-1,0,1,1) ; bottom left 0,0;,0,0 AddVertex ( v,1,-1,0,0,1) ; bottom right 1,0;0,1 AddTriangle( v,0,1,2) AddTriangle( v,3,2,1) TurnEntity sprite,0,0,0 EntityFX sprite,17 Return sprite End Function |
Comments
| ||
Works really good for me good job, One small problem I noticed was you are missing 'FreeEntity TE' |
| ||
EdzUp:Yes, looks very good. Credit will be given. Nice job. G.O.D.: Good point about the FreeEntity TE. No point in allowing a memory leak when it can be fixed. |
Code Archives Forum