PerspectiveCamera::PerspectiveCamera(float fieldOfView, float aspectRatio, float nearPlane, float farPlane) : Camera(), m_fieldOfView(fieldOfView), m_aspectRatio(aspectRatio), m_nearPlane(nearPlane), m_farPlane(farPlane) { calculateProjectionMatrix(); }
/** * Projects a point in real world coordinates against the image * Output: image coordinate in pixels */ CvPoint MultipleViewGeomOld::getProjectionOf(float angle, CvPoint3D32f point) { // map<float, CvMat*>::iterator iter = projMatList.find(angle); CvMat *projMat = cvCreateMat(4, 3, CV_32FC1); if (iter == projMatList.end()) { // project matrix does not exist!! // Calculate rotation matrix CvMat* rtMat = calculateRotationMatrix(angle); // Calculate projection matrix projMat = calculateProjectionMatrix(rtMat); projMat = cvCloneMat(projMat); projMatList.insert(pair<float, CvMat*> (angle, projMat)); } else { // otherwise it exists projMat = iter->second; } LOG4CPLUS_DEBUG(myLogger,"Projection matrix for angle: " << radToDegree(angle) << " and points: " << point << endl << printCvMat(projMat)); // [u v 1] = proj * [X Y Z 1] float uvContents[3]; //CvMat* uvMat = cvMat(3, 1, CV_32F, uvContents); CvMat* uvMat = cvCreateMat(3, 1, CV_32F); cvInitMatHeader(uvMat, 3, 1, CV_32F, uvContents); float xyzContents[] = { point.x, point.y, point.z, 1 }; //CvMat* xyzMat = cvMat(4, 1, CV_32F, xyzContents); CvMat* xyzMat = cvCreateMat(4, 1, CV_32F); cvInitMatHeader(xyzMat, 4, 1, CV_32F, xyzContents); cvMatMul (projMat, xyzMat,uvMat); LOG4CPLUS_DEBUG(myLogger, "Result [u v 1] = proj * [X Y Z 1]: " << endl << printCvMat(uvMat)); return cvPoint(cvRound(cvmGet(uvMat, 0, 0)), cvRound(cvmGet(uvMat, 1, 0))); }
Camera::Camera(glm::vec3 sceneDimensions): _angX(0), _angY(0), _locked(true), _interpolate(false), _attached(nullptr), _radius(2.0f) { _model = glm::scale(glm::mat4(), glm::vec3(2 / sceneDimensions[0], 2 / sceneDimensions[1], 2 / sceneDimensions[2])); _vup = glm::vec3(0, 1, 0); _dir = glm::vec3(-1, -1, 0); // _vrp = (0, 0, 0) = (1, 1, 0) + (-1, -1, 0) _obs = glm::vec3(1, 1, 0); _aspect = 4.0f/ 3.0f; calculateViewMatrix(); calculateProjectionMatrix(); }
void PerspectiveCamera::setFarPlane(float farPlane) { m_farPlane = farPlane; calculateProjectionMatrix(); }
void PerspectiveCamera::setNearPlane(float nearPlane) { m_nearPlane = nearPlane; calculateProjectionMatrix(); }
void PerspectiveCamera::setAspectRatio(float aspectRatio) { m_aspectRatio = aspectRatio; calculateProjectionMatrix(); }
void PerspectiveCamera::setFieldOfView(float angle) { m_fieldOfView = angle; calculateProjectionMatrix(); }
//============================================================================== Mat4 PerspectiveFrustum::calculateProjectionMatrix() const { Mat4 projectionMat; calculateProjectionMatrix(m_fovX, m_fovY, m_near, m_far, projectionMat); return projectionMat; }
glm::mat4 Camera::getProjectionMatrix(){ return calculateProjectionMatrix(); }