-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMonoCamera.cpp
More file actions
44 lines (36 loc) · 1.33 KB
/
MonoCamera.cpp
File metadata and controls
44 lines (36 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
* MonoCamera.cpp
* 3d Ink
*
* Code provided by Geng Sun, Durham University
*/
#include<stdio.h>
#include <cmath>
#include "Camera.h"
void MonoCamera::setupFrustum(GLdouble nearDisplayBoundary, GLdouble farDisplayBoundary, GLdouble nearSceneBoundary, GLdouble farSceneBoundary) {
// only a single viewpoint
cameraSeperation = 0.0;
// calculate screen disparity ranges
double nearDisparity = eyeSeperation*(zViewing - nearDisplayBoundary)/nearDisplayBoundary;
double farDisparity = eyeSeperation*(farDisplayBoundary-zViewing)/farDisplayBoundary;
double ratio = nearDisparity/farDisparity;
// distance to the virtual display
sceneZ = (farSceneBoundary*nearSceneBoundary+farSceneBoundary*nearSceneBoundary*ratio)/(farSceneBoundary+nearSceneBoundary*ratio);
sceneWidth = sceneZ * tan(theta/2.0);
sceneHeight = sceneWidth * displayRatio;
monoTo = sceneZ;
// frustum
monoFrustum[0] = -nearSceneBoundary * sceneWidth / sceneZ;
monoFrustum[1] = nearSceneBoundary * sceneWidth / sceneZ;
monoFrustum[2] = -nearSceneBoundary * sceneHeight / sceneZ;
monoFrustum[3] = nearSceneBoundary * sceneHeight / sceneZ;
monoFrustum[4] = nearSceneBoundary;
monoFrustum[5] = farSceneBoundary;
Model::getInstance()->vAngle=theta;
}
double* MonoCamera::getMonoFrustum() {
return monoFrustum;
}
double MonoCamera::getMonoTo() {
return monoTo;
}