Code archives/3D Graphics - Effects/Geometric based per-entity glow

This code has been declared by its author to be Public Domain code.

Download source code

Geometric based per-entity glow by Rob 2002
This routine can be optimised quite a bit. It was designed this way for immediate ease-of-use.

It creates many copies of a mesh to achieve the desired effect. You can pre-copy to obtain a speedup, you can expand/contract the vertices for a more accurate scaling (neccesary - see rob.p's toon code and robins mesh code). You can also use it as the basis for more recipe ideas.
;GEOMETRIC GLOW TEST - Rob Cummings
;inspired by madjack!


;KEEPS TRACK OF ENTITIES
Type entlist
	Field ent
End Type


Graphics3D 1024,768,32,2
AmbientLight(10,10,20)
light=CreateLight()
PositionEntity light,-500,5000,2000
LightColor light,200,200,200
RotateEntity light,45,45,0
	
camera = CreateCamera()

ob1 = CreateCylinder()
PositionEntity ob1,0,1,7
EntityColor ob1,0,0,255
EntityFX ob1,1 
addent(ob1)
		
ob2 = CreateCone()
PositionEntity ob2,-4,1,7
EntityColor ob2,0,255,0
EntityFX ob2,1
addent(ob2)
	
ob3 = CreateSphere()
PositionEntity ob3,4,1,7
EntityColor ob3,255,255,255
addent(ob3)
	
column = CreateCylinder()
ScaleEntity column,2,100,2
PositionEntity column,50,0,100
EntityColor column,255,0,0
EntityFX column,1
addent(column)
	
	
While Not KeyHit(1)
	TurnEntity ob1,1,1,1
	TurnEntity ob2,1,1,1
	TurnEntity ob3,1,1,1
	TurnEntity column,1,1,1
	UpdateWorld
	RenderWorld 

	EntityGlow(camera,ob1,4,.2,50,50,255)
	EntityGlow(camera,ob2,3,.05,50,255,50)
	EntityGlow(camera,ob3,2,.05,255,255,0)

	
	Flip
Wend
End	
	
	
Function EntityGlow(eg_cam,eg_ent,eg_glowsteps=1,eg_glowsize#=.1,eg_r=-1,eg_g=-1,eg_b=-1)
	hideworld()
	eg_pivot=CreatePivot()
	For eg_i=eg_glowsteps To 1 Step -1
		eg_glowent=CopyMesh(eg_ent)
		ShowEntity eg_glowent
		PositionEntity eg_glowent,EntityX(eg_ent),EntityY(eg_ent),EntityZ(eg_ent)
		RotateEntity eg_glowent,EntityPitch(eg_ent),EntityYaw(eg_ent),EntityRoll(eg_ent)
		EntityFX eg_glowent,1
		EntityBlend eg_glowent,3 ;optional
		ScaleMesh eg_glowent,1+eg_glowsize*eg_i,1+eg_glowsize*eg_i,1+eg_glowsize*eg_i
		EntityAlpha eg_glowent,0.1
		EntityParent eg_glowent,eg_pivot
		If (eg_r+eg_g+eg_b)>0 EntityColor eg_glowent,eg_r,eg_g,eg_b
	Next
	CameraClsMode eg_cam,0,0:RenderWorld:CameraClsMode eg_cam,1,1
	For i=1 To CountChildren(eg_pivot):FreeEntity GetChild(eg_pivot,i):Next
	FreeEntity eg_pivot
	showworld()
End Function
	

;HOUSEKEEPING FUNCTIONS

Function AddEnt(ent)
	e.entlist=New entlist
	e\ent=ent
End Function
Function HideWorld()
	For e.entlist=Each entlist
		HideEntity e\ent
	Next
End Function
Function ShowWorld()
	For e.entlist=Each entlist
		ShowEntity e\ent
	Next
End Function
Function DeleteEnt(ent)
	For e.entlist=Each entlist
		If e\ent=ent
			Delete e
			Exit
		EndIf
	Next
End Function
Function ClearEntList()
		Delete Each entlist
End Function

Comments

None.

Code Archives Forum