@@ -57,9 +57,9 @@ void CameraKeyframes::read(Input& input)
5757 }
5858
5959 // read scale key frames
60- uint32_t num_projections = input.readValue <uint32_t >(" projections " );
61- projections .resize (num_projections );
62- for (auto & scale : projections )
60+ uint32_t num_fieldOfViews = input.readValue <uint32_t >(" fieldOfViews " );
61+ fieldOfViews .resize (num_fieldOfViews );
62+ for (auto & scale : fieldOfViews )
6363 {
6464 input.matchPropertyName (" projection" );
6565 input.read (1 , &scale.time );
@@ -94,8 +94,8 @@ void CameraKeyframes::write(Output& output) const
9494 }
9595
9696 // write scale key frames
97- output.writeValue <uint32_t >(" projections " , projections .size ());
98- for (const auto & scale : projections )
97+ output.writeValue <uint32_t >(" fieldOfViews " , fieldOfViews .size ());
98+ for (const auto & scale : fieldOfViews )
9999 {
100100 output.writePropertyName (" projection" );
101101 output.write (1 , &scale.time );
@@ -104,50 +104,6 @@ void CameraKeyframes::write(Output& output) const
104104 }
105105}
106106
107- template <typename T, typename V>
108- bool sample (double time, const T& values, V& value)
109- {
110- if (values.size () == 0 ) return false ;
111-
112- if (values.size () == 1 )
113- {
114- value = values.front ().value ;
115- return true ;
116- }
117-
118- auto pos_itr = values.begin ();
119- if (time <= pos_itr->time )
120- {
121- value = pos_itr->value ;
122- return true ;
123- }
124- else
125- {
126- using value_type = typename T::value_type;
127- pos_itr = std::lower_bound (values.begin (), values.end (), time, [](const value_type& elem, double t) -> bool { return elem.time < t; });
128-
129- if (pos_itr == values.begin ())
130- {
131- value = values.front ().value ;
132- return true ;
133- }
134-
135- if (pos_itr == values.end ())
136- {
137- value = values.back ().value ;
138- return true ;
139- }
140-
141- auto before_pos_itr = pos_itr - 1 ;
142- double delta_time = (pos_itr->time - before_pos_itr->time );
143- double r = delta_time != 0.0 ? (time - before_pos_itr->time ) / delta_time : 0.5 ;
144-
145- value = mix (before_pos_itr->value , pos_itr->value , r);
146-
147- return true ;
148- }
149- }
150-
151107// //////////////////////////////////////////////////////////////////////////////////////////////////
152108//
153109// CameraSampler
@@ -156,7 +112,8 @@ CameraSampler::CameraSampler() :
156112 origin(0.0 , 0.0 , 0.0 ),
157113 position(0.0 , 0.0 , 0.0 ),
158114 rotation(),
159- projection(60.0 , 0.1 , 1000.0 )
115+ fieldOfView(60.0 ),
116+ nearFar(1.0 , 1e10 )
160117{
161118}
162119
@@ -166,7 +123,8 @@ CameraSampler::CameraSampler(const CameraSampler& rhs, const CopyOp& copyop) :
166123 object(copyop(rhs.object)),
167124 position(rhs.position),
168125 rotation(rhs.rotation),
169- projection(rhs.projection)
126+ fieldOfView(rhs.fieldOfView),
127+ nearFar(rhs.nearFar)
170128{
171129}
172130
@@ -187,7 +145,8 @@ void CameraSampler::update(double time)
187145 sample (time, keyframes->origins , origin);
188146 sample (time, keyframes->positions , position);
189147 sample (time, keyframes->rotations , rotation);
190- sample (time, keyframes->projections , projection);
148+ sample (time, keyframes->fieldOfViews , fieldOfView);
149+ sample (time, keyframes->nearFars , nearFar);
191150 }
192151
193152 if (object) object->accept (*this );
@@ -201,7 +160,8 @@ double CameraSampler::maxTime() const
201160 if (!keyframes->origins .empty ()) maxTime = std::max (maxTime, keyframes->origins .back ().time );
202161 if (!keyframes->positions .empty ()) maxTime = std::max (maxTime, keyframes->positions .back ().time );
203162 if (!keyframes->rotations .empty ()) maxTime = std::max (maxTime, keyframes->rotations .back ().time );
204- if (!keyframes->projections .empty ()) maxTime = std::max (maxTime, keyframes->projections .back ().time );
163+ if (!keyframes->fieldOfViews .empty ()) maxTime = std::max (maxTime, keyframes->fieldOfViews .back ().time );
164+ if (!keyframes->nearFars .empty ()) maxTime = std::max (maxTime, keyframes->nearFars .back ().time );
205165 }
206166
207167 return maxTime;
@@ -221,7 +181,6 @@ void CameraSampler::apply(LookAt& lookAt)
221181{
222182 if (keyframes)
223183 {
224- vsg::info (" CameraSampler::apply(LookAt&)" );
225184 if (!keyframes->origins .empty ()) lookAt.origin = origin;
226185 if (!keyframes->positions .empty () || !keyframes->rotations .empty ())
227186 {
@@ -234,7 +193,6 @@ void CameraSampler::apply(LookDirection& lookDirection)
234193{
235194 if (keyframes)
236195 {
237- vsg::info (" CameraSampler::apply(LookDirection&)" );
238196 if (!keyframes->origins .empty ()) lookDirection.origin = origin;
239197 if (!keyframes->positions .empty ()) lookDirection.position = position;
240198 if (!keyframes->rotations .empty ()) lookDirection.rotation = rotation;
@@ -243,12 +201,14 @@ void CameraSampler::apply(LookDirection& lookDirection)
243201
244202void CameraSampler::apply (Perspective& perspective)
245203{
246- if (keyframes && !keyframes->projections .empty ())
204+ if (keyframes && !keyframes->fieldOfViews .empty ())
205+ {
206+ perspective.fieldOfViewY = fieldOfView;
207+ }
208+ if (keyframes && !keyframes->nearFars .empty ())
247209 {
248- vsg::info (" CameraSampler::apply(Perspective&)" );
249- perspective.fieldOfViewY = projection.x ;
250- perspective.nearDistance = projection.y ;
251- perspective.farDistance = projection.z ;
210+ perspective.nearDistance = nearFar[0 ];
211+ perspective.farDistance = nearFar[1 ];
252212 }
253213}
254214
0 commit comments