source: trunk/VUT/GtpVisibilityPreprocessor/src/Pvs.cpp @ 310

Revision 310, 2.7 KB checked in by mattausch, 19 years ago (diff)

updated input file behaviour. started to use pvs templates. removed raycast bugs

Line 
1#include <iostream>
2using namespace std;
3#include "Pvs.h"
4#include "Intersectable.h"
5
6
7/*
8int mypvs::AddSample(T *sample)
9{
10  int result;
11 
12  PvsData<typename T> *data = Find(sample);
13  if (data) {
14    data->mVisibleSamples++;
15    result = 0;
16  } else {
17    mEntries[node] = PvsData<typename T>(1);
18    result = 1;
19  }
20  return  result;
21}
22
23
24
25*/
26KdPvsData *
27KdPvs::Find(KdNode *node)
28{
29  KdPvsMap::iterator i = mEntries.find(node);
30  if (i != mEntries.end()) {
31    //    cout<<node<<" "<<(*i).first<<" "<<(*i).second.mVisibleSamples<<endl;
32    return &(*i).second;
33  } else
34    return NULL;
35}
36
37int
38KdPvs::AddNodeSample(KdNode *node)
39{
40  int result;
41 
42  KdPvsData *data = Find(node);
43  if (data) {
44    data->mVisibleSamples++;
45    result = 0;
46  } else {
47    mEntries[node] = KdPvsData(1);
48    result = 1;
49  }
50  return  result;
51}
52
53
54void
55KdPvs::GetData(const int index,
56               KdNode *&node,
57               KdPvsData &data
58               )
59{
60  KdPvsMap::iterator i = mEntries.begin();
61  for (int k = 0; k!=index && i != mEntries.end(); i++, k++);
62  node = (*i).first;
63  data = (*i).second;
64}
65
66BspPvsData *BspPvs::Find(BspNode *node)
67{
68        BspPvsMap::iterator i = mEntries.find(node);
69       
70        if (i != mEntries.end())
71        {
72                //    cout<<node<<" "<<(*i).first<<" "<<(*i).second.mVisibleSamples<<endl;
73                return &(*i).second;
74        }
75        else
76          return NULL;
77}
78
79// TODO: Get common ancestor for bsp and kd tree (HierarchyNode)
80int BspPvs::AddNodeSample(BspNode *node)
81{
82  int result;
83 
84  BspPvsData *data = Find(node);
85
86  if (data)
87  {
88          data->mVisibleSamples ++;
89          result = 0;
90  }
91  else
92  {
93          mEntries[node] = BspPvsData(1);
94          result = 1;
95  }
96
97  return  result;
98}
99
100
101void BspPvs::GetData(const int index, BspNode *&node, BspPvsData &data)
102{
103        BspPvsMap::iterator i = mEntries.begin();
104 
105        for (int k = 0; k!=index && i != mEntries.end(); i++, k++);
106
107        node = (*i).first;
108        data = (*i).second;
109}
110
111ViewCellPvsData *ViewCellPvs::Find(Intersectable *obj)
112{
113        ViewCellPvsMap::iterator i = mEntries.find(obj);
114       
115        if (i != mEntries.end())
116        {
117                //    cout<<node<<" "<<(*i).first<<" "<<(*i).second.mVisibleSamples<<endl;
118                return &(*i).second;
119        }
120        else
121          return NULL;
122}
123
124int ViewCellPvs::AddObject(Intersectable *obj)
125{
126        int result;
127 
128        ViewCellPvsData *data = Find(obj);
129
130        if (data)
131        {
132                data->mVisibleSamples ++;
133                result = 0;
134        }
135        else
136        {
137                mEntries[obj] = ViewCellPvsData(1);
138                result = 1;
139        }
140
141        return  result;
142}
143
144void ViewCellPvs::GetData(const int index, Intersectable *&obj, ViewCellPvsData &data)
145{
146        ViewCellPvsMap::iterator i = mEntries.begin();
147 
148        for (int k = 0; k!=index && i != mEntries.end(); i++, k++);
149
150        obj = (*i).first;
151        data = (*i).second;
152}
Note: See TracBrowser for help on using the repository browser.