SGL Ver3.0ɂ
  SGL Ver3.0́ASGL Ver2.1xƔׂĈȉ̋@\ǉȂ܂B
   EA^CO[[VF[fBO
   EjANbsO
   EfvXL[CO
   EFt
  ȉ Ver3.0Œǉꂽf[^֐A܂폜ꂽ̂SGL Ver2.1x
ڍsɍۂĂ̒ӓ_Lq܂B

PDf[^
(1)A^CO[[pff[^(\)
    typedef struct {
        POINT   *pntbl;     /* _̈ʒuf[^e[u */
        Uint32  nbPoint;    /* _̐ */
        POLYGON *pltbl;     /* |S`e[u */
        Uint32  nbPolygon;  /* |S̐ */
        ATTR    *attbl;     /* |S̃Agr[ge[u */
        VECTOR  *vntbl;     /* _@f[^ */
    } XPDATA ;

(2)Agr[gIvV
  ATTRIBUTE\̂OPTIONŎw肷}N`ɂĐ܂B

  <폜ꂽ}N>
    UseClip
      UseClipUseNearClipɒu܂B
@    sl_def.hł́AUseClipUseNearClipƂĒ`Ă܂B

  <ǉꂽ>
    UseGouraud
      A^CO[[ŕ\܂B
      O[[e[up̃AhXw肵܂B
      UseDepth,UseLightIvVƓɎgpł܂B

    UseNearClip
      jANbv̏s܂B
      slSetNearClipFlag֐ 0(␳Ȃ)w肷ƁA̐ݒ͖
    Ȃ܂B

    UseDepth
      fvXL[sB
      UseGouraudIvVƓɎgpłȂB
      UseLightIvVwł̂́APF|Ŝ݂łB


QD֐

(1) A^CO[[VF[fBO֘A

void slInitGouraud( GOURAUDTBL *gtbl, Uint32 gmax, Uint32 gaddr, Uint8 *vaddr )
  @\ : A^CO[[VF[fBȌs܂B
         O[[f[^i[GÁAO[[|Ső吔x8oCgKvɂȂ
         B
@@     _Z[NAhX́A1fő咸_oCgKvłB
         O[[e[uAhX́AVDP1ɃO[[e[uZbgAhX
         ɂȂ܂B
         VDP1ItZbgAhX/8w肵܂Biff[^̃O[[AhX
         Ɠ@łj
    gtbl  : O[[f[^i[GA
    gmax  : O[[|Ső吔
    gaddr : O[[e[uAhX
    vaddr : _Z[NAhX
   : ̊֐sOɕKslInitGouraud֐ŏĂKv
         ܂B
   : |S500A1fő咸_100̏ꍇB
    #define    MAX_POLYGON     500
    #define    MAX_MODEL_VERT  100
    #define    GOURAUD_ADDR    0xE000
    GOURAUDTBL GTBL[MAX_POLYGON];
    Uint8      VTBL[MAX_MODEL_VERT];

    slInitGouraud( GTBL, MAX_POLYGON, GOURAUD_ADDR, VTBL );


void slPutPolygonX( XPDATA *xpdata, FIXED *light )
  @\ : ff[^̏o͂s܂B
         IvVUseGouraudw肵ĂȂ|Sɏo͂B
    xpdata : ff[^
    light  : xNg

void slGouraudTblCopy( void )
  @\ : O[[f[^VRAMɓ]܂B
         slSynch֐̒OAslIntFunction֐ɓo^ĂB

void slSetGouraudTbl( Uint16 *tbl )
  @\ : [UƎ̃O[[e[uZbg܂B
         ̔Α̈ԈÂlA̐ʂ̈Ԗ邢l܂ł32iK
         w肵܂B
   : 
    #define GRTBL(r,g,b)    (((b&0x1f)<<10) | ((g&0x1f)<<5) | (r&0x1f) )
    static  Uint16  GourTbl[32] = {
        GRTBL(  0, 16, 16 ),GRTBL(  1, 16, 16 ),GRTBL(  2, 16, 16 ),
        GRTBL(  3, 16, 16 ),GRTBL(  4, 16, 16 ),GRTBL(  5, 16, 16 ),
        GRTBL(  6, 16, 16 ),GRTBL(  7, 16, 16 ),GRTBL(  8, 16, 16 ),
        GRTBL(  9, 16, 16 ),GRTBL( 10, 16, 16 ),GRTBL( 11, 16, 16 ),
        GRTBL( 12, 16, 16 ),GRTBL( 13, 16, 16 ),GRTBL( 14, 16, 16 ),
        GRTBL( 15, 16, 16 ),GRTBL( 16, 16, 16 ),GRTBL( 17, 16, 16 ),
        GRTBL( 18, 16, 16 ),GRTBL( 19, 16, 16 ),GRTBL( 20, 16, 16 ),
        GRTBL( 21, 16, 16 ),GRTBL( 22, 16, 16 ),GRTBL( 23, 16, 16 ),
        GRTBL( 24, 16, 16 ),GRTBL( 25, 16, 16 ),GRTBL( 26, 16, 16 ),
        GRTBL( 27, 16, 16 ),GRTBL( 28, 16, 16 ),GRTBL( 29, 16, 16 ),
        GRTBL( 30, 16, 16 ),GRTBL( 31, 16, 16 ),
    };
    
    slSetGouraudTbl( GourTbl );



(2) F֘A
void slSetGouraudColor( Uint16 col )
  @\ : A^CO[[p̌Fݒ肵܂B
         slSetGouraudTbl֐̐ݒ͖܂B
    col : F
   :
    Uint16  gr_data;
    gr_data =((gr_b)<<10)+((gr_b>>2)<<5)+(gr_g>>2);
    slSetGouraudColor(gr_data);


void slSetFlatColor( Uint16 col )
  @\ : ʏ̌Fݒ肵܂B(UseLighť)
    col : F


void slSetAmbient( Uint16 col )
  @\ : ƂāAvZ̍Œ჉Cݒ肵܂B
         ̐ݒ́AslSetGouraudColor֐, slSetFlatColor֐ɉe܂B
         ̐ݒ̌AKF̐ݒsĂB
    col : F
          WłRGBꂼ 15`-16܂ŕω܂AႦ΂̊֐
            R = -10, G = -5, B = 0
          ̂悤ɐݒ肷΁AR 15`-10܂ŕωA{Ȃ-16܂łɂȂ͂
          e[uɂ-10ݒ肳܂B
     @@   ܂A32iḰA6iK͍Œlp܂B
          ̐ݒɂĎw肵lÂȂ肷̂hƂłA
          ƂĐݒ肷邱ƂɂȂ܂B
   :slSetGouraudTbl֐Œڐݒ肵e[uɑ΂ẮAɂȂ܂B
   :  
    slSetAmbient(C_RGB(1,1,1));


(3) jANbsO֘A
void slSetNearClipFlag( Uint32 flag )
  @\ : jANbvׂ̈̒_␳sǂݒ肵܂Bl͒_␳
         ɂȂĂ܂B
    flag : jANbsOtO
           0 : ␳Ȃ
           1 : ␳(l)
 
void slWindowClipLevel( Sint32 level )
  @\ : jANbvݒ肵Ă|ŚAS_ƂʊÔƂ\s
         B̂ƂAS_ƂʊOłʂ̊pɂ|S\邽
         ߁Aۂ̉ʂ菭傫߂ŁANbsÕ`FbN邽߂̐ݒ
         łBlevelŐݒ肵ʂ傫߂Ƀ`FbN܂B
         ݒ肷KvꍇAl20`50œKƎv܂B
    level : ʊO̐lw(l0)B
            0\ʓB̐ݒ\B


(4) fvXL[֘A֐
void slSetDepthLimit( Uint32 near, Uint16 depth, Uint16 step )
  @\ : fvXL[̂߂͈̔͂ݒ肵܂B
         nearʒuiFIXEDł͂Ȃjdepth܂ł͈̔͂AstepiKŐݒ肵܂B
         depthstep̒l͏搔ݒ肵ĂB
         Ⴆ΁A5ݒ肷Ύۂɂ32ƂĈ܂B
    near  : Oʒu
    depth : [iQ̏搔j
    step  : iKiQ̏搔j


void slSetDepthTbl( Uint16 *dtbl, Uint16 gaddr, Uint16 size )
  @\ : fvXL[̂߂̃e[uݒ肵܂B
         O[[e[u͒iKpӂAO牜Ɍăf[^Zbg
         ܂B
         O[[AhXgaddrVDP1ɃZbgAhXłB
         2step悪sizeƓɂȂ悤ɂĂB
         VRAM̃O[[GA̓O[[e[u4{̃GAKvłB
    dtbl  : fvXL[pO[[e[u
    gaddr : O[[e[uAhX
    size  : e[uTCY
 
   : 1001124܂ł32iKɕ
       O[[e[u 0xE000ɃZbgB

    Uint16    depthtbl[32] = {
        ...
    };
    slSetDepthLimit( 100, 10, 5 );
    slSetDepthTbl( depthtbl, 0xe000, 32 );

(5) ̑
void slDispPlaneLevel( Sint32 level )
  @\ : |S̕\̃xݒ肵܂B
         vXɐݒ肷ƁA藠܂ŕ`悵܂B
         }CiXɃZbgƁA萳ʂ̂̕ݕ`悵܂B
    level : |S\̃x(l0)

Uint32 slSlaveCheck( void )
  @\ : X[u̓󋵂`FbN܂B
  

RDA^CO[[gp菇
@A^CO[[ɂ͈ȉ̂S̏KvłB
(1)Agr[ge[uɈȉ3܂B
@(a) MODEɁuCL_GouraudvwB
@(b) GOURAUDɃO[e[ůi[ʒu̎wB
@(c) OPTIONɁuUseGouraudvwB

  <>
    ATTRIBUTE(Single_Plane, SORT_CEN, 0, 0xffa0, 0xe000,
           CL16Look|MESHoff|CL_Gouraud, sprNoflip, UseGouraud )
           
(2)@xNg̎w
@e_̖@xNgƁuXPDATAvƂ|Sff[^e[uw
  <>
	VECTOR	gr_point[]	={					/*	_@xNgf[^*/
		toFIXED(-0.873),toFIXED( 0.436),toFIXED( 0.217),
		toFIXED(-0.873),toFIXED(-0.436),toFIXED( 0.217),
				:
				:
	};
	XPDATA PD_BOX = {						/*fe[uw*/
		point_BOX,							/* _̈ʒuf[^e[u */
		sizeof(point_BOX)/sizeof(POINT),	/* _̐ */
		polygon_BOX,						/* |S`e[u */
		sizeof(polygon_BOX)/sizeof(POLYGON),/* |S̐ */
		attribute_BOX2,				/* |S̃Agr[ge[u */
		gr_point							/*	_@xNgf[^*/
	};
	
(3)A^CO[[vȌ
  (a) gpO[[e[üʒu傫w
    <>
      slInitGouraud((GOURAUDTBL *)gr_tab,(Uint32)300,0xe000,vaddr);
  (b) O[[vOVuNɓo^
    <>
      slIntFunction(slGouraudTblCopy);

(4)xNg̎w
    <>
        FIXED    light[XYZ];
        light[X] = toFIXED(1.0);
        light[Y] = toFIXED(0.0);
        light[Z] = toFIXED(0.0);
	slPutPolygonX(&PD_BOXx,(FIXED *)light);

(5)ۂ̃vOgp
   <>
	static	GOURAUDTBL	gr_tab[300];
	void	ss_main(void)
	{
		FIXED	light[XYZ];
			:
	/* A^CO[vȌ */
		slInitGouraud((GOURAUDTBL *)gr_tab,(Uint32)300,0xe000);
		slIntFunction(slGouraudTblCopy);
			:
		light[X]	=toFIXED(1.0);
		light[X]	=toFIXED(0.0);
		light[X]	=toFIXED(0.0);
		while(1)
		{
				:
			slPushMatrix();
			{
					:
				/**/
				slPutPolygonX(&PD_BOXx,(FIXED *)light);
			}
			slPopMatrix();
			slSynch();
		}
	}

SDjANbsO
  Agr[ge[uOPTIONɁuUseNearClipvw肷ƃjANbsO
܂BuUseClipvVer3.0瓯@\ǉɂuUseNearClipvɒu
܂B
  <>
    ATTRIBUTE(Single_Plane,SORT_CEN, 1,No_Palet,No_Gouraud,CL32KRGB|MESHoff,
    sprNoflip,UseNearClip),

TDSGL Ver2.1xSGL Ver3.00̑_
(1)tbgVF[fBǑvZ@̕ύX
  tbgVF[fBǑvZ@ȉ̂悤ɕύXɂȂĂ܂B
    <Ver2.1x܂ł̌vZ@>
      Ɩʂ̊px
              0------45------90-----135-----180
              31-----16-------0-------0-------0
      O[[e[u

@@@@@@@@

@  <Ver3.0 ̌vZ@>
      Ɩʂ̊px
              0------45------90-----135-----180
              31-----24------16-------8-------0
      O[[e[u

(2)̉eɂ锭Ff[^e[ũTCYύX
 @ɋ@\ǉƂɂAFf[^e[u(CLOfsfBuf)̈mۂ
TCYA32*32(0x400)32*32*3(0xC00)ɕύXɂȂ܂B
āAlݒ肳ĂSGL/LIBfBNgSGLAREA.O̕ύXƁA[UJ
X^psgl/sample/workareafBNgɂworkarea.cȂǂ̃t@CvZ
ɕύXĂ܂BSGL Ver2.1ẍڍsɂ͕KύX悤ɂ
ĂB
 
(3)UseClipIvV̍폜
  Agr[gIvVUseClipASGL Ver3.0̋@\ǉɂUseNearClipɒu
܂B


ȁ@
