
 ZCuyсAVXeCuɂ

CuŎgp鐔l͈ȉ̎gpɊÂĂ܂B

|WVAOp֐̌Œ菬_f[^ :
    ʂPUrbgAʂPUrbg̃g[^RQrbg(t)
    ^  FIXED

)
    16.5  \ꍇ	:   0x0010_8000
			      ---- ----
				|    |__ 
				|__ 
    W Ew(vX͉E)A㉺x(vX͉)As
    y(vX͉)ɂȂ܂B


px :
    RUOxPUrbgŕ\
    ^  ANGLE

)
    90.0K :  0x4000
    45.0K :  0x2000
    22.5K :  0x1000
    11.25K:  0x0800

    ]s쐬ꍇApx̃vX͎ɑ΂ĉE]ɂȂ܂B

s :
    l FIXED gpBRS̍sŁA̔zu͈ȉ̒ʂB
    M00 , M01 , M02 ,
    M10 , M11 , M12 ,
    M20 , M21 , M22 ,
    M30 , M31 , M32


 eCu֐ɂ

void slInitMatrix(void)
  @\ : }gNXZŎgpϐAobt@̏

Bool slPushMatrix(void)
  @\ : }gNXX^bÑ|C^i߁AJg}gNXɃRs
	[B
	}gNX͂QO܂ŃlXgł邪AI[o[ƃG[ԂB

Bool slPushUnitMatrix(void)
  @\ : }gNXX^bÑ|C^i߁AɒPʍsZbgB
	lXgꍇAG[ԂB

Bool slIncMatrixPtr(void)
  @\ : }gNXX^bÑ|C^i߂B
	}gNX͂QO܂ŃlXgł邪AI[o[ƃG[ԂB

Bool slPopMatrix(void)
Bool slDecMatrixPtr(void)
  @\ : }gNXX^bÑ|C^ЂƂ߂B
	߂ꍇAG[ԂB

void slUnitMatrix(MATRIX *mtptr)
  @\ : w肳ꂽ}gNXPʍsɂB}gNX CURRENT w
	ꍇA}gNXX^bÑJg}gNXΏۂɂB

void slUnitAngle(MATRIX *mtptr)
  @\ : }gNX̉](RxR)PʍsɂB
	sړ͕ύXȂB
	}gNX CURRENT w肵ꍇJg}gNXύXB

void slUnitTranslate(MATRIX *mtptr)
  @\ : }gNX̕sړOɂB
	]͕ύXȂB
	}gNX CURRENT w肵ꍇJg}gNXύXB

void slLoadMatrix(MATRIX *mtptr)
  @\ : Jg}gNXɎw肳ꂽ}gNXRs[B

Bool slCopyMatrix(void)
  @\ : Jg}gNXɂЂƂÕ}gNXRs[B
	}gNXlXgĂȂꍇɂ̓G[ԂB

void slRegistMatrix(MATRIX *mtptr)
  @\ : }gNXobt@Ɏw肳ꂽ}gNXRs[B
	}gNX CURRENT w肵ꍇA}gNXX^bÑJg
	}gNXΏۂɂB

void slGetMatrix(MATRIX *mtptr)
  @\ : Jg}gNXw肳ꂽ}gNXɃRs[B

void slGetTranslate(FIXED *pbuf)
  @\ : }gNX畽sړoAw肳ꂽobt@ɃRs[B

void slLoadTranslate(FIXED M30 , FIXED M31 , FIXED M32)
  @\  : Jg}gNX̕sړ݂̂XV܂B

void slInversMatrix()
  @\ : Jg}gNXtsɂB

void slTransposeMatrix()
  @\ : Jg}gNX]usɂB

void slRotX(ANGLE angx)
  @\ : Jg}gNXɑ΂Aw̉]s|B
    ]}gNX
	 P.O      O.O      O.O      O.O
	 O.O            O.O
	 O.O    -       O.O
	 O.O      O.O      O.O      P.O

void slRotXSC(FIXED sn , FIXED cs)
  @\ : TCƁARTCw肵āAw̉]B
	 P.O      O.O      O.O      O.O
	 O.O                    O.O
	 O.O     -              O.O
	 O.O      O.O      O.O      P.O

void slRotY(ANGLE angy)
  @\ : Jg}gNXɑ΂Ax̉]s|B
	    O.O    -    O.O
	 O.O      P.O      O.O      O.O
	    O.O         O.O
	 O.O      O.O      O.O      P.O

void slRotYSC(FIXED sn , FIXED cs)
  @\ : TCƁARTCw肵āAx̉]B
	        O.O     -       O.O
	 O.O      P.O      O.O      O.O
	        O.O             O.O
	 O.O      O.O      O.O      P.O      

void slRotZ(ANGLE angz)
  @\ : Jg}gNXɑ΂Aỷ]s|B
	       O.O      O.O
       -       O.O      O.O
	 O.O      O.O      P.O      O.O
	 O.O      O.O      O.O      P.O

void slRotZSC(FIXED sn , FIXED cs)
  @\ : TCƁARTCw肵āAỷ]B
	               O.O      O.O
        -              O.O      O.O
	 O.O      O.O      P.O      O.O
	 O.O      O.O      O.O      P.O

void slRotAX(FIXED vctX , FIXED vctY , FIXED vctZ , ANGLE A)
  @\ : _ʂCӎ̉]B͒PʃxNgŎw肷B
    mm(P-b)+b     mm(P-b)+mr mm(P-b)-mr  O.O
    mm(P-b)-mr mm(P-b)+b     mm(P-b)+mr  O.O
    mm(P-b)+mr mm(P-b)-mr mm(P-b)+b      O.O
    O.O                  O.O                  O.O                   P.O

    mAmAm \PʃxNg̐B
    b ̓RTC Ar ̓TC \B

void slTranslate(FIXED tx , FIXED ty , FIXED tz)
  @\ : Jg}gNXɑ΂AsړsB
	 O.O      O.O      O.O      O.O
	 O.O      O.O      O.O      O.O
	 O.O      O.O      O.O      O.O
	                      P.O

void slRegistTranslate(FIXED tx , FIXED ty , FIXED tz)
  @\ : }gNXobt@ɑ΂āAsړ̂AJg}gNX
	ɃRs[B
	A}gNXobt@͕ύXȂB

void slScale(FIXED sx , FIXED sy , FIXED sz)
  @\ : Jg}gNXɑ΂ăXP[OB
	        O.O      O.O      O.O
	 O.O             O.O      O.O
	 O.O      O.O             O.O
	 O.O      O.O      O.O      P.O

void slMultiMatrix(MATRIX mtrx)
  @\ : Jg}gNXɎw肳ꂽ}gNX|B

void slLookAt(FIXED camera[XYZ] , FIXED target[XYZ] , ANGLE angz)
  @\ : JʒuڕW}gNXJg}gNXɊ|B
	̍ہAyɉ]B
   : xɉ悤ȕł́Awyʏł̃xNgȂA
	vZłȂꍇ邩B

FIXED slSin(ANGLE angs)
  @\ : w肳ꂽpxɑ΂ATCԂB
	lƂĂ 0xffff0000 ` 0x00010000 ̒lB
   : pxf[^ ʂ̂SrbĝāA0x0000 ` 0xfff0  ϊ
	߁Ax͂◎(ȉpxgp͓̂l̐󂯂)B

FIXED slCos(ANGLE angc)
  @\ : w肳ꂽpxɑ΂ARTCԂB
	lƂĂ 0xffff0000 ` 0x00010000 ̒lB

FIXED slTan(ANGLE angt)
  @\ : w肳ꂽpxɑ΂A^WFgԂB
   : XOxt߂ł̓^WFg̒l傫߂āAx͂ȂB

ANGLE slAtan(FIXED tx , FIXED ty)
  @\ : w肳ꂽ̊pxԂB

Uint16 slSquart(Uint32 sqrt)
  @\ : ̕ZoB

FIXED slSquartFX(FIXED sqrtfx)
  @\ : Œ菬_̕ZoB
   : ƂĉZĂ邽߁Aʂ̐x͂WrbgAWrbg
	ƂȂB

FIXED slMulFX(FIXED a,FIXED b)
  @\ : Œ菬m̊|ZAʂԂB

FIXED slDivFX(FIXED a,FIXED b)
  @\ : Œ菬m̊ZA(b/a)ԂB

FIXED slInnerProduct(VECTOR vct1,VECTOR vct2)
  @\ : ̃xNg̓ςAʂԂB

void slNormalVector(VECTOR a , b , c , ans)
  @\ : w肳ꂽR_ȂQ{̃xNg(b->a , b->c)ɒxNg
	(Pʖ@xNg)Zo܂B
	@̌tɂꍇɂ͎w肷_ b , a , c ̏ɂĉB

FIXED slRandom()
  @\ : OP.O̊Ԃ̗𔭐B

void slBezier(VECTOR p0 , VECTOR p1 , VECTOR p2 , VECTOR p3 ,
		FIXED timming , VECTOR ans)
  @\ : w肳ꂽS_ԂԂaȐ timming ł̈ʒuԂB
	timming  OP.O͈̔͂Ŏw肷B

FIXED slBallCollision(FIXED object1[XYZ] , FIXED size1
			, FIXED object2[XYZ] , FIXED size2)
  @\ : ʒu object[XYZ] Aa size1 ̋ object2[XYZ],size2 ̋Ƃ
	蔻sAĂ΂̋ԂB
	ĂȂꍇɂ }CiX̒lԂB

FIXED slCheckOnScreen(FIXED object[XYZ] , FIXED size)
  @\ : w肳ꂽIuWFNg̃|WVJg}gNXʂĕϊA
	̈ʒuŎw肳ꂽTCŶ̕ʂɕ\邩eXgAʂ
	܂B
	XN[Ȍꍇɂ |P(FFFFFFFF)A㉺EɏoĂꍇɂ
	|Q(FFFFFFFE)Aʓ̏ꍇɂ͂y|WVԂ܂B

FIXED slCheckOnScreen0(FIXED size)
  @\ : |WV(O,O,O)ɂIuWFNgw肳ꂽTCYŉʂɕ\
	邩eXgAʂԂ܂B
	XN[Ȍꍇɂ |P(FFFFFFFF)A㉺EɏoĂꍇɂ
	|Q(FFFFFFFE)Aʓ̏ꍇɂ͂y|WVԂ܂B

void slCalcPoint(FIXED cx , FIXED cy , FIXED cz , FIXED ans[XYZ])
  @\ : w肳ꂽ|CgJg}gNXōWϊʂobt@ɕԂ
	 ܂B

void slSlaveFunc(void (*func)() , void *par)
  @\ : X[ubotɎw肳ꂽ֐sB
	 |S\̃t@NVX[uւ̃R}hobt@ɎcĂ
	 ꍇA炪IȂƂ̃t@NV͎sȂ߁AsJn
	 x邱Ƃ܂B

void slSetTrayCheck(Bool switch)
  폜܂B

FIXED  slConvert3Dto2D( FIXED pos[XYZ], Sint32 ans[XY])
  @\ : Jg}gNXgpāA3D΍Wposۉʏɕ\ۂ
	ʍWlansԂ܂B֐lƂāAZlԂ܂B
