Use setXVertPos()
This commit is contained in:
parent
411f47831f
commit
c0b40e4747
@ -10,17 +10,19 @@ void enlightMesh(LEVEL * curLvl, MESH * actorPtr, SVECTOR * lgtang);
|
|||||||
void drawPoly(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
|
void drawPoly(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
|
||||||
// Tri drawing
|
// Tri drawing
|
||||||
long drawTri(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
long drawTri(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
||||||
|
void set3VertexPos(MESH * mesh, long t, int atime);
|
||||||
void set3VertexLerPos(MESH * mesh, long t);
|
void set3VertexLerPos(MESH * mesh, long t);
|
||||||
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, char * db, int i, int t);
|
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, char * db, int i, int t);
|
||||||
void set3Tex(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, long t, int i);
|
void set3Tex(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, long t, int i);
|
||||||
long interpolateTri(POLY_GT3 * poly, MESH * mesh, long t);
|
void interpolateTri(POLY_GT3 * poly, MESH * mesh, long t);
|
||||||
//Quad drawing
|
//Quad drawing
|
||||||
long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
||||||
|
void set4VertexPos(MESH * mesh, long t, int atime);
|
||||||
void set4VertexLerPos(MESH * mesh, long t);
|
void set4VertexLerPos(MESH * mesh, long t);
|
||||||
void set4Prism(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, char * db, int i, int t);
|
void set4Prism(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, char * db, int i, int t);
|
||||||
void set4Tex(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, long t, int i);
|
void set4Tex(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, long t, int i);
|
||||||
int set4Subdiv(MESH * mesh, POLY_GT4 * poly4, u_long * ot, long t, int i, char ** nextpri);
|
int set4Subdiv(MESH * mesh, POLY_GT4 * poly4, u_long * ot, long t, int i, char ** nextpri);
|
||||||
long interpolateQuad(POLY_GT4 * poly4, MESH * mesh, long t);
|
void interpolateQuad(POLY_GT4 * poly4, MESH * mesh, long t);
|
||||||
//2D drawing
|
//2D drawing
|
||||||
void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db);
|
void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db);
|
||||||
// Rendering
|
// Rendering
|
||||||
|
@ -77,6 +77,12 @@ void set3VertexLerPos(MESH * mesh, long t){
|
|||||||
|
|
||||||
mesh->currentAnim->cursor += 24 * mesh->currentAnim->dir;
|
mesh->currentAnim->cursor += 24 * mesh->currentAnim->dir;
|
||||||
};
|
};
|
||||||
|
void set3VertexPos(MESH * mesh, long t, int atime){
|
||||||
|
// Set vertices according to anim
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vx ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vx ];
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vz ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vz ];
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vy ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vy ];
|
||||||
|
}
|
||||||
void set4VertexLerPos(MESH * mesh, long t){
|
void set4VertexLerPos(MESH * mesh, long t){
|
||||||
// Find and set 4 interpolated vertex value
|
// Find and set 4 interpolated vertex value
|
||||||
short precision = 12;
|
short precision = 12;
|
||||||
@ -100,7 +106,14 @@ void set4VertexLerPos(MESH * mesh, long t){
|
|||||||
|
|
||||||
mesh->currentAnim->cursor += 24 * mesh->currentAnim->dir;
|
mesh->currentAnim->cursor += 24 * mesh->currentAnim->dir;
|
||||||
}
|
}
|
||||||
long interpolateTri(POLY_GT3 * poly, MESH * mesh, long t){
|
void set4VertexPos(MESH * mesh, long t, int atime){
|
||||||
|
// Set vertices according to anim
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vx ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vx ];
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vz ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vz ];
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.vy ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vy ];
|
||||||
|
mesh->tmesh->v[ mesh->index[ t ].order.pad ] = mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.pad ];
|
||||||
|
}
|
||||||
|
void interpolateTri(POLY_GT3 * poly, MESH * mesh, long t){
|
||||||
long Flag, nclip = 0;
|
long Flag, nclip = 0;
|
||||||
// Ping pong
|
// Ping pong
|
||||||
//~ //if (mesh->anim->cursor > 4096 || mesh->anim->cursor < 0){
|
//~ //if (mesh->anim->cursor > 4096 || mesh->anim->cursor < 0){
|
||||||
@ -121,20 +134,8 @@ long interpolateTri(POLY_GT3 * poly, MESH * mesh, long t){
|
|||||||
}
|
}
|
||||||
// Find and set interpolated vertex value
|
// Find and set interpolated vertex value
|
||||||
set3VertexLerPos(mesh, t);
|
set3VertexLerPos(mesh, t);
|
||||||
// Coord transformation from world space to screen space
|
|
||||||
gte_RotAverageNclip3(
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vx ],
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vz ],
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vy ],
|
|
||||||
( long* ) &poly->x0, ( long* ) &poly->x1, ( long* ) &poly->x2,
|
|
||||||
&mesh->p,
|
|
||||||
&mesh->OTz,
|
|
||||||
&Flag,
|
|
||||||
&nclip
|
|
||||||
);
|
|
||||||
return nclip;
|
|
||||||
};
|
};
|
||||||
long interpolateQuad(POLY_GT4 * poly4, MESH * mesh, long t){
|
void interpolateQuad(POLY_GT4 * poly4, MESH * mesh, long t){
|
||||||
long Flag, nclip = 0;
|
long Flag, nclip = 0;
|
||||||
// ping pong
|
// ping pong
|
||||||
//~ if (mesh->anim->cursor > 4096 || mesh->anim->cursor < 0){
|
//~ if (mesh->anim->cursor > 4096 || mesh->anim->cursor < 0){
|
||||||
@ -154,19 +155,6 @@ long interpolateQuad(POLY_GT4 * poly4, MESH * mesh, long t){
|
|||||||
}
|
}
|
||||||
// Find and set interpolated vertex value
|
// Find and set interpolated vertex value
|
||||||
set4VertexLerPos(mesh, t);
|
set4VertexLerPos(mesh, t);
|
||||||
// Coord transformations
|
|
||||||
gte_RotAverageNclip4(
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.pad ],
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vz],
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vx ],
|
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vy ],
|
|
||||||
( long* )&poly4->x0, ( long* )&poly4->x1, ( long* )&poly4->x2, ( long* )&poly4->x3,
|
|
||||||
&mesh->p,
|
|
||||||
&mesh->OTz,
|
|
||||||
&Flag,
|
|
||||||
&nclip
|
|
||||||
);
|
|
||||||
return nclip;
|
|
||||||
};
|
};
|
||||||
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, char * db, int i, int t){
|
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, char * db, int i, int t){
|
||||||
// Transparency effect :
|
// Transparency effect :
|
||||||
@ -364,23 +352,14 @@ long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * o
|
|||||||
if (mesh->isAnim && mesh->currentAnim){
|
if (mesh->isAnim && mesh->currentAnim){
|
||||||
// with interpolation
|
// with interpolation
|
||||||
if ( mesh->currentAnim->interpolate ){
|
if ( mesh->currentAnim->interpolate ){
|
||||||
nclip = interpolateQuad(poly4, mesh, t);
|
//~ nclip = interpolateQuad(poly4, mesh, t);
|
||||||
|
interpolateQuad(poly4, mesh, t);
|
||||||
} else {
|
} else {
|
||||||
// TODO : write playAnim()
|
// TODO : write playAnim()
|
||||||
// No interpolation, use all vertices coordinates in anim data
|
// No interpolation, use all vertices coordinates in anim data
|
||||||
gte_RotAverageNclip4(
|
set4VertexPos(mesh, t, atime);
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.pad ],
|
}
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vz ],
|
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vx ],
|
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vy ],
|
|
||||||
( long* )&poly4->x0, ( long* )&poly4->x1, ( long* )&poly4->x2, ( long* )&poly4->x3,
|
|
||||||
&mesh->p,
|
|
||||||
&mesh->OTz,
|
|
||||||
&Flag,
|
|
||||||
&nclip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Mesh is sprite
|
// Mesh is sprite
|
||||||
if (mesh->isSprite){
|
if (mesh->isSprite){
|
||||||
// Find inverse rotation matrix so that sprite always faces camera
|
// Find inverse rotation matrix so that sprite always faces camera
|
||||||
@ -391,7 +370,7 @@ long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * o
|
|||||||
gte_MulMatrix0(&rot, &invRot, &invRot);
|
gte_MulMatrix0(&rot, &invRot, &invRot);
|
||||||
gte_SetRotMatrix(&invRot);
|
gte_SetRotMatrix(&invRot);
|
||||||
}
|
}
|
||||||
// Use regular vertex coords
|
// Apply rtp
|
||||||
gte_RotAverageNclip4(
|
gte_RotAverageNclip4(
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.pad ],
|
&mesh->tmesh->v[ mesh->index[t].order.pad ],
|
||||||
&mesh->tmesh->v[ mesh->index[t].order.vz],
|
&mesh->tmesh->v[ mesh->index[t].order.vz],
|
||||||
@ -403,7 +382,7 @@ long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * o
|
|||||||
&Flag,
|
&Flag,
|
||||||
&nclip
|
&nclip
|
||||||
);
|
);
|
||||||
}
|
|
||||||
if (nclip > 0 && mesh->OTz > 0 && (mesh->p < 4096)) {
|
if (nclip > 0 && mesh->OTz > 0 && (mesh->p < 4096)) {
|
||||||
SetPolyGT4(poly4);
|
SetPolyGT4(poly4);
|
||||||
if (mesh->tim){
|
if (mesh->tim){
|
||||||
@ -426,7 +405,7 @@ long drawQuad(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * o
|
|||||||
set4Tex(poly4, mesh, draw, t, i);
|
set4Tex(poly4, mesh, draw, t, i);
|
||||||
}
|
}
|
||||||
if ( (mesh->OTz > 0) /*&& (*mesh->OTz < OTLEN)*/ && (mesh->p < 4096) ) {
|
if ( (mesh->OTz > 0) /*&& (*mesh->OTz < OTLEN)*/ && (mesh->p < 4096) ) {
|
||||||
AddPrim( &ot[ mesh->OTz-3 ], poly4 );
|
AddPrim( &ot[ mesh->OTz-5 ], poly4 );
|
||||||
}
|
}
|
||||||
*nextpri += sizeof( POLY_GT4 );
|
*nextpri += sizeof( POLY_GT4 );
|
||||||
}
|
}
|
||||||
@ -448,22 +427,13 @@ long drawTri(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot
|
|||||||
if (mesh->isAnim && mesh->currentAnim){
|
if (mesh->isAnim && mesh->currentAnim){
|
||||||
// If interpolation flag is set, use it
|
// If interpolation flag is set, use it
|
||||||
if(mesh->currentAnim->interpolate){
|
if(mesh->currentAnim->interpolate){
|
||||||
nclip = interpolateTri(poly, mesh, t);
|
interpolateTri(poly, mesh, t);
|
||||||
} else {
|
} else {
|
||||||
// No interpolation
|
// No interpolation
|
||||||
// Use the pre-calculated vertices coordinates from the animation data
|
// Use the pre-calculated vertices coordinates from the animation data
|
||||||
gte_RotAverageNclip3(
|
set3VertexPos(mesh, t, atime);
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vx ],
|
}
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vz ],
|
|
||||||
&mesh->currentAnim->data[ atime % mesh->currentAnim->nframes * mesh->currentAnim->nvert + mesh->index[t].order.vy ],
|
|
||||||
( long* ) &poly->x0, ( long* ) &poly->x1, ( long* ) &poly->x2,
|
|
||||||
&mesh->p,
|
|
||||||
&mesh->OTz,
|
|
||||||
&Flag,
|
|
||||||
&nclip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// No animation
|
// No animation
|
||||||
if (mesh->isSprite){
|
if (mesh->isSprite){
|
||||||
// Find inverse rotation matrix so that sprite always faces camera
|
// Find inverse rotation matrix so that sprite always faces camera
|
||||||
@ -486,7 +456,6 @@ long drawTri(MESH * mesh, int atime, int * camMode, char ** nextpri, u_long * ot
|
|||||||
&Flag,
|
&Flag,
|
||||||
&nclip
|
&nclip
|
||||||
);
|
);
|
||||||
}
|
|
||||||
// Do not draw invisible meshes
|
// Do not draw invisible meshes
|
||||||
if ( nclip > 0 && mesh->OTz > 0 && (mesh->p < 4096) ) {
|
if ( nclip > 0 && mesh->OTz > 0 && (mesh->p < 4096) ) {
|
||||||
SetPolyGT3( poly );
|
SetPolyGT3( poly );
|
||||||
|
Loading…
Reference in New Issue
Block a user