home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MODEL
/
VERCONV.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-30
|
2KB
|
78 lines
/*
* 頂点変換
*
* Copyright T.Kobayashi 1994.8.9
*/
#include "matrix.h"
#include "vector.h"
#include "matclass.h"
#include "strclass.h"
#include "ml.h"
#include "poly.h"
#include "verconv.h"
int ConvVertex( xp, yp, zp, vxp, vyp, vzp, up, vp, buf )
int *xp, *yp, *zp, *vxp, *vyp, *vzp, *up, *vp ;
DataStruct *buf ;
{
VertexClass *ver ;
VectorClass *vec ;
if ( buf[0].type == TYPE_OBJECT )
{
if ( ObjectCheck( &buf[0], VertexClassID ) )
{
ver = (VertexClass*)buf[0].od.ptr ;
*xp = ver->ver.x ;
*yp = ver->ver.y ;
*zp = ver->ver.z ;
if ( ver->dtype & POLY_SHADE )
{
*vxp = ver->ver.vx ;
*vyp = ver->ver.vy ;
*vzp = ver->ver.vz ;
}
else
*vxp = *vyp = *vzp = 0 ;
if ( ver->dtype & POLY_UV )
{
*up = ver->ver.u ;
*vp = ver->ver.v ;
}
else
*up = *vp = 0 ;
}
else if ( ObjectCheck( &buf[0], VectorClassID ) )
{
vec = (VectorClass*)buf[0].od.ptr ;
*xp = vec->vec.x ;
*yp = vec->vec.y ;
*zp = vec->vec.z ;
*vxp = *vyp = *vzp = *up = *vp = 0 ;
}
else
return FALSE ;
}
else
{
*xp = ToInt( &buf[0] );
*yp = ToInt( &buf[1] );
*zp = ToInt( &buf[2] );
*vxp = *vyp = *vzp = *up = *vp = 0 ;
}
return TRUE ;
}
int ToInt( buf )
DataStruct *buf ;
{
if ( buf->type == TYPE_INT )
return buf->id.i ;
else if ( buf->type == TYPE_REAL )
return (int)buf->rd.r ;
else
ExecError( "引数の型が違います。" );
return -1 ;
}