Path: chuka.playstation.co.uk!news1.scei.co.jp!usenet From: "koichi nishino" Newsgroups: playstation.ny.program.questions Subject: =?ISO-2022-JP?B?UmU6IFtRXSAbJEJKIz90JE4bKEogVE1EIBskQiVHITwlPyROST08KCRLJEQkJCRGGyhK?= Date: 2 Jul 1997 03:42:04 GMT Organization: PlayStation Net Yarouze Lines: 148 Message-ID: <01bc869a$38b1e740$23ded5ca@pc-nishino.signallight.co.jp> References: <33B13045.63D57401@inetc.roland.co.jp> <01bc82d9$9b53b640$23ded5ca@pc-nishino.signallight.co.jp> <33B915AC.1E52E5C1@inetc.roland.co.jp> NNTP-Posting-Host: 202.213.222.35 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 8bit X-Newsreader: Microsoft Internet News 4.70.1161 ども、にっしーですぅ。 とりあえず、任意のモデルの表示 ON/OFF ができる ようになりそうな(^_^;)のを作ってみました。 とりあえず、今回も部分ソースなので、以前と同じように ご自分で追加・修正してご利用ください。 もし不都合がなければ、ソース送っていただけると、 もっと完全な対応ができるかも(^_^;)しれません。 /* モデル表示 ON/OFF 対応版 */ #define MAX_MODEL (5) #define MAX_INMODEL_OBJECT (100) #define MAX_OBJECT (1000) u_long *MODEL_ADDR[MAX_MODEL]; /* モデル管理データ構造体 */ typedef struct { unsigned char disp_sw; /* 表示スイッチ */ unsigned char obj_cnt; /* オブジェクト数 */ GsDOBJ2 obj[MAX_INMODEL_OBJECT]; } DspMODEL; /* モデル管理データ */ DspMODEL aDspModel[MAX_MODEL]; /* 関数のプロトタイプ宣言 */ int model_init2(DspMODEL *pDspMdl, u_long *model_adr); int model_disp2(DspMODEL *pDspMdl); /* かなり省略しているので注意 */ void main(void) { int model_cnt; /* モデル数 */ int obj_cnt; /* 表示したオブジェクト総数 */ DspMODEL *pDspMdl; /* DspMODEL構造体へのポインタ */ int i; /* モデルデータのアドレスを指定 */ MODEL_ADDR[0] = (u_long*)0x800c0000; MODEL_ADDR[1] = (u_long*)0x800c3000; /* モデル数を指定 */ model_cnt = 2; /* 初期化 */ pDspMdl = &aDspModel[0]; for (i=0;i pDspMdl = &aDspModel[1]; */ /* > pDspMdl->disp_sw = 0; */ /* と指定してください */ /* pDspMdl->disp_sw = X */ /* X = ( 0 : 非表示 , 1 : 表示 ) となっています */ /* 表示 */ obj_cnt = 0; pDspMdl = &aDspModel[0]; for (i=0;idisp_sw) /* 表示スイッチチェック */ { obj_cnt += model_disp2(pDspMdl); } pDspMdl++; } } } //model の初期化関数 int model_init2(DspMODEL *pDspMdl, u_long *model_adr) { u_long *dop; GsDOBJ2 *cobjp; int i; dop = model_adr; dop++; GsMapModelingData(dop); dop++; /* オブジェクト数をモデル管理データに保存 */ pDspMdl->obj_cnt = *dop; dop++; for (i = 0, cobjp = pDspMdl->obj; i < pDspMdl->obj_cnt; i++) { GsLinkObject4((u_long)dop, cobjp, i); cobjp++; } for (i = 0, cobjp = pDspMdl->obj; i < pDspMdl->obj_cnt; i++) { cobjp->coord2 = &Dobject0; cobjp->attribute = GsDOFF; cobjp++; } /* 表示スイッチをとりあえず ON にする */ pDspMdl->disp_sw = 1; /* ↓これってなにやってるの? */ pDspMdl->obj->coord2 = &Dobject0; pDspMdl->obj->attribute &= ‾GsDOFF; (中略) return (0); } //model の表示関数 int model_disp2(DspMODEL *pDspMdl) { GsDOBJ2 *op; int i; for (i=0, op = pDspMdl->obj; i < pDspMdl->obj_cnt; i++) { GsGetLs(op->coord2,&tmpls); GsSetLightMatrix(&tmpls); GsSetLsMatrix(&tmpls); GsSortObject4(op, &worldot[actbuf], 14-OT_LENGTH, (u_long *)getScratchAddr(0)); op++; } return i; } ----------------------------------------- 西野功一(にっしー) koichi@fa2.so-net.or.jp koichi@marry.co.jp -----------------------------------------