24 #include "../geometry/GridHelpers.h"
33 bool extensiveFEdgeSearch)
34 :
OccluderSource(
t, we), rejected(0), gridSpaceOccluderProsceniumInitialized(false)
40 valid = gridSpaceOccluderProsceniumInitialized;
42 if (
valid && !testCurrent()) {
47 bool CulledOccluderSource::testCurrent()
51 return gridSpaceOccluderProsceniumInitialized &&
66 std::cout <<
"Finished generating occluders. Rejected " << rejected <<
" faces." << std::endl;
73 for (
unsigned int i = 0; i < 4; ++i) {
74 proscenium[i] = gridSpaceOccluderProscenium[i];
85 Vec2r min(proscenium[0], proscenium[2]);
86 Vec2r max(proscenium[1], proscenium[3]);
95 return !(point[0] < proscenium[0] || point[0] > proscenium[1] || point[1] < proscenium[2] ||
96 point[1] > proscenium[3]);
110 real viewProscenium[4];
112 real prosceniumOrigin[2];
113 prosceniumOrigin[0] = (viewProscenium[1] - viewProscenium[0]) / 2.0;
114 prosceniumOrigin[1] = (viewProscenium[3] - viewProscenium[2]) / 2.0;
116 cout <<
"Proscenium culling:" << endl;
117 cout <<
"Proscenium: [" << viewProscenium[0] <<
", " << viewProscenium[1] <<
", "
118 << viewProscenium[2] <<
", " << viewProscenium[3] <<
"]" << endl;
119 cout <<
"Origin: [" << prosceniumOrigin[0] <<
", " << prosceniumOrigin[1] <<
"]" << endl;
132 ViewMap::viewedges_container::iterator ve, veend;
134 for (ve = viewMap.
ViewEdges().begin(), veend = viewMap.
ViewEdges().end(); ve != veend; ve++) {
144 bool bestOccluderTargetFound =
false;
145 FEdge *bestOccluderTarget =
nullptr;
146 real bestOccluderDistance = 0.0;
147 FEdge *festart = (*ve)->fedgeA();
159 if (!bestOccluderTargetFound) {
164 expandGridSpaceOccluderProscenium(fe);
166 bestOccluderTargetFound =
true;
167 bestOccluderTarget = fe;
172 if (bestOccluderTarget ==
nullptr || d < bestOccluderDistance) {
174 bestOccluderDistance = d;
175 bestOccluderTarget = fe;
186 }
while (fe !=
nullptr && fe != festart && !(bestOccluderTargetFound && (*ve)->isInImage()));
197 if ((*ve)->isInImage() && bestOccluderTarget !=
nullptr && !bestOccluderTargetFound) {
200 if (point[0] < occluderProscenium[0]) {
201 occluderProscenium[0] = point[0];
203 else if (point[0] > occluderProscenium[1]) {
204 occluderProscenium[1] = point[0];
206 if (point[1] < occluderProscenium[2]) {
207 occluderProscenium[2] = point[1];
209 else if (point[1] > occluderProscenium[3]) {
210 occluderProscenium[3] = point[1];
220 occluderProscenium[0] -=
epsilon;
221 occluderProscenium[1] +=
epsilon;
222 occluderProscenium[2] -=
epsilon;
223 occluderProscenium[3] +=
epsilon;
235 if (extensiveFEdgeSearch) {
237 for (ve = viewMap.
ViewEdges().begin(), veend = viewMap.
ViewEdges().end(); ve != veend; ve++) {
238 if (!(*ve)->isInImage()) {
242 FEdge *festart = (*ve)->fedgeA();
249 expandGridSpaceOccluderProscenium(fe);
262 void CulledOccluderSource::expandGridSpaceOccluderProscenium(
FEdge *fe)
264 if (gridSpaceOccluderProsceniumInitialized) {
269 gridSpaceOccluderProscenium[0] = gridSpaceOccluderProscenium[1] = point[0];
270 gridSpaceOccluderProscenium[2] = gridSpaceOccluderProscenium[3] = point[1];
271 gridSpaceOccluderProsceniumInitialized =
true;
Class to define a cell grid surrounding the projected image of a scene.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
void getOccluderProscenium(real proscenium[4])
void cullViewEdges(ViewMap &viewMap, bool extensiveFEdgeSearch)
void setIsInImage(bool iFlag)
const GridHelpers::Transform & transform
virtual real getProjectedY() const
virtual real getProjectedX() const
viewedges_container & ViewEdges()
bool intersect2dSeg2dArea(const Vec2r &min, const Vec2r &max, const Vec2r &A, const Vec2r &B)
VecMat::Vec3< real > Vec3r
void getDefaultViewProscenium(real viewProscenium[4])
void expandProscenium(real proscenium[4], const Polygon3r &polygon)
bool insideProscenium(const real proscenium[4], const Polygon3r &polygon)
static real distance2D(const Vec3r &point, const real origin[2])
static bool insideProscenium(const real proscenium[4], const Vec3r &point)
static bool crossesProscenium(real proscenium[4], FEdge *fe)
INLINE Rall1d< T, V, S > hypot(const Rall1d< T, V, S > &y, const Rall1d< T, V, S > &x)