Vertex cube lighting

Blitz3D Forums/Blitz3D Programming/Vertex cube lighting

Graphics3D 800,600,0,2


cam=CreateCamera()

light=CreateLight()

cube=SixSurfaceCube(2,2,2)
PositionEntity cam,0,2,-8
PointEntity cam,cube

While Not KeyHit(1)

	TurnEntity cube,.1,.6,.3
	
	UpdateWorld()
	RenderWorld()
	
	Flip
	
Wend

End



Function SixSurfaceCube(w#,h#,d#)
	Local m,s
	Local dw#,dh#,dd#
	
	dw=w/2.0
	dh=h/2.0
	dd=d/2.0		
	
	m=CreateMesh()
	
	; front
	s=CreateSurface(m)
	AddRect s,-dw,-dh,-dd,-dw,dh,-dd,dw,dh,-dd,dw,-dh,-dd
	; back
	s=CreateSurface(m)
	AddRect s,dw,-dh,dd,dw,dh,dd,-dw,dh,dd,-dw,-dh,dd
	
	;bottom
	s=CreateSurface(m)
	AddRect s,-dw,-dh,dd,-dw,-dh,-dd,dw,-dh,-dd,dw,-dh,dd
	; top
	s=CreateSurface(m)
	AddRect s,-dw,dh,-dd,-dw,dh,dd,dw,dh,dd,dw,dh,-dd
	
	;left side
	s=CreateSurface(m)
	AddRect s,-dw,-dh,dd,-dw,dh,dd,-dw,dh,-dd,-dw,-dh,-dd

	
	;right side
	s=CreateSurface(m)
	AddRect s,dw,-dh,-dd,dw,dh,-dd,dw,dh,dd,dw,-dh,dd

	Return m

End Function

Function AddRect(s,x1#,y1#,z1#,x2#,y2#,z2#,x3#,y3#,z3#,x4#,y4#,z4#)

	; make normal
	dx1#=x2-x1
	dy1#=y2-y1
	dz1#=z2-z1
	
	dx2#=x3-x1
	dy2#=y3-y1
	dz2#=z3-z1
	
	nx#=dy1*dz2-dz1*dy2
	ny#=dz1*dx2-dx1*dz2
	nz#=dx1*dy2-dy1*dx2		
	
	
	mag#=Sqr(nx*nx+ny*ny+nz*nz)
	
	nx#=nx/mag
	ny#=ny/mag
	nz#=nz/mag	
	
	
	v1=AddVertex(s,x1,y1,z1,0,0)
	v2=AddVertex(s,x2,y2,z2,0,1)
	v3=AddVertex(s,x3,y3,z3,1,1)
	v4=AddVertex(s,x4,y4,z4,1,0)
	
	VertexNormal s,v1,nx,ny,nz
	VertexNormal s,v2,nx,ny,nz
	VertexNormal s,v3,nx,ny,nz
	VertexNormal s,v4,nx,ny,nz		
	
	
	AddTriangle s,v1,v2,v3
	AddTriangle s,v1,v3,v4
	

End Function