Loading openglcanvas.cpp +40 −33 Original line number Diff line number Diff line Loading @@ -22,6 +22,11 @@ #define VERT_SHADER_FILE "test_vertex_shader.vert" #define FRAG_SHADER_FILE "fragment_shader.frag" #define CONST_PI 3.141592653589793238462 #define CONST_PI_2 1.57079632679489661923 #define CONST_PI_F 3.14159265358979f #define CONST_PI_2_F 1.570796326794897f // TODO: check this one OpenGLCanvas::OpenGLCanvas(QWidget *parent) : QGLWidget(parent) { Loading Loading @@ -50,8 +55,8 @@ void OpenGLCanvas::change_fov(double f){ fov=f; if (fov<=fov_max) scale=1.f; else if (fov>295.f) scale = 0.02f; // TODO: check this value wrt fov_max //else if (fov>295.f) // scale = 0.02f; // TODO: check this value wrt fov_max else { if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading @@ -69,7 +74,7 @@ void OpenGLCanvas::change_fov(double f){ // scale = 0.3f; fprintf(stderr,"change fov=%f, fov_max=%f\n",fov,fov_max); fprintf(stderr,"change fov, fov=%f, fov_max=%f, scale=%f\n",fov,fov_max,scale); emit fov_changed((int)fov); updateGL(); Loading @@ -77,15 +82,17 @@ void OpenGLCanvas::change_fov(double f){ } void OpenGLCanvas::change_fov(int new_fov){ if(new_fov<=360&&new_fov>=1) change_fov((double)new_fov); } void OpenGLCanvas::change_fov_max(int new_fov_max){ if(new_fov_max<=360&&new_fov_max>=0) fov_max=(double)new_fov_max; if (fov<=fov_max) scale=1.f; else if (fov>295.f) scale = 0.02f; // TODO: check this value wrt fov_max //else if (fov>295.f) // scale = 0.02f; // TODO: check this value wrt fov_max else { if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading @@ -100,7 +107,7 @@ void OpenGLCanvas::change_fov_max(int new_fov_max){ else if (fov_scale_relation == "Logarithm") scale=log(exp(1.f)+(1.f-exp(1.f))*(fov-fov_max)/(360.-2*fov_max)); } fprintf(stderr,"change fov_max=%f, new scale=%f\n",fov_max,scale); fprintf(stderr,"change fov_max, fov=%f, fov_max=%f, new scale=%f\n",fov,fov_max,scale); emit max_fov_changed((int)fov_max); updateGL(); } Loading @@ -114,7 +121,7 @@ void OpenGLCanvas::change_fov_max(int new_fov_max){ void OpenGLCanvas::change_center_lambda(double lambda){ if (center_lambda!=lambda && lambda>=-3.14f && lambda<=3.14f) { if (center_lambda!=lambda && lambda>=-CONST_PI && lambda<=CONST_PI) { center_lambda = lambda; updateGL(); } Loading @@ -123,7 +130,7 @@ void OpenGLCanvas::change_center_lambda(double lambda){ void OpenGLCanvas::change_center_phi(double phi){ if (center_phi!=phi && phi>=-1.57f && phi<=1.57f) { if (center_phi!=phi && phi>=-CONST_PI_2 && phi<=CONST_PI_2) { center_phi = phi; updateGL(); } Loading @@ -139,8 +146,8 @@ void OpenGLCanvas::re_center(){ void OpenGLCanvas::change_fov_scale_relation(QString name){ fov_scale_relation = name; if (fov<60.f) scale = 1.f; else if (fov>295.f) scale = 0.01f; if (fov<fov_max) scale = 1.f; //else if (fov>295.f) scale = 0.01f; else{ if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading Loading @@ -278,7 +285,7 @@ void OpenGLCanvas::initializeGL(){ if (texCoord == NULL){ printf("problem allocating memory for texture coordinates \n"); } define_texture_coordinates(texCoord, m, n, -1.57f, 1.57f, -3.14f, 3.14f); define_texture_coordinates(texCoord, m, n, -CONST_PI_2_F, CONST_PI_2_F, -CONST_PI_F, CONST_PI_F); //defining positions of the sphere vertices int meshNumVertices = m*n; Loading Loading @@ -311,8 +318,8 @@ void OpenGLCanvas::define_texture_coordinates(float *texCoord, int m, int n, flo for (int i = 0; i<m; i++){ for (int j = 0; j<n; j++){ texCoord[2*(j+i*n)] = (min_lambda+delta_lambda*j)/(6.2832) + 0.5; texCoord[2*(j+i*n)+1] = (min_phi+delta_phi*i)/(3.1416) + 0.5; texCoord[2*(j+i*n)] = (min_lambda+delta_lambda*j)/(2*CONST_PI_F) + 0.5; texCoord[2*(j+i*n)+1] = (min_phi+delta_phi*i)/(CONST_PI_F) + 0.5; } } Loading @@ -320,10 +327,10 @@ void OpenGLCanvas::define_texture_coordinates(float *texCoord, int m, int n, flo void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float center_lambda, float center_phi, float fov_rads, float scale){ float min_lambda = -3.1415f; float max_lambda = 3.1415f; float min_phi = -1.5708f; float max_phi = 1.5708f; float min_lambda = -CONST_PI_F; float max_lambda = CONST_PI_F; float min_phi = -CONST_PI_2_F; float max_phi = CONST_PI_2_F; float delta_lambda = (max_lambda-min_lambda)/(1.0*(n-1)); float delta_phi = (max_phi-min_phi)/(1.0*(m-1)); Loading Loading @@ -391,8 +398,8 @@ void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float c y = (4.f*v)/(u*u+v*v+4.f); z = (u*u+v*v-4.f)/(u*u+v*v+4.f); lambda = atan2(x,-z)/3.1415; phi = asin(y)/1.5708; lambda = atan2(x,-z)/CONST_PI_F; phi = asin(y)/CONST_PI_2_F; u = x/(-z); v = y/(-z); Loading Loading @@ -422,10 +429,10 @@ void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float c void OpenGLCanvas::load_sphere_mesh(float *positions, int m, int n){ float min_lambda = -3.1415f; float max_lambda = 3.1415f; float min_phi = -1.5708f; float max_phi = 1.5708f; float min_lambda = -CONST_PI_F; float max_lambda = CONST_PI_F; float min_phi = -CONST_PI_2_F; float max_phi = CONST_PI_2_F; float delta_lambda = (max_lambda-min_lambda)/(1.0*(n-1)); float delta_phi = (max_phi-min_phi)/(1.0*(m-1)); Loading Loading @@ -454,24 +461,24 @@ void OpenGLCanvas::load_sphere_mesh(float *positions, int m, int n){ float OpenGLCanvas::calculate_extent(float fov_rads){ float lambda, phi, x, y, z, u, v, r, theta; double lambda, phi, x, y, z, u, v, r, theta; //calculating the extent of the projection for the given FOV lambda = fov_rads; phi = 0.f; phi = 0.; // OpenGL: x is the vertical axes pointg downwards, and y is horizontal axes y = sin(phi); x = -sin(lambda)*cos(phi); z = -cos(lambda)*cos(phi); u = 2.f*x/(-z+1.f); v = 2.f*y/(-z+1.f); u = 2.*x/(-z+1.); v = 2.*y/(-z+1.); r = sqrt(u*u+v*v); theta = atan2(u,v); r *= scale; u = -r*sin(theta); v = r*cos(theta); x = (4.f*u)/(u*u+v*v+4.f); y = (4.f*v)/(u*u+v*v+4.f); z = (u*u+v*v-4.f)/(u*u+v*v+4.f); x = (4.*u)/(u*u+v*v+4.); y = (4.*v)/(u*u+v*v+4.); z = (u*u+v*v-4.)/(u*u+v*v+4.); u = x/(-z); v = y/(-z); return u; Loading Loading @@ -670,8 +677,8 @@ void OpenGLCanvas::mouseMoveEvent(QMouseEvent *event){ // scroll with the left button if(event->buttons()==Qt::LeftButton){ // compute the delta and move the image center_lambda+=(event->x()-lastPos.x())*3.1415926f/image_size_x; center_phi+=(event->y()-lastPos.y())*3.1415926f/image_size_y; center_lambda+=(event->x()-lastPos.x())*CONST_PI_F/image_size_x; center_phi+=(event->y()-lastPos.y())*CONST_PI_F/image_size_y; lastPos=event->pos(); updateGL(); } Loading @@ -689,7 +696,7 @@ void OpenGLCanvas::wheelEvent(QWheelEvent *event){ void OpenGLCanvas::paintGL(){ float fov_rads = (fov/180.f)*1.5708f; float fov_rads = (fov/360.)*CONST_PI; // // changing scale to generate the figures for the paper (remove it after) // scale = 0.8; Loading Loading
openglcanvas.cpp +40 −33 Original line number Diff line number Diff line Loading @@ -22,6 +22,11 @@ #define VERT_SHADER_FILE "test_vertex_shader.vert" #define FRAG_SHADER_FILE "fragment_shader.frag" #define CONST_PI 3.141592653589793238462 #define CONST_PI_2 1.57079632679489661923 #define CONST_PI_F 3.14159265358979f #define CONST_PI_2_F 1.570796326794897f // TODO: check this one OpenGLCanvas::OpenGLCanvas(QWidget *parent) : QGLWidget(parent) { Loading Loading @@ -50,8 +55,8 @@ void OpenGLCanvas::change_fov(double f){ fov=f; if (fov<=fov_max) scale=1.f; else if (fov>295.f) scale = 0.02f; // TODO: check this value wrt fov_max //else if (fov>295.f) // scale = 0.02f; // TODO: check this value wrt fov_max else { if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading @@ -69,7 +74,7 @@ void OpenGLCanvas::change_fov(double f){ // scale = 0.3f; fprintf(stderr,"change fov=%f, fov_max=%f\n",fov,fov_max); fprintf(stderr,"change fov, fov=%f, fov_max=%f, scale=%f\n",fov,fov_max,scale); emit fov_changed((int)fov); updateGL(); Loading @@ -77,15 +82,17 @@ void OpenGLCanvas::change_fov(double f){ } void OpenGLCanvas::change_fov(int new_fov){ if(new_fov<=360&&new_fov>=1) change_fov((double)new_fov); } void OpenGLCanvas::change_fov_max(int new_fov_max){ if(new_fov_max<=360&&new_fov_max>=0) fov_max=(double)new_fov_max; if (fov<=fov_max) scale=1.f; else if (fov>295.f) scale = 0.02f; // TODO: check this value wrt fov_max //else if (fov>295.f) // scale = 0.02f; // TODO: check this value wrt fov_max else { if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading @@ -100,7 +107,7 @@ void OpenGLCanvas::change_fov_max(int new_fov_max){ else if (fov_scale_relation == "Logarithm") scale=log(exp(1.f)+(1.f-exp(1.f))*(fov-fov_max)/(360.-2*fov_max)); } fprintf(stderr,"change fov_max=%f, new scale=%f\n",fov_max,scale); fprintf(stderr,"change fov_max, fov=%f, fov_max=%f, new scale=%f\n",fov,fov_max,scale); emit max_fov_changed((int)fov_max); updateGL(); } Loading @@ -114,7 +121,7 @@ void OpenGLCanvas::change_fov_max(int new_fov_max){ void OpenGLCanvas::change_center_lambda(double lambda){ if (center_lambda!=lambda && lambda>=-3.14f && lambda<=3.14f) { if (center_lambda!=lambda && lambda>=-CONST_PI && lambda<=CONST_PI) { center_lambda = lambda; updateGL(); } Loading @@ -123,7 +130,7 @@ void OpenGLCanvas::change_center_lambda(double lambda){ void OpenGLCanvas::change_center_phi(double phi){ if (center_phi!=phi && phi>=-1.57f && phi<=1.57f) { if (center_phi!=phi && phi>=-CONST_PI_2 && phi<=CONST_PI_2) { center_phi = phi; updateGL(); } Loading @@ -139,8 +146,8 @@ void OpenGLCanvas::re_center(){ void OpenGLCanvas::change_fov_scale_relation(QString name){ fov_scale_relation = name; if (fov<60.f) scale = 1.f; else if (fov>295.f) scale = 0.01f; if (fov<fov_max) scale = 1.f; //else if (fov>295.f) scale = 0.01f; else{ if (fov_scale_relation == "Naive") scale=fov_max/fov; Loading Loading @@ -278,7 +285,7 @@ void OpenGLCanvas::initializeGL(){ if (texCoord == NULL){ printf("problem allocating memory for texture coordinates \n"); } define_texture_coordinates(texCoord, m, n, -1.57f, 1.57f, -3.14f, 3.14f); define_texture_coordinates(texCoord, m, n, -CONST_PI_2_F, CONST_PI_2_F, -CONST_PI_F, CONST_PI_F); //defining positions of the sphere vertices int meshNumVertices = m*n; Loading Loading @@ -311,8 +318,8 @@ void OpenGLCanvas::define_texture_coordinates(float *texCoord, int m, int n, flo for (int i = 0; i<m; i++){ for (int j = 0; j<n; j++){ texCoord[2*(j+i*n)] = (min_lambda+delta_lambda*j)/(6.2832) + 0.5; texCoord[2*(j+i*n)+1] = (min_phi+delta_phi*i)/(3.1416) + 0.5; texCoord[2*(j+i*n)] = (min_lambda+delta_lambda*j)/(2*CONST_PI_F) + 0.5; texCoord[2*(j+i*n)+1] = (min_phi+delta_phi*i)/(CONST_PI_F) + 0.5; } } Loading @@ -320,10 +327,10 @@ void OpenGLCanvas::define_texture_coordinates(float *texCoord, int m, int n, flo void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float center_lambda, float center_phi, float fov_rads, float scale){ float min_lambda = -3.1415f; float max_lambda = 3.1415f; float min_phi = -1.5708f; float max_phi = 1.5708f; float min_lambda = -CONST_PI_F; float max_lambda = CONST_PI_F; float min_phi = -CONST_PI_2_F; float max_phi = CONST_PI_2_F; float delta_lambda = (max_lambda-min_lambda)/(1.0*(n-1)); float delta_phi = (max_phi-min_phi)/(1.0*(m-1)); Loading Loading @@ -391,8 +398,8 @@ void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float c y = (4.f*v)/(u*u+v*v+4.f); z = (u*u+v*v-4.f)/(u*u+v*v+4.f); lambda = atan2(x,-z)/3.1415; phi = asin(y)/1.5708; lambda = atan2(x,-z)/CONST_PI_F; phi = asin(y)/CONST_PI_2_F; u = x/(-z); v = y/(-z); Loading Loading @@ -422,10 +429,10 @@ void OpenGLCanvas::vertex_transformation(float *positions, int m, int n, float c void OpenGLCanvas::load_sphere_mesh(float *positions, int m, int n){ float min_lambda = -3.1415f; float max_lambda = 3.1415f; float min_phi = -1.5708f; float max_phi = 1.5708f; float min_lambda = -CONST_PI_F; float max_lambda = CONST_PI_F; float min_phi = -CONST_PI_2_F; float max_phi = CONST_PI_2_F; float delta_lambda = (max_lambda-min_lambda)/(1.0*(n-1)); float delta_phi = (max_phi-min_phi)/(1.0*(m-1)); Loading Loading @@ -454,24 +461,24 @@ void OpenGLCanvas::load_sphere_mesh(float *positions, int m, int n){ float OpenGLCanvas::calculate_extent(float fov_rads){ float lambda, phi, x, y, z, u, v, r, theta; double lambda, phi, x, y, z, u, v, r, theta; //calculating the extent of the projection for the given FOV lambda = fov_rads; phi = 0.f; phi = 0.; // OpenGL: x is the vertical axes pointg downwards, and y is horizontal axes y = sin(phi); x = -sin(lambda)*cos(phi); z = -cos(lambda)*cos(phi); u = 2.f*x/(-z+1.f); v = 2.f*y/(-z+1.f); u = 2.*x/(-z+1.); v = 2.*y/(-z+1.); r = sqrt(u*u+v*v); theta = atan2(u,v); r *= scale; u = -r*sin(theta); v = r*cos(theta); x = (4.f*u)/(u*u+v*v+4.f); y = (4.f*v)/(u*u+v*v+4.f); z = (u*u+v*v-4.f)/(u*u+v*v+4.f); x = (4.*u)/(u*u+v*v+4.); y = (4.*v)/(u*u+v*v+4.); z = (u*u+v*v-4.)/(u*u+v*v+4.); u = x/(-z); v = y/(-z); return u; Loading Loading @@ -670,8 +677,8 @@ void OpenGLCanvas::mouseMoveEvent(QMouseEvent *event){ // scroll with the left button if(event->buttons()==Qt::LeftButton){ // compute the delta and move the image center_lambda+=(event->x()-lastPos.x())*3.1415926f/image_size_x; center_phi+=(event->y()-lastPos.y())*3.1415926f/image_size_y; center_lambda+=(event->x()-lastPos.x())*CONST_PI_F/image_size_x; center_phi+=(event->y()-lastPos.y())*CONST_PI_F/image_size_y; lastPos=event->pos(); updateGL(); } Loading @@ -689,7 +696,7 @@ void OpenGLCanvas::wheelEvent(QWheelEvent *event){ void OpenGLCanvas::paintGL(){ float fov_rads = (fov/180.f)*1.5708f; float fov_rads = (fov/360.)*CONST_PI; // // changing scale to generate the figures for the paper (remove it after) // scale = 0.8; Loading