diff --git a/wrap/gui/frustum.h b/wrap/gui/frustum.h index 72e25c25..3b00757c 100644 --- a/wrap/gui/frustum.h +++ b/wrap/gui/frustum.h @@ -65,7 +65,8 @@ namespace vcg { template class Frustum: public View { public: - void GetView(); + void GetView(); + void SetView(const float *_proj, const float *_modelview, const int *_viewport); Point3 ViewPoint(); T Resolution(float dist = 1); bool IsOutside(Point3 &point); @@ -76,7 +77,8 @@ public: protected: T resolution; Plane3 planes[6]; - Point3 view_point; + Point3 view_point; + void UpdateView(); }; @@ -137,7 +139,16 @@ template T Frustum::Distance(Point3 &point, int plane) { template void Frustum::GetView() { View::GetView(); - + UpdateView(); +} +template void Frustum::SetView(const float *_proj = NULL, + const float *_modelview = NULL, + const int *_viewport = NULL) { + View::SetView(_proj, _modelview, _viewport); + UpdateView(); +} + +template void Frustum::UpdateView() { float t = (float)(View::viewport[1] +View:: viewport[3]); float b = (float)View::viewport[1]; float r = (float)(View::viewport[0] + View::viewport[2]); diff --git a/wrap/gui/view.h b/wrap/gui/view.h index 4381a17f..c665142f 100644 --- a/wrap/gui/view.h +++ b/wrap/gui/view.h @@ -109,7 +109,7 @@ Note: mainly it is used only by the TrackBall. template class View { public: void GetView(); - void SetView(); + void SetView(const float *_proj, const float *_modelview, const int *_viewport); Point3 Project(const Point3 &p) const; Point3 UnProject(const Point3 &p) const; Point3 ViewPoint() const; @@ -146,8 +146,19 @@ template void View::GetView() { Invert(inverse); } -template void View::SetView() { - +template void View::SetView(const float *_proj = NULL, + const float *_modelview = NULL, + const int *_viewport = NULL) { + for(int i = 0; i < 4; i++) { + for(int k =0; k < 4; k++) { + proj[i][k] = _proj[4*i+k]; + model[i][k] = _modelview[4*i+k]; + } + viewport[i] = _viewport[i]; + } + matrix = proj*model; + inverse = matrix; + Invert(inverse); } template Point3 View::ViewPoint() const {