The 'Stencil shadow' thread

Blitz3D Forums/Blitz3D Programming/The 'Stencil shadow' thread

The Forum Archive is locked. These are the original blitzbasic.com forums, kept so their posts can still be read and searched. No new topics, replies or edits can be made here. To join the conversation, head over to the Blitz3D+ forums.

Hi Devils Child

Hi All


This is a light optimization , in the "sample 5 " is increment 10-15%

Function CreateVolume(light, parallel = False)
	;===>
	RangeLight# = 10 ; is a range light, all object over range is jump
	;===>
	light_x# = EntityX(light, True) * (1 + parallel * 1000000)
	light_y# = EntityY(light, True) * (1 + parallel * 1000000)
	light_z# = EntityZ(light, True) * (1 + parallel * 1000000)
	volume_lenght = RangeLight
	;===>
	For etem.ETE_Mesh = Each ETE_Mesh
		;===>
		cnt_tris = etem\cnt_tris
		For v = 0 To cnt_tris
			;===>
			etet.ETE_Triangle = TriangleClone(v)
			CloneTriangle(etet, etem\tri[v])
			;===>
			v1.Point3D = etet\v1
			;===>
			TFormPoint v1\x#, v1\y#, v1\z#, etem\ent, 0
			v1\x# = TFormedX()
			v1\y# = TFormedY()
			v1\z# = TFormedZ()
			;===>
			TFormNormal etet\nx#, etet\ny#, etet\nz#, etem\ent, 0
			normlight_x# = (v1\x# - light_x#) * TFormedX()
			normlight_y# = (v1\y# - light_y#) * TFormedY()
			normlight_z# = (v1\z# - light_z#) * TFormedZ()
			;===>
			If (normlight_x# +  normlight_y# + normlight_z#) < 0 Then
				;===>
				etet\tri = -1
			Else
				;===>
				v2.Point3D = etet\v2
				TFormPoint v2\x#, v2\y#, v2\z#, etem\ent, 0
				v2\x# = TFormedX()
				v2\y# = TFormedY()
				v2\z# = TFormedZ()
				;===>
				v3.Point3D = etet\v3
				TFormPoint v3\x#, v3\y#, v3\z#, etem\ent, 0
				v3\x# = TFormedX()
				v3\y# = TFormedY()
				v3\z# = TFormedZ()
				;===>
			EndIf
			;===>
		Next
		;===>

		For v = 0 To cnt_tris
			etet = TriangleClone(v)
			If etet\tri => 0 Then
				ta = etet\ta
				tb = etet\tb
				tc = etet\tc
				If ta > -1 Then check1 = TriangleClone(ta)\tri Else check1 = -1
				If tb > -1 Then check2 = TriangleClone(tb)\tri Else check2 = -1
				If tc > -1 Then check3 = TriangleClone(tc)\tri Else check3 = -1
				If check1 < 0 Or check2 < 0 Or check3 < 0 Then
					v1 = etet\v1
					v2 = etet\v2
					v3 = etet\v3
					If check1 < 0 Then
						rax# = v1\x# + (v1\x# - light_x#) * volume_lenght
						ray# = v1\y# + (v1\y# - light_y#) * volume_lenght
						raz# = v1\z# + (v1\z# - light_z#) * volume_lenght
						rbx# = v2\x# + (v2\x# - light_x#) * volume_lenght
						rby# = v2\y# + (v2\y# - light_y#) * volume_lenght
						rbz# = v2\z# + (v2\z# - light_z#) * volume_lenght
						vert1 = AddVertex(VolumeSurf, v1\x#, v1\y#, v1\z#)
						vert2 = AddVertex(VolumeSurf, rax#, ray#, raz#)
						vert3 = AddVertex(VolumeSurf, rbx#, rby#, rbz#)
						vert4 = AddVertex(VolumeSurf, v2\x#, v2\y#, v2\z#)
						AddTriangle(VolumeSurf, vert1, vert2, vert3)
						AddTriangle(VolumeSurf, vert1, vert3, vert4)
					EndIf
					If check2 < 0 Then
						rbx# = v2\x# + (v2\x# - light_x#) * volume_lenght
						rby# = v2\y# + (v2\y# - light_y#) * volume_lenght
						rbz# = v2\z# + (v2\z# - light_z#) * volume_lenght
						rcx# = v3\x# + (v3\x# - light_x#) * volume_lenght
						rcy# = v3\y# + (v3\y# - light_y#) * volume_lenght
						rcz# = v3\z# + (v3\z# - light_z#) * volume_lenght
						vert1 = AddVertex(VolumeSurf, v2\x#, v2\y#, v2\z#)
						vert2 = AddVertex(VolumeSurf, rbx#, rby#, rbz#)
						vert3 = AddVertex(VolumeSurf, rcx#, rcy#, rcz#)
						vert4 = AddVertex(VolumeSurf, v3\x#, v3\y#, v3\z#)
						AddTriangle(VolumeSurf, vert1, vert2, vert3)
						AddTriangle(VolumeSurf, vert1, vert3, vert4)
					EndIf
					If check3 < 0 Then
						rax# = v1\x# + (v1\x# - light_x#) * volume_lenght
						ray# = v1\y# + (v1\y# - light_y#) * volume_lenght
						raz# = v1\z# + (v1\z# - light_z#) * volume_lenght
						rcx# = v3\x# + (v3\x# - light_x#) * volume_lenght
						rcy# = v3\y# + (v3\y# - light_y#) * volume_lenght
						rcz# = v3\z# + (v3\z# - light_z#) * volume_lenght
						vert1 = AddVertex(VolumeSurf, v1\x#, v1\y#, v1\z#)
						vert2 = AddVertex(VolumeSurf, rax#, ray#, raz#)
						vert3 = AddVertex(VolumeSurf, rcx#, rcy#, rcz#)
						vert4 = AddVertex(VolumeSurf, v3\x#, v3\y#, v3\z#)
						AddTriangle(VolumeSurf, vert1, vert3, vert2)
						AddTriangle(VolumeSurf, vert1, vert4, vert3)
					EndIf
				EndIf
			EndIf
		Next
	Next
End Function



the system is improve create a check for control object in range light, if object in range calculate, if not jump

;)

Bye