@@ -33,13 +33,13 @@ void VoxelGrid::clear() {
33
33
voxels_[idx].labels .clear ();
34
34
}
35
35
36
- for (auto idx : occluded_) {
37
- voxels_[idx].count = 0 ;
38
- voxels_[idx].labels .clear ();
39
- }
36
+ // for (auto idx : occluded_) {
37
+ // voxels_[idx].count = 0;
38
+ // voxels_[idx].labels.clear();
39
+ // }
40
40
41
41
occupied_.clear ();
42
- occluded_.clear ();
42
+ // occluded_.clear();
43
43
}
44
44
45
45
void VoxelGrid::insert (const Eigen::Vector4f& p, uint32_t label) {
@@ -98,7 +98,9 @@ void VoxelGrid::updateOcclusions() {
98
98
uint32_t occludedByCalls = 0 ;
99
99
100
100
// move from outer to inner voxels.
101
- for (uint32_t o = 0 ; o < sizex_; ++o) {
101
+ uint32_t num_shells = std::min<uint32_t >(sizex_, std::ceil (0.5 * sizey_));
102
+
103
+ for (uint32_t o = 0 ; o < num_shells; ++o) {
102
104
uint32_t i = sizex_ - o - 1 ;
103
105
104
106
for (uint32_t j = 0 ; j < sizey_; ++j) {
@@ -109,37 +111,42 @@ void VoxelGrid::updateOcclusions() {
109
111
occludedBy_[idx] = occludedBy (i, j, k);
110
112
}
111
113
occlusions_[idx] = occludedBy_[idx];
112
- if (occlusions_[idx] != idx) occluded_.push_back (idx);
114
+ // if (occlusions_[idx] != idx) occluded_.push_back(idx);
113
115
}
114
116
}
115
117
116
118
uint32_t j = o;
117
- for (uint32_t i = 0 ; i < sizex_ - o; ++i) {
119
+ for (uint32_t i = 0 ; i < sizex_ - o - 1 ; ++i) {
118
120
for (uint32_t k = 0 ; k < sizez_; ++k) {
119
121
int32_t idx = index (i, j, k);
120
122
if (occludedBy_[idx] == -2 ) {
121
123
occludedByCalls += 1 ;
122
124
occludedBy_[idx] = occludedBy (i, j, k);
123
125
}
124
126
occlusions_[idx] = occludedBy_[idx];
125
- if (occlusions_[idx] != idx) occluded_.push_back (idx);
127
+ // if (occlusions_[idx] != idx) occluded_.push_back(idx);
126
128
}
127
129
}
128
130
129
131
j = sizey_ - o - 1 ;
130
- for (uint32_t i = 0 ; i < sizex_ - o; ++i) {
132
+ for (uint32_t i = 0 ; i < sizex_ - o - 1 ; ++i) {
131
133
for (uint32_t k = 0 ; k < sizez_; ++k) {
132
134
int32_t idx = index (i, j, k);
133
135
if (occludedBy_[idx] == -2 ) {
134
136
occludedByCalls += 1 ;
135
137
occludedBy_[idx] = occludedBy (i, j, k);
136
138
}
137
139
occlusions_[idx] = occludedBy_[idx];
138
- if (occlusions_[idx] != idx) occluded_.push_back (idx);
140
+ // if (occlusions_[idx] != idx) occluded_.push_back(idx);
139
141
}
140
142
}
141
143
}
142
144
145
+ // sanity check:
146
+ for (uint32_t i = 0 ; i < occludedBy_.size (); ++i) {
147
+ if (occludedBy_[i] == -2 ) std::cout << " occludedBy == -2" << std::endl;
148
+ }
149
+
143
150
// for (uint32_t i = 0; i < sizex_; ++i) {
144
151
// for (uint32_t j = 0; j < sizey_; ++j) {
145
152
// for (uint32_t k = 0; k < sizez_; ++k) {
@@ -166,7 +173,9 @@ void VoxelGrid::updateInvalid(const Eigen::Vector3f& position) {
166
173
std::fill (occludedBy_.begin (), occludedBy_.end (), -2 );
167
174
168
175
// move from outer to inner voxels.
169
- for (uint32_t o = 0 ; o < sizex_; ++o) {
176
+ uint32_t num_shells = std::min<uint32_t >(sizex_, std::ceil (0.5 * sizey_));
177
+
178
+ for (uint32_t o = 0 ; o < num_shells; ++o) {
170
179
uint32_t i = sizex_ - o - 1 ;
171
180
172
181
for (uint32_t j = 0 ; j < sizey_; ++j) {
@@ -182,7 +191,7 @@ void VoxelGrid::updateInvalid(const Eigen::Vector3f& position) {
182
191
}
183
192
184
193
uint32_t j = o;
185
- for (uint32_t i = 0 ; i < sizex_ - o; ++i) {
194
+ for (uint32_t i = 0 ; i < sizex_ - o - 1 ; ++i) {
186
195
for (uint32_t k = 0 ; k < sizez_; ++k) {
187
196
int32_t idx = index (i, j, k);
188
197
if (invalid_[idx] == -1 ) continue ; // just skip. invalid cannot be less then -1.
@@ -195,7 +204,7 @@ void VoxelGrid::updateInvalid(const Eigen::Vector3f& position) {
195
204
}
196
205
197
206
j = sizey_ - o - 1 ;
198
- for (uint32_t i = 0 ; i < sizex_ - o; ++i) {
207
+ for (uint32_t i = 0 ; i < sizex_ - o - 1 ; ++i) {
199
208
for (uint32_t k = 0 ; k < sizez_; ++k) {
200
209
int32_t idx = index (i, j, k);
201
210
if (invalid_[idx] == -1 ) continue ; // just skip. invalid cannot be less then -1.
@@ -208,6 +217,8 @@ void VoxelGrid::updateInvalid(const Eigen::Vector3f& position) {
208
217
}
209
218
}
210
219
220
+
221
+
211
222
// for (uint32_t x = 0; x < sizex_; ++x) {
212
223
// for (uint32_t y = 0; y < sizey_; ++y) {
213
224
// for (uint32_t z = 0; z < sizez_; ++z) {
0 commit comments