MCPcopy Create free account
hub / github.com/cinder/Cinder / calcProjection

Method calcProjection

src/cinder/Camera.cpp:289–350  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

287}
288
289void CameraPersp::calcProjection() const
290{
291 mFrustumTop = mNearClip * math<float>::tan( (float)M_PI / 180.0f * mFov * 0.5f );
292 mFrustumBottom = -mFrustumTop;
293 mFrustumRight = mFrustumTop * mAspectRatio;
294 mFrustumLeft = -mFrustumRight;
295
296 // perform lens shift
297 if( mLensShift.y != 0.0f ) {
298 mFrustumTop = ci::lerp<float, float>(0.0f, 2.0f * mFrustumTop, 0.5f + 0.5f * mLensShift.y);
299 mFrustumBottom = ci::lerp<float, float>(2.0f * mFrustumBottom, 0.0f, 0.5f + 0.5f * mLensShift.y);
300 }
301
302 if( mLensShift.x != 0.0f ) {
303 mFrustumRight = ci::lerp<float, float>(2.0f * mFrustumRight, 0.0f, 0.5f - 0.5f * mLensShift.x);
304 mFrustumLeft = ci::lerp<float, float>(0.0f, 2.0f * mFrustumLeft, 0.5f - 0.5f * mLensShift.x);
305 }
306
307 mat4 &p = mProjectionMatrix;
308 p[0][0] = 2.0f * mNearClip / ( mFrustumRight - mFrustumLeft );
309 p[1][0] = 0.0f;
310 p[2][0] = ( mFrustumRight + mFrustumLeft ) / ( mFrustumRight - mFrustumLeft );
311 p[3][0] = 0.0f;
312
313 p[0][1] = 0.0f;
314 p[1][1] = 2.0f * mNearClip / ( mFrustumTop - mFrustumBottom );
315 p[2][1] = ( mFrustumTop + mFrustumBottom ) / ( mFrustumTop - mFrustumBottom );
316 p[3][1] = 0.0f;
317
318 p[0][2] = 0.0f;
319 p[1][2] = 0.0f;
320 p[2][2] = -( mFarClip + mNearClip ) / ( mFarClip - mNearClip );
321 p[3][2] = -2.0f * mFarClip * mNearClip / ( mFarClip - mNearClip );
322
323 p[0][3] = 0.0f;
324 p[1][3] = 0.0f;
325 p[2][3] = -1.0f;
326 p[3][3] = 0.0f;
327
328 mat4 &m = mInverseProjectionMatrix;
329 m[0][0] = ( mFrustumRight - mFrustumLeft ) / ( 2.0f * mNearClip );
330 m[1][0] = 0.0f;
331 m[2][0] = 0.0f;
332 m[3][0] = ( mFrustumRight + mFrustumLeft ) / ( 2.0f * mNearClip );
333
334 m[0][1] = 0.0f;
335 m[1][1] = ( mFrustumTop - mFrustumBottom ) / ( 2.0f * mNearClip );
336 m[2][1] = 0.0f;
337 m[3][1] = ( mFrustumTop + mFrustumBottom ) / ( 2.0f * mNearClip );
338
339 m[0][2] = 0.0f;
340 m[1][2] = 0.0f;
341 m[2][2] = 0.0f;
342 m[3][2] = -1.0f;
343
344 m[0][3] = 0.0f;
345 m[1][3] = 0.0f;
346 m[2][3] = -( mFarClip - mNearClip ) / ( 2.0f * mFarClip*mNearClip );

Callers 3

drawMethod · 0.45
calcScreenProjectionMethod · 0.45
mouseOnSphereFunction · 0.45

Calls 1

tanFunction · 0.85

Tested by

no test coverage detected