-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPolygon.cpp
83 lines (69 loc) · 1.74 KB
/
Polygon.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/***********************************************
* $author: javery
* $date : 10 Nov 01
* $descp : Polygon data structure/supporting routines
* $path : C:\Program Files\Microsoft Visual Studio\MyProjects\KaosDemoEngine\Polygon.h
* $ver : 0.0.0
***********************************************/
#include "vector.h"
#include "polygon.h"
#include "util_common_h.h"
#include <memory.h>
void MTP_AllocTri( pPoly_t p )
{
p->pVerticies = new Vect3_t*[ 3 ];
p->bspNode = k_false;
p->bspFragment = k_false;
p->PolyFlag = PT_TRIANGULAR;
}
void MTP_AllocQuad( pPoly_t p )
{
p->pVerticies = new Vect3_t*[ 4 ];
p->bspNode = k_false;
p->bspFragment = k_false;
p->PolyFlag = PT_QUADRANGULAR;
}
void __inline MTP_SetVisible( pPoly_t p )
{
p->PolyFlag |= 0x0001;
}
void __inline MTP_ClearVisible( pPoly_t p )
{
p->PolyFlag |= 0x0000;
}
void __inline MTP_SetType( pPoly_t p )
{
p->PolyFlag |= 0x0002;
}
Vect3_t MTP_MakeNormal( pPoly_t p )
/* this relies on the age-old atage of consistent vector placement, be it CW/CCW ) */
{
Vect3_t thisNormal;
int a = PLY_FLG_TYPE(p->PolyFlag);
if( !PLY_FLG_TYPE( p->PolyFlag ) )
{
thisNormal = MTV_CrossProd( *(p->pVerticies[0]) , *(p->pVerticies[2]) );
}
else
{
thisNormal = MTV_CrossProd( *(p->pVerticies[0]) , *(p->pVerticies[3]) );
}
p->Normal = thisNormal;
return p->Normal;
}
/*
***************************************************
* MTP_IsVisible
* Determines if the passed polygon is visible
* from the specified vantage point.
***************************************************
*/
k_boolean MTP_IsVisible( pPoly_t p , Vect3_rt v )
{
return ( MTV_DotProd( p->Normal , v ) < 0 ) ?
( k_false ) : ( k_true );
}
pPoly_t MTP_AddPolygon( pPolySet_t pset , pPoly_t poly )
{
return (pPoly_t)(0);
}