#include /* Libreria base della Playstation */ # include "tipi.h"/* Includo i tipi miei */ #include /* Libreria standard I/O della Playstation */ #include "sin.h"/* Libreria trigoniometrica tabelle Seno,Coseno e Tangente */ #include "esterne.h"/* Richiamo alle funzioni esterne usate in esterne.c */ #include "radice.h"/* Dichiarazione vettore radici quadrate */ # include "Controllera.h"/* includo le definizioni delle variabili del Joystick */ # include "indirizzi_TIM_TMD.h"/* Includo i defines degli indirizzi di ogetti e textures */ # include "vettori_gest.h"/* Include i vettori di gestione degli indirizzi ogetti coordinate e rotazioni */ # include "Globaluse.h"/* Dichiarazioni variabili globali di uso comune */ # define MAX_NO_PACKETS (24*5000)/* Numero di packets dato dal prodotto di 24*MAX_NUM_PRIMITIVE cio il massimo numero di primitive nel mondo */ # define ORDERING_TABLE_LENGTH (14)/* Esponente per la lunghezza della OT 2^esp*/ main() { /**********************************************/ /* Inizio del programma di prova di gestione */ /* */ /* Ogetti gerarchici */ /* */ /* */ /* @Copyright 1997-1998 Gmorksoft ltd. */ /**********************************************/ /*---------------------------------------------*/ /* Inizializzazione sistema di lavoro*/ /* Variabili di uso */ unsigned long t=0; int sel=0; KINE busto;// gestore cinematico del busto /* Variabili di uso */ /* Variabili per 3d creation */ GsOT_TAG zsort1[2][1<F=0; //Rotazioni // X lcin[1]->ro.x.f=0; lcin[1]->ro.x.v=0; lcin[1]->ro.x.v0=0; lcin[1]->ro.x.a0=0; // Y lcin[1]->ro.y.f=0; lcin[1]->ro.y.v=0; lcin[1]->ro.y.v0=0; lcin[1]->ro.y.a0=0; // Z lcin[1]->ro.z.f=0; lcin[1]->ro.z.v=0; lcin[1]->ro.z.v0=0; lcin[1]->ro.z.a0=0; //Traslazioni // X lcin[1]->tr.x.f=0; lcin[1]->tr.x.v=0; lcin[1]->tr.x.v0=0; lcin[1]->tr.x.a0=0; // Y lcin[1]->tr.y.f=0; lcin[1]->tr.y.v=0; lcin[1]->tr.y.v0=0; lcin[1]->tr.y.a0=0; // Z lcin[1]->tr.z.f=0; lcin[1]->tr.z.v=0; lcin[1]->tr.z.v0=0; lcin[1]->tr.z.a0=0; /* Inizzializzazione cinematica ogetto 1 */ /* Ogetto 1*/ /* ogetto 2 */ GsInitCoordinate2(&(coordinate[1]),&(coordinate[2]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[2]),2);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[2].coord2=&(coordinate[2]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[2].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[2].coord.t[0]=0;/* Posizione x ogetto */ coordinate[2].coord.t[1]=45;/* Posizione y ogetto */ coordinate[2].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 2 */ vetbox[2].pos.vx=155; vetbox[2].pos.vy=50; vetbox[2].pos.vz=120; vetbox[2].neg.vx=-155; vetbox[2].neg.vy=-50; vetbox[2].neg.vz=-120; /* Inizializzazione box ogetto 2 */ /* Ogetto 2*/ /* ogetto 3 */ GsInitCoordinate2(&(coordinate[2]),&(coordinate[3]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[3]),3);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[3].coord2=&(coordinate[3]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[3].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[3].coord.t[0]=0;/* Posizione x ogetto */ coordinate[3].coord.t[1]=115;/* Posizione y ogetto */ coordinate[3].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 3 */ vetbox[3].pos.vx=150; vetbox[3].pos.vy=115; vetbox[3].pos.vz=175; vetbox[3].neg.vx=-150; vetbox[3].neg.vy=-115; vetbox[3].neg.vz=-175; /* Inizializzazione box ogetto 3 */ /* Ogetto 3*/ /* ogetto 4 */ GsInitCoordinate2(&(coordinate[1]),&(coordinate[4]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[4]),4);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[4].coord2=&(coordinate[4]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[4].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[4].coord.t[0]=-218;/* Posizione x ogetto */ coordinate[4].coord.t[1]=-248;/* Posizione y ogetto */ coordinate[4].coord.t[2]=-20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 4 */ vetbox[4].pos.vx=1; vetbox[4].pos.vy=75; vetbox[4].pos.vz=135; vetbox[4].neg.vx=-380; vetbox[4].neg.vy=-375; vetbox[4].neg.vz=-135; /* Inizializzazione box ogetto 4 */ /* Ogetto 4*/ /* ogetto 5 */ GsInitCoordinate2(&(coordinate[1]),&(coordinate[5]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[5]),5);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[5].coord2=&(coordinate[5]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[5].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[5].coord.t[0]=218;/* Posizione x ogetto */ coordinate[5].coord.t[1]=-248;/* Posizione y ogetto */ coordinate[5].coord.t[2]=-20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 5 */ vetbox[5].pos.vx=380; vetbox[5].pos.vy=75; vetbox[5].pos.vz=135; vetbox[5].neg.vx=-10; vetbox[5].neg.vy=-325; vetbox[5].neg.vz=-135; /* Inizializzazione box ogetto 5 */ /* Ogetto 5*/ /* ogetto 6 */ GsInitCoordinate2(&(coordinate[4]),&(coordinate[6]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[6]),6);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[6].coord2=&(coordinate[6]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[6].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[6].coord.t[0]=-58;/* Posizione x ogetto */ coordinate[6].coord.t[1]=7;/* Posizione y ogetto */ coordinate[6].coord.t[2]=20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 6 */ vetbox[6].pos.vx=50; vetbox[6].pos.vy=260; vetbox[6].pos.vz=67; vetbox[6].neg.vx=-50; vetbox[6].neg.vy=-20; vetbox[6].neg.vz=-67; /* Inizializzazione box ogetto 6 */ /* Ogetto 6*/ /* ogetto 7 */ GsInitCoordinate2(&(coordinate[5]),&(coordinate[7]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[7]),7);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[7].coord2=&(coordinate[7]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[7].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[7].coord.t[0]=58;/* Posizione x ogetto */ coordinate[7].coord.t[1]=7;/* Posizione y ogetto */ coordinate[7].coord.t[2]=20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 7 */ vetbox[7].pos.vx=50; vetbox[7].pos.vy=260; vetbox[7].pos.vz=67; vetbox[7].neg.vx=-50; vetbox[7].neg.vy=-20; vetbox[7].neg.vz=-67; /* Inizializzazione box ogetto 7 */ /* Ogetto 7*/ /* ogetto 8 */ GsInitCoordinate2(&(coordinate[6]),&(coordinate[8]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[8]),8);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[8].coord2=&(coordinate[8]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[8].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[8].coord.t[0]=0;/* Posizione x ogetto */ coordinate[8].coord.t[1]=230;/* Posizione y ogetto */ coordinate[8].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 8 */ vetbox[8].pos.vx=70; vetbox[8].pos.vy=300; vetbox[8].pos.vz=125; vetbox[8].neg.vx=-70; vetbox[8].neg.vy=-100; vetbox[8].neg.vz=-125; /* Inizializzazione box ogetto 8 */ /* Ogetto 8*/ /* ogetto 9 */ GsInitCoordinate2(&(coordinate[7]),&(coordinate[9]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[9]),9);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[9].coord2=&(coordinate[9]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[9].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[9].coord.t[0]=0;/* Posizione x ogetto */ coordinate[9].coord.t[1]=230;/* Posizione y ogetto */ coordinate[9].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 9 */ vetbox[9].pos.vx=70; vetbox[9].pos.vy=300; vetbox[9].pos.vz=125; vetbox[9].neg.vx=-70; vetbox[9].neg.vy=-100; vetbox[9].neg.vz=-125; /* Inizializzazione box ogetto 9 */ /* Ogetto 9*/ /* ogetto 10 */ GsInitCoordinate2(&(coordinate[8]),&(coordinate[10]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[10]),10);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[10].coord2=&(coordinate[10]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[10].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[10].coord.t[0]=0;/* Posizione x ogetto */ coordinate[10].coord.t[1]=255;/* Posizione y ogetto */ coordinate[10].coord.t[2]=60;/* Posizione z ogetto */ /* Inizializzazione sfere di collisione dell'ogetto 1 */ collisione[10][0].ray=1;/* significa che ho 1 sola sfera di collisione */ collisione[10][1].ray=25;/* Raggio di collisione di 30*/ /* Posizioni locali della sfera */ collisione[10][1].localpos.vx=0; collisione[10][1].localpos.vy=20; collisione[10][1].localpos.vz=0; /* Inizializzazione sfere di collisione dell'ogetto 10 */ /* Inizializzazione box ogetto 10*/ vetbox[10].pos.vx=45; vetbox[10].pos.vy=180; vetbox[10].pos.vz=100; vetbox[10].neg.vx=-45; vetbox[10].neg.vy=1; vetbox[10].neg.vz=-60; /* Inizializzazione box ogetto 10*/ /* Ogetto 10*/ /* ogetto 11 */ GsInitCoordinate2(&(coordinate[9]),&(coordinate[11]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[11]),11);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[11].coord2=&(coordinate[11]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[11].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[11].coord.t[0]=0;/* Posizione x ogetto */ coordinate[11].coord.t[1]=255;/* Posizione y ogetto */ coordinate[11].coord.t[2]=60;/* Posizione z ogetto */ /* Inizializzazione box ogetto 11*/ vetbox[11].pos.vx=45; vetbox[11].pos.vy=180; vetbox[11].pos.vz=100; vetbox[11].neg.vx=-45; vetbox[11].neg.vy=1; vetbox[11].neg.vz=-60; /* Inizializzazione box ogetto 11*/ /* Ogetto 11*/ /* ogetto 12 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[12]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[12]),12);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[12].coord2=&(coordinate[12]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[12].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[12].coord.t[0]=-75;/* Posizione x ogetto */ coordinate[12].coord.t[1]=35;/* Posizione y ogetto */ coordinate[12].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 12*/ vetbox[12].pos.vx=75; vetbox[12].pos.vy=370; vetbox[12].pos.vz=100; vetbox[12].neg.vx=-75; vetbox[12].neg.vy=-50; vetbox[12].neg.vz=-100; /* Inizializzazione box ogetto 12*/ /* Ogetto 12*/ /* ogetto 13 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[13]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[13]),13);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[13].coord2=&(coordinate[13]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[13].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[13].coord.t[0]=75;/* Posizione x ogetto */ coordinate[13].coord.t[1]=35;/* Posizione y ogetto */ coordinate[13].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 13*/ vetbox[13].pos.vx=75; vetbox[13].pos.vy=370; vetbox[13].pos.vz=100; vetbox[13].neg.vx=-75; vetbox[13].neg.vy=-50; vetbox[13].neg.vz=-100; /* Inizializzazione box ogetto 13*/ /* Ogetto 13*/ /* ogetto 14 */ GsInitCoordinate2(&(coordinate[12]),&(coordinate[14]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[14]),14);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[14].coord2=&(coordinate[14]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[14].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[14].coord.t[0]=0;/* Posizione x ogetto */ coordinate[14].coord.t[1]=335;/* Posizione y ogetto */ coordinate[14].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 14*/ vetbox[14].pos.vx=100; vetbox[14].pos.vy=530; vetbox[14].pos.vz=310; vetbox[14].neg.vx=-200; vetbox[14].neg.vy=-150; vetbox[14].neg.vz=-340; /* Inizializzazione box ogetto 14*/ /* Ogetto 14*/ /* ogetto 15 */ GsInitCoordinate2(&(coordinate[13]),&(coordinate[15]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[15]),15);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[15].coord2=&(coordinate[15]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[15].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[15].coord.t[0]=0;/* Posizione x ogetto */ coordinate[15].coord.t[1]=335;/* Posizione y ogetto */ coordinate[15].coord.t[2]=-20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 15*/ vetbox[15].pos.vx=200; vetbox[15].pos.vy=530; vetbox[15].pos.vz=310; vetbox[15].neg.vx=-100; vetbox[15].neg.vy=-150; vetbox[15].neg.vz=-340; /* Inizializzazione box ogetto 15*/ /* Ogetto 15*/ /* ogetto 16 */ GsInitCoordinate2(&(coordinate[14]),&(coordinate[16]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[16]),16);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[16].coord2=&(coordinate[16]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[16].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[16].coord.t[0]=-30;/* Posizione x ogetto */ coordinate[16].coord.t[1]=510;/* Posizione y ogetto */ coordinate[16].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 16*/ vetbox[16].pos.vx=125; vetbox[16].pos.vy=130; vetbox[16].pos.vz=325; vetbox[16].neg.vx=-145; vetbox[16].neg.vy=-1; vetbox[16].neg.vz=-180; /* Inizializzazione box ogetto 16*/ /* Ogetto 16*/ /* ogetto 17 */ GsInitCoordinate2(&(coordinate[15]),&(coordinate[17]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[17]),17);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[17].coord2=&(coordinate[17]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[17].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[17].coord.t[0]=30;/* Posizione x ogetto */ coordinate[17].coord.t[1]=510;/* Posizione y ogetto */ coordinate[17].coord.t[2]=0;/* Posizione z ogetto */ /* Inizializzazione box ogetto 17*/ vetbox[17].pos.vx=145; vetbox[17].pos.vy=130; vetbox[17].pos.vz=325; vetbox[17].neg.vx=-125; vetbox[17].neg.vy=-1; vetbox[17].neg.vz=-180; /* Inizializzazione box ogetto 17*/ /* Ogetto 17*/ /* ogetto 18 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[18]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[18]),18);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[18].coord2=&(coordinate[18]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[18].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[18].coord.t[0]=107;/* Posizione x ogetto */ coordinate[18].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[18].coord.t[2]=145;/* Posizione z ogetto */ /* inizializzazione rotazione */ rotazioni[18].vx=0; rotazioni[18].vy=15*ONE/360; rotazioni[18].vz=0; RotMatrix(&(rotazioni[18]),&(coordinate[18].coord)); /* inizializzazione rotazione */ /* Inizializzazione box ogetto 18*/ vetbox[18].pos.vx=75; vetbox[18].pos.vy=290; vetbox[18].pos.vz=25; vetbox[18].neg.vx=-75; vetbox[18].neg.vy=-1; vetbox[18].neg.vz=-25; /* Inizializzazione box ogetto 18*/ /* Ogetto 18*/ /* ogetto 19 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[19]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[19]),19);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[19].coord2=&(coordinate[19]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[19].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[19].coord.t[0]=-107;/* Posizione x ogetto */ coordinate[19].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[19].coord.t[2]=145;/* Posizione z ogetto */ rotazioni[19].vx=0; rotazioni[19].vy=345*ONE/360; rotazioni[19].vz=0; RotMatrix(&(rotazioni[19]),&(coordinate[19].coord)); /* Inizializzazione box ogetto 19*/ vetbox[19].pos.vx=75; vetbox[19].pos.vy=290; vetbox[19].pos.vz=25; vetbox[19].neg.vx=-75; vetbox[19].neg.vy=-1; vetbox[19].neg.vz=-25; /* Inizializzazione box ogetto 19*/ /* Ogetto 19*/ /* ogetto 20 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[20]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[20]),20);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[20].coord2=&(coordinate[20]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[20].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[20].coord.t[0]=95;/* Posizione x ogetto */ coordinate[20].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[20].coord.t[2]=-122;/* Posizione z ogetto */ /* Inizializzazione box ogetto 20*/ vetbox[20].pos.vx=75; vetbox[20].pos.vy=290; vetbox[20].pos.vz=25; vetbox[20].neg.vx=-75; vetbox[20].neg.vy=-1; vetbox[20].neg.vz=-25; /* Inizializzazione box ogetto 20*/ /* Ogetto 20*/ /* ogetto 21 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[21]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[21]),21);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[21].coord2=&(coordinate[21]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[21].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[21].coord.t[0]=-95;/* Posizione x ogetto */ coordinate[21].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[21].coord.t[2]=-122;/* Posizione z ogetto */ /* Inizializzazione box ogetto 21*/ vetbox[21].pos.vx=75; vetbox[21].pos.vy=290; vetbox[21].pos.vz=25; vetbox[21].neg.vx=-75; vetbox[21].neg.vy=-1; vetbox[21].neg.vz=-25; /* Inizializzazione box ogetto 21*/ /* Ogetto 21*/ /* ogetto 22 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[22]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[22]),22);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[22].coord2=&(coordinate[22]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[22].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[22].coord.t[0]=160;/* Posizione x ogetto */ coordinate[22].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[22].coord.t[2]=20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 22*/ vetbox[22].pos.vx=10; vetbox[22].pos.vy=290; vetbox[22].pos.vz=50; vetbox[22].neg.vx=-10; vetbox[22].neg.vy=-1; vetbox[22].neg.vz=-160; /* Inizializzazione box ogetto 22*/ /* Ogetto 22*/ /* ogetto 23 */ GsInitCoordinate2(&(coordinate[3]),&(coordinate[23]));/* Inizializzo il gestore delle coordinate dell'ogetto1 */ GsLinkObject4((unsigned long )(indfiles[0]),&(ogetti[23]),23);/* Liko l'ogetto1 con il tmd data e setto il numero dell'ogetto che usa il tmd */ ogetti[23].coord2=&(coordinate[23]);/* Assegno il puntatore al gestore delle coordinate dell'ogetto1 a puntare alla coord1*/ coordinate[23].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[23].coord.t[0]=-160;/* Posizione x ogetto */ coordinate[23].coord.t[1]=-60;/* Posizione y ogetto */ coordinate[23].coord.t[2]=20;/* Posizione z ogetto */ /* Inizializzazione box ogetto 23*/ vetbox[23].pos.vx=10; vetbox[23].pos.vy=290; vetbox[23].pos.vz=50; vetbox[23].neg.vx=-10; vetbox[23].neg.vy=-1; vetbox[23].neg.vz=-160; /* Inizializzazione box ogetto 23*/ /* Ogetto 23*/ /* fine init ogetti */ /* Inizializzo le luci */ /* Luce 1*/ luce1.vx=-1; luce1.vy=1; luce1.vz=-1; luce1.r=200; luce1.g=200; luce1.b=255; /* Luce 1*/ /* Luce 2*/ luce2.vx=1; luce2.vy=1; luce2.vz=-1; luce2.r=30; luce2.g=30; luce2.b=40; /* Luce 2*/ /* Luce 3*/ luce3.vx=0; luce3.vy=0; luce3.vz=0; luce3.r=0; luce3.g=0; luce3.b=0; /* Luce 3*/ /*Inizializzazione globale GsLIGHTWSMATRIX*/ GsSetFlatLight(0,&luce1);/* Inserisco la luce1 in GsLIGHTWSMATRIX*/ GsSetFlatLight(1,&luce2);/* Inserisco la luce2 in GsLIGHTWSMATRIX*/ GsSetFlatLight(2,&luce3);/* Inserisco la luce2 in GsLIGHTWSMATRIX*/ /* Fine Inizializzazione globale GsLIGHTWSMATRIX*/ /* Settaggio luci ambiente */ GsSetAmbient(30,40,30);/* Setto la luce ambiente */ GsSetLightMode(0);/* setto il modo fog o no 0=N0 1=si*/ /* Settaggio luci ambiente */ /* Inizializzo le luci*/ /* Inizializzazioni delle ordering tables e Proiezione distance */ table1[0].org=zsort1[0];/* metto in relazione la OT table 0 con il proprio vettore di GsOT_TAG */ table1[1].org=zsort1[1];/* metto in relazione la OT table 1 con il proprio vettore di GsOT_TAG */ table1[0].length=14;/* setto la lunghezza della ordering table 0*/ table1[1].length=14;/* setto la lunghezza della ordering table 1*/ GsClearOt(0,0,&table1[0]);/* Inizializzo la OT del Buffer 0*/ GsClearOt(0,0,&table1[1]);/* Inizializzo la OT del Buffer 0*/ GsSetProjection(pro);/* setto la distanza di proiezione dallo schermo teoretico */ /* Fine Inizializzazioni delle ordering tables e Proiezione distance */ /* Inizializzazione del punto di vista */ puntovista.vpx=0;// Inizializzo l'orientamento puntovista.vpy=0;// puntovista.vpz=0;// del punto di vista parallelo puntovista.vrx=0;// puntovista.vry=0;// alla TELECAMERA puntovista.vrz=1;// puntovista.super=&TELECAMERACORD;/* pongo figlio di telecamera il punto di vista */ /* Inizializzazione del punto di vista */ /* M A I N L O O P */ while(1)/* Ciclo base Loop */ { int swap;/* Variabile di swapping dei buffers*/ /* D E T E C T C O L L I S I O N */ /* SPHERICAL AND BOX */ /* SPHERICAL AND BOX */ /* D E T E C T C O L L I S I O N */ /* MODIFICA PARAMETRI TRAMITE JOYPADS */ /* Controllo Joypad 1 */ switch(SEQUENZA1)/* SWITCH */ { case 0:/* TASTO X */ /* Incrementa la zeta */ { coordinate[sel].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[sel].coord.t[2]+=10;/* Posizione z ogetto */ };SEQUENZA1=-1;break; case 1:/* TASTO O */ /* decrementa la zeta */ { coordinate[sel].flg=0;/* Indico che devo calcolare la matrice L-W */ coordinate[sel].coord.t[2]-=10;/* Posizione z ogetto */ };SEQUENZA1=-1;break; case 2:/* TASTO TRIANGOLO */ /* Aumento la distanza di proiezione*/ { lcin[1]->F=-21; };SEQUENZA1=-1;break; case 3:/* TASTO QUADRATO */ { lcin[1]->F=21; };SEQUENZA1=-1;break; case 4:/* TASTO RIGHT ONE */ /* Incremento ogetto da muovere */ { sel+=1; };SEQUENZA1=-1;break; case 5:/* TASTO RIGHT TWO */ /* Decremento ogetto da muovere */ { if(sel>0) sel--; };SEQUENZA1=-1;break; case 6:/* TASTO START */ { TELECAMERACORD.coord.t[2]+=20; };SEQUENZA1=-1;break; case 7:/* TASTO SELECT */ { TELECAMERACORD.coord.t[2]-=20; };SEQUENZA1=-1;break; case 8:/* TASTO DESTRA */ { lcin[1]->ro.y.f=20; };SEQUENZA1=-1;break; case 9:/* TASTO SU */ { lcin[1]->ro.x.f=-20; };SEQUENZA1=-1;break; case 10:/* TASTO SINISTRA */ { lcin[1]->ro.y.f=-20; };SEQUENZA1=-1;break; case 11:/* TASTO GIU' */ { lcin[1]->ro.x.f=20; };SEQUENZA1=-1;break; case 12:/* TASTO LEFT-ONE */ /* Incremento la y del puntodivista*/ { TELECAMERACORD.coord.t[1]+=10; };SEQUENZA1=-1;break; case 13:/* TASTO LEFT-TWO */ /* Decremento la y del puntodivista */ { TELECAMERACORD.coord.t[1]-=10; };SEQUENZA1=-1;break; } /* Controllo Joypad 2 */ switch(SEQUENZA1)/* SWITCH */ { case 0:/* TASTO X */ { };SEQUENZA1=-1;break; case 1:/* TASTO O */ { };SEQUENZA1=-1;break; case 2:/* TASTO TRIANGOLO */ { };SEQUENZA1=-1;break; case 3:/* TASTO QUADRATO */ { };SEQUENZA1=-1;break; case 4:/* TASTO RIGHT ONE */ { };SEQUENZA1=-1;break; case 5:/* TASTO RIGHT TWO */ { };SEQUENZA1=-1;break; case 6:/* TASTO START */ { };SEQUENZA1=-1;break; case 7:/* TASTO SELECT */ { };SEQUENZA1=-1;break; case 8:/* TASTO DESTRA */ { };SEQUENZA1=-1;break; case 9:/* TASTO SU */ { };SEQUENZA1=-1;break; case 10:/* TASTO SINISTRA */ { };SEQUENZA1=-1;break; case 11:/* TASTO GIU' */ { };SEQUENZA1=-1;break; case 12:/* TASTO LEFT-ONE */ { };SEQUENZA1=-1;break; case 13:/* TASTO LEFT-TWO */ { };SEQUENZA1=-1;break; } /* MODIFICA PARAMETRI TRAMITE JOYPADS */ /* ITERAZIONE CINEMATICA OGETTI IN MOVIMENTO */ for(i=0;i<=(NUM_OGETTI-1);i++) { if(lcin[i]!=NULL) { short fv=0;// Forza vischiosa /* R O T A Z I O N I */ // Asse X fv=(-(lcin[i]->ro.x.v))/30; if((Modulo(lcin[i]->ro.x.v)<30)&&((lcin[i]->ro.x.v)!=0)) { if((lcin[i]->ro.x.v)>0) fv=-1; if((lcin[i]->ro.x.v)<0) fv=1; } lcin[i]->ro.x.v=(lcin[i]->ro.x.v0)+((lcin[i]->ro.x.f)+fv)*t;// velocit angolare rotazioni[i].vx=((lcin[i]->ro.x.a0)+(lcin[i]->ro.x.v0)*t+((lcin[i]->ro.x.f)+fv)*t*t)%ONE;// angolo x // Asse Y fv=(-(lcin[i]->ro.y.v))/30; if((Modulo(lcin[i]->ro.y.v)<30)&&((lcin[i]->ro.y.v)!=0)) { if((lcin[i]->ro.y.v)>0) fv=-1; if((lcin[i]->ro.y.v)<0) fv=1; } lcin[i]->ro.y.v=(lcin[i]->ro.y.v0)+((lcin[i]->ro.y.f)+fv)*t;// velocit angolare rotazioni[i].vy=((lcin[i]->ro.y.a0)+(lcin[i]->ro.y.v0)*t+((lcin[i]->ro.y.f)+fv)*t*t)%ONE;// angolo y // Asse Z fv=(-(lcin[i]->ro.z.v))/30; if((Modulo(lcin[i]->ro.z.v)<30)&&((lcin[i]->ro.z.v)!=0)) { if((lcin[i]->ro.z.v)>0) fv=-1; if((lcin[i]->ro.z.v)<0) fv=1; } lcin[i]->ro.z.v=(lcin[i]->ro.z.v0)+((lcin[i]->ro.z.f)+fv)*t;// velocit angolare rotazioni[i].vz=((lcin[i]->ro.z.a0)+(lcin[i]->ro.z.v0)*t+((lcin[i]->ro.z.f)+fv)*t*t)%ONE;// angolo z /* R O T A Z I O N I */ Partiziona(lcin[i]->F,&(lcin[i]->tr.x.f),&(lcin[i]->tr.y.f),&(lcin[i]->tr.z.f),i);// Fraziono la forza agente sull'ogetto in funzione del suo orientamento /* T R A S L A Z I O N I */ // Asse X fv=(-(lcin[i]->tr.x.v))/30; if((Modulo(lcin[i]->tr.x.v)<30)&&((lcin[i]->tr.x.v)!=0)) { if((lcin[i]->tr.x.v)>0) fv=-1; if((lcin[i]->tr.x.v)<0) fv=1; } lcin[i]->tr.x.v=(lcin[i]->tr.x.v0)+((lcin[i]->tr.x.f)+fv)*t;// velocit asse x coordinate[i].coord.t[0]=(lcin[i]->tr.x.a0)+(lcin[i]->tr.x.v0)*t+((lcin[i]->tr.x.f)+fv)*t*t;// Posizione x // Asse Y fv=(-(lcin[i]->tr.y.v))/30; if((Modulo(lcin[i]->tr.y.v)<30)&&((lcin[i]->tr.y.v)!=0)) { if((lcin[i]->tr.y.v)>0) fv=-1; if((lcin[i]->tr.y.v)<0) fv=1; } lcin[i]->tr.y.v=(lcin[i]->tr.y.v0)+((lcin[i]->tr.y.f)+fv)*t;// velocit asse y coordinate[i].coord.t[1]=(lcin[i]->tr.y.a0)+(lcin[i]->tr.y.v0)*t+((lcin[i]->tr.y.f)+fv)*t*t;// Posizione y // Asse Z fv=(-(lcin[i]->tr.z.v))/30; if((Modulo(lcin[i]->tr.z.v)<30)&&((lcin[i]->tr.z.v)!=0)) { if((lcin[i]->tr.z.v)>0) fv=-1; if((lcin[i]->tr.z.v)<0) fv=1; } lcin[i]->tr.z.v=(lcin[i]->tr.z.v0)+((lcin[i]->tr.z.f)+fv)*t;// velocit asse z coordinate[i].coord.t[2]=(lcin[i]->tr.z.a0)+(lcin[i]->tr.z.v0)*t+((lcin[i]->tr.z.f)+fv)*t*t;// Posizione z /* T R A S L A Z I O N I */ Ruota(rotazioni[i],&(coordinate[i].coord),5); coordinate[i].flg=0;// Ogetto modificato !!! } } t++; for(i=0;i<=(NUM_OGETTI-1);i++) if(lcin[i]!=NULL) if(t%2==0) { /* R O T A Z I O N I */ /* Aggiornamento asse X */ lcin[i]->ro.x.f=0;// Azzero la coppia lcin[i]->ro.x.a0=rotazioni[i].vx;// aggiorno a0 lcin[i]->ro.x.v0=lcin[i]->ro.x.v;// aggiorno v0 /* Aggiornamento asse Y */ lcin[i]->ro.y.f=0;// Azzero la coppia lcin[i]->ro.y.a0=rotazioni[i].vy;// aggiorno a0 lcin[i]->ro.y.v0=lcin[i]->ro.y.v;// aggiorno v0 /* Aggiornamento asse Z */ lcin[i]->ro.z.f=0;// Azzero la coppia lcin[i]->ro.z.a0=rotazioni[i].vz;// aggiorno a0 lcin[i]->ro.z.v0=lcin[i]->ro.z.v;// aggiorno v0 /* R O T A Z I O N I */ /* T R A S L A Z I O N I */ /* Aggiornamento asse X */ lcin[i]->tr.x.f=0;// Azzero la coppia lcin[i]->tr.x.a0=coordinate[i].coord.t[0];// aggiorno a0 lcin[i]->tr.x.v0=lcin[i]->tr.x.v;// aggiorno v0 /* Aggiornamento asse Y */ lcin[i]->tr.y.f=0;// Azzero la coppia lcin[i]->tr.y.a0=coordinate[i].coord.t[1];// aggiorno a0 lcin[i]->tr.y.v0=lcin[i]->tr.y.v;// aggiorno v0 /* Aggiornamento asse Z */ lcin[i]->tr.z.f=0;// Azzero la coppia lcin[i]->tr.z.a0=coordinate[i].coord.t[2];// aggiorno a0 lcin[i]->tr.z.v0=lcin[i]->tr.z.v;// aggiorno v0 /* T R A S L A Z I O N I */ lcin[i]->F=0;// Annullo la forza applicata all'ogetto i-esimo t=0; } /* ITERAZIONE CINEMATICA OGETTI IN MOVIMENTO */ /* EVOLUZIONE ANIMAZIONI */ /* EVOLUZIONE ANIMAZIONI */ /* Aggiornamento punto di vista e proiezione */ /* P D V */ vapv.vx=0;/* rotazione intorno all'asse X del Padre */ vapv.vy=0;/* rotazione intorno all'asse Y del Padre */ vapv.vz=0;/* rotazione intorno all'asse Z del Padre */ RotMatrix(&vapv,&mrpv);/* Creo la matrice di rotazione del punto di vista */ mrpv.t[0]=TELECAMERACORD.coord.t[0];// assegnazioe dei valori posizionali originari mrpv.t[1]=TELECAMERACORD.coord.t[1]; // mrpv.t[2]=TELECAMERACORD.coord.t[2]; // TELECAMERACORD.coord=mrpv;/* Assegno la matrice di rotazione al punto di vista */ TELECAMERACORD.flg=0;/* Dico di calcolare la workmatrix della telecamera */ GsGetLws(&TELECAMERACORD,&matr1lw,&matr1ls);/* Setta subito la LS e LW matrix e calcola la workmatrix */ GsSetRefView2(&puntovista);/* rendo attivo il punto di vista settato modificando la globale GsWSMATRIX */ /* P D V */ /* Proiezione */ GsSetProjection(pro);/* Assegno la distanza attuale di proiezione */ /* Proiezione */ /* Aggiornamento punto di vista e proiezione */ /* Creazione area di lavoro dei Packets */ swap = GsGetActiveBuff();/* Setto la variabile che mi indica il buffer da mandare in stampa */ GsSetWorkBase((PACKET*)gpupacketarea[swap]);/* creo l'area di lavoro dei packets Inizializzo il pintatore all'area,il globale GsOUT_PACKET_P */ GsClearOt(0,0,&table1[swap]);/* Inizializzo la ordering table */ /* Fine Creazione area di lavoro dei Packets */ /* Stampa coordinate ogetto in movimento */ FntPrint("Ang:");ConvNumlo((long)(rotazioni[1].vx) );FntPrint(" "); FntPrint("Fz: ");ConvNumlo( (long)(lcin[1]->tr.z.f));FntPrint(" "); FntPrint("Fx: ");ConvNumlo((long)(lcin[1]->tr.x.f) );FntPrint(" "); FntPrint("Fy: ");ConvNumlo((long) lcin[1]->tr.y.f );FntPrint(" "); /* Stampa coordinate ogetto in movimento */ /* CICLO DI SORTING DEGLI OGETTI */ for(i=0;i<=(NUM_OGETTI-1);i++) { /* Calcolo Matrici */ GsGetLws(&(coordinate[i]),&matr1lw,&matr1ls);/* Setta subito la LS e LW matrix */ GsSetLsMatrix(&matr1ls);/* manda al GTE la matrice di conversione delle coordinate locali con quelle dello chermo teoretico*/ GsSetLightMatrix(&matr1lw);/* Manda al GTE la matrice prodotto di quella di 3 luci e della local-World per il calcolo delle luci dell'ogetto1*/ /* Calcolo Matrici */ /* Creazione Packets e posizionamento nella ordering table relativa */ GsSortObject4(&(ogetti[i]),&table1[swap],0,(u_long *)getScratchAddr(0));/* Creo i drawing packets e pongo i comandi nella ordeing table1 dell'ogetto1*/ /* Creazione Packets e posizionamento nella ordering table relativa */ } /* CICLO DI SORTING DEGLI OGETTI */ FntFlush(-1);/* Stampa del canale di output di default */ // DrawSync(0);/* Attende che finisca di scrivere la ot sul buffer*/ VSync(0);/*Attendo il sincronismo verticale */ ResetGraph(1);/* Sono in Interlacciato */ contatore++;/* Incremento il contatore temporale per controllo joypads */ /* Setto i dati del Joystick */ LetturaJoy(); /* Setto i dati del Joystick */ GsSwapDispBuff(); /* Scambio il drawing e il display buffer */ GsSortClear(0,0,0,&table1[swap]);/* Pone all'inizio della OT il comando di schiarimento del buffer */ GsDrawOt(&table1[swap]);/* Mando al fb di drawing la ordering table */ } /* M A I N L O O P E N D */ }