/***********************************************************************
	BSP EDITER ̐
	^|S̗D揇ʂ@BSPłƂ
***********************************************************************/



***********************************************************************

***********************************************************************

MAXface		/* tFCX̐ő	128   ???	*/
MAXPoint	/* |Cg̍ő	128*3 ???	*/

	char	FaceData[MAXface][16];		/* tFCX(|S)f[^		*/
	char	ColorData[MAXface]			/* tFCXJ[f[^			*/

			nomaldata[MAXface]			/* tFCX̖@xNgf[^	*/
								nomal_x
								nomal_y
								nomal_z

			shapepoint[MAXpoint]		/* VFCv|Cgf[^		*/
								shape_x	
								shape_y
								shape_z

***********************************************************************
	ʂ̕		
***********************************************************************

	int	p1;								/* Key ʏ̓_ԍ		*/
	int	keyPX,keyPY.keyPZ;				/* key ʏ̂P_			*/
	int	keyVX,keyVY,keyVZ;				/* key ʂ̖@xNg	*/

	int	keyD;							/* ʂ̕ ax+by+cz+D=0 ((D̒l))	*/
	int keyS;							/* ߂邽߂̌vZl				*/

	int	p2;								/* check ʏ̓_ԍ		*/
	int	checkPX,checkPY.checkPZ;		/* check ʏ̂P_		*/

	int	counter;						/* tFCX̃JE^[	*/

	int	work0;							/* t	*/
	int	work1;
	int	distance;						/* check_keyʂ̐	*/
	int	distancepoint;					/* ł̂_ԍ			*/

	int	PMflag;



	BSPflag = 0;						/* BSP ͕sKv		*/

		for	(key=0;key<facecount;key++){

			if ( (FaceData[key][0]) < 3 ) continue;	/*  ʈȊO͖	*/

			PMflag = 0;					/* ׂĂ̕ʂ keyʏɂƉ	*/
			p1 = FaceData[key][1];
										/* key ʏ̂P_	*/
			keyPX = shapepoint[p1].pointX;
			keyPY = shapepoint[p1].pointY;
			keyPZ = shapepoint[p1].pointZ;
										/* key ʂ̖@xNg	*/
			keyVX = nomalvector[p1].vectorX;
			keyVY = nomalvector[p1].vectorY;
			keyVZ = nomalvector[p1].vectorZ;
										/* ʂ̕ ax+by+cz+D=0 ((D̒l))	*/
			keyD = -( keyVX*keyPX + keyVY*keyPY + keyVZ*keyPZ );
										/* ߂邽߂̌vZl	*/
			keyS  = sqrt (keyPX*keyPX + keyPY*keyPY + keyPZ*keyPZ);

			for	(i=0;i<facecount;i++){

				if ( (FaceData[i][0]) < 3 ) continue;	/*  ʈȊO͖	*/

					distance = 0;
					pmflag = 0;
					for (counter=0;counter<FaceData[i][0];counter++)
						p2 = FaceData[key][counter+1];
						work0 = ( checkPX*keyVX+checkPY*keyVY+checkPZ*keyVZ+keyD ) / keyS;
						work1 = work0;
						if (work0<0) work1 = 0-work0;
						if (work1 > distance){
							distance = work1;
							if (work0 > 0) pmflag = 1;
							if (work0 < 0) pmflag = -1;
						}
					}
																	
				if ( pmflag == 0 ) continue;
				if ( PMflag == 0 ){
					PMflag = pmflag;
				} else {
					if (PMflag != pmflag) BSPflag = 1;	/* aroKv	*/
				}

			}	

		}


		if ( BSPflag != 0 )	printf ( " BSP \Kvł \n" );






;************************************************************************
;*	aro`							*
;************************************************************************

;------------------------------------------------------------------------
EndShape	1		VFCvI
;------------------------------------------------------------------------
Faces		4		tFCXf[^Jn
;------------------------------------------------------------------------
BSPInit		7		̃f[^ BSPf[^łƏݒ肷
		addr(W)		tFCXf[^I
;------------------------------------------------------------------------
BSP		10
		vizNum(B)	vizNum 
		middle(W)	֔
		right(W)
;------------------------------------------------------------------------
BSPE		13			
		addr(W)
;------------------------------------------------------------------------
BSPEND		16		^[
;------------------------------------------------------------------------
Fend		0		tFCXDraw̏I
;------------------------------------------------------------------------
FendQ		0		tFCXDrawIă^[
		16
;------------------------------------------------------------------------
		endm


;************************************************************************
;	arovOTv	
;************************************************************************

;- - - - - - - - - - - - - - - - - - - 
Face Program
		Shape Loop
		INDEX_JUMP

;- - - - - - - - - - - - - - - - - - - 


;------------------------------------------------------------------------
BSPInit		
		X^bNɖ߂AhX PUSH
		LOOP֖߂
;------------------------------------------------------------------------
BSP		
		̃|S\ǂ`FbN
		
		(\̂Ƃ)
		vOAhX			PUSH
		݂̃f[^AhX(ROM POINTER)}	PUSH
		LOOP֖߂

		(̂Ƃ)
		LOOP  				PUSH
		(next)̃f[^AhX 		PUSH
		Es

;------------------------------------------------------------------------
BSPE		13
		addr(W)

;------------------------------------------------------------------------
BSPEND		16		^[
;------------------------------------------------------------------------
FendQ		0		tFCXDrawIă^[
		16
;------------------------------------------------------------------------





	ԉ	Ō̃AhX
;------------------------------------------------------------------------



