home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MODEL
/
MAP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1996-03-26
|
2KB
|
92 lines
/*
* ポリゴンデータ管理ライブラリ
*
* Copyright T.Kobayashi 1994.8.7
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "lib.h"
#include "alloc.h"
#include "buffer.h"
#include "poly.h"
#include "view.h"
/* セレクトされているポリゴンにマッピング座標をつける */
void PolyMap(int sw, Matrix mat, int u1, int v1, int u2, int v2 )
{
int i, x, y ;
int imat[5][3] ;
Polygon *poly ;
Vertex *ver ;
if ( Selects == 0 )
return ;
MatToInt( imat, mat );
if ( sw )
{
poly = PolyTop();
while( poly != NULL )
{
if ( poly->select == ON )
{
poly->type |= POLY_UV ;
ver = poly->ver ;
ObjData[poly->obj].edit = TRUE ;
for( i = poly->vers ; i > 0 ; i-- )
{
x = (int)ver->x * imat[0][0]
+ (int)ver->y * imat[1][0]
+ (int)ver->z * imat[2][0]
+ imat[4][0];
y = (int)ver->x * imat[0][1]
+ (int)ver->y * imat[1][1]
+ (int)ver->z * imat[2][1]
+ imat[4][1];
if (x > 0) {
ver->u = imat[3][0] + (short)( ( x + 32767) >> 16 );
} else {
ver->u = imat[3][0] - (short)( (-x + 32767) >> 16 );
}
if (y > 0) {
ver->v = imat[3][1] + (short)( ( y + 32767) >> 16 );
} else {
ver->v = imat[3][1] - (short)( (-y + 32767) >> 16 );
}
if (ver->u < u1) ver->u = u1;
if (ver->u > u2) ver->u = u2;
if (ver->v < v1) ver->v = v1;
if (ver->v > v2) ver->v = v2;
ver++ ;
}
}
poly = PolyNext( poly );
}
}
else
{
poly = PolyTop();
while( poly != NULL )
{
if ( poly->select == ON )
{
if ( poly->select == ON )
{
poly->type &= ( ~ POLY_UV );
ObjData[poly->obj].edit = TRUE ;
}
}
poly = PolyNext( poly );
}
}
}