コード例 #1
0
ファイル: Camera.cpp プロジェクト: TheRyaz/c_reading
void Camera::updateCachedTransforms()
{
	m_worldToCamera = worldTransform().inverse();
	m_view = viewTransform();
	m_projection = projectionTransform();
	m_viewProjection = viewProjectionTransform();
}
コード例 #2
0
ファイル: MyGLWidget.cpp プロジェクト: elena20ruiz/IDILabs
void MyGLWidget::mouseMoveEvent(QMouseEvent *e)
{
  makeCurrent();
  // Aqui cal que es calculi i s'apliqui la rotacio o el zoom com s'escaigui...
  if (DoingInteractive == ROTATE)
  {
    // Fem la rotació
   //angleY += (e->x() - xClick) * M_PI / 2;

    angleX += (e->y() - yClick) * M_PI / 180.0;
    angleY += (e->x() - xClick) * M_PI / 180.0;

    viewTransform ();

  }

  //NOU_______________________________________
  if (DoingInteractive == ZOOM) {

      zoom += (e->y() - yClick)*0.001;
      projectTransform();

  }
  //NOU_________________________________________

  xClick = e->x();
  yClick = e->y();

  update ();
}
コード例 #3
0
ファイル: MyGLWidget.cpp プロジェクト: rodergas/IDI
void MyGLWidget::keyPressEvent (QKeyEvent *e)
{
  switch (e->key())
  {
    case Qt::Key_K:
      posF[0] -= 0.5;
      Llum();
      updateGL();
      break;
    case Qt::Key_L:
      posF[0] += 0.5;
      Llum();
      updateGL();
      break;
    case Qt::Key_R:
        angleY += 0.5;
        viewTransform();
        updateGL();
        break;
    case Qt::Key_Escape:
        exit(0);

    default: e->ignore(); break;
  }
  updateGL();
}
コード例 #4
0
ファイル: MyGLWidget.cpp プロジェクト: rodergas/IDI
void MyGLWidget::mouseMoveEvent(QMouseEvent *e){
    if(first){
        oldPos = e->pos();
        first = false;
    }else{
        dx = e->x() - oldPos.x();
        dy = e->y() - oldPos.y();
        if(dx < 0) dx *= -1;
        if(dy < 0) dy *= -1;

        switch(e->buttons()){
            case Qt::RightButton :
                if(dx > dy){
                    if(e->x() > oldPos.x()){
                        ax += 0.02;
                        viewTransform();
                        updateGL();
                    }
                    else {
                        ax -= 0.02;
                        viewTransform();
                        updateGL();
                    }
                }else{
                    if(e->y() > oldPos.y()){//me muevo para arriba
                        ay += 0.02;
                        viewTransform();
                        updateGL();
                     }
                    else{
                        ay -= 0.02;
                        viewTransform();
                        updateGL();
                    }
               }
            default: e->ignore();
            oldPos = e->pos();
        }
    }
}
コード例 #5
0
ファイル: MyGLWidget.cpp プロジェクト: ealch/IDI
void MyGLWidget::mouseMoveEvent(QMouseEvent *e){
  // Aqui cal que es calculi i s'apliqui la rotacio o el zoom com s'escaigui...
  if (DoingInteractive == ROTATE)   {
    // Fem la rotació
    angleY += (e->x() - xClick) * M_PI / 180.0;
    viewTransform ();
  }

  xClick = e->x();
  yClick = e->y();

  updateGL();
}
コード例 #6
0
ファイル: MyGLWidget.cpp プロジェクト: ealch/IDI
void MyGLWidget::initializeGL () {
  // glew és necessari per cridar funcions de les darreres versions d'OpenGL
  glewExperimental = GL_TRUE;
  glewInit(); 
  glGetError();  // Reinicia la variable d'error d'OpenGL

  glClearColor (0.5, 0.7, 1.0, 1.0);  // defineix color de fons (d'esborrat)
  glEnable(GL_DEPTH_TEST);
  carregaShaders();
  createBuffers();
  projectTransform();
  viewTransform();
}
コード例 #7
0
ファイル: MyGLWidget.cpp プロジェクト: vandalo/UNI
void MyGLWidget::keyPressEvent (QKeyEvent *e)
{
  switch (e->key())
  {
    case Qt::Key_Escape:
        exit(0);
    case Qt::Key_R:
      gir += M_PI/6.0;
      break;
    case Qt::Key_L:
        posX += 1;
        viewTransform();
        updateGL();
        break;
    case Qt::Key_K:
        posX -= 1;
        viewTransform();
        updateGL();
        break;
    default: e->ignore(); break;
  }
  updateGL();
}
コード例 #8
0
ファイル: MyGLWidget.cpp プロジェクト: elena20ruiz/IDILabs
void MyGLWidget::init_camera(){

    FOV = (float)M_PI/3.0f;
    ra = 1.0f;
    znear = 1.0;
    zfar = radiEsc*2+2;

    //Carreguem la projeccio del model
    projectTransform();

    OBS = glm::vec3(-1, 1,-1);
    VRP = glm::vec3(1, -0.5,0);
    UP = glm::vec3(0.,1.,0.);

    viewTransform();
}
コード例 #9
0
ファイル: imageview.cpp プロジェクト: MzHub/cefabs
void ImageView::paint(QPainter &p, const QSizeF& sz, double zoom, const QPointF& origin) {
    if (!imageSize().isEmpty()) {
        QTransform tr = viewTransform(sz, zoom, origin);
        QTransform invTr = tr.inverted();
        QRectF wR = invTr.mapRect(QRectF(QPoint(0,0), sz));
        QRectF R = wR.intersected(QRectF(QPoint(0,0), imageSize()));
        if (!R.isEmpty()) {
            p.save();
            p.setTransform(tr, true);
            if (m_handler) {
                m_handler->draw(this, p, R, image());
            } else {
                draw(p, R, image());
            }
            p.restore();
        }
    }
}
コード例 #10
0
ファイル: MyGLWidget.cpp プロジェクト: elena20ruiz/IDILabs
void MyGLWidget::initializeGL ()
{
  // Cal inicialitzar l'ús de les funcions d'OpenGL
  initializeOpenGLFunctions();  

  glClearColor(0.5, 0.7, 1.0, 1.0); // defineix color de fons (d'esborrat)
  glEnable(GL_DEPTH_TEST);
  carregaShaders();
  createBuffers();

  //FUNCIONS PROPIES______________
  distanciaMaximaEscena();
  init_camera();
  refreshColFocus();
  refreshPosFocus();

  projectTransform ();
  viewTransform ();
}
コード例 #11
0
ファイル: MyGLWidget.cpp プロジェクト: AlbertSuarez/IDI-Labs
void MyGLWidget::initializeGL ()
{
    // glew és necessari per cridar funcions de les darreres versions d'OpenGL
    glewExperimental = GL_TRUE;
    glEnable (GL_DEPTH_TEST);
    glewInit();
    glGetError();  // Reinicia la variable d'error d'OpenGL

    patricio.load("../models/Patricio.obj");
    scale = 1.0f;
    calcCapsaContenidora(patricio,patrMin,patrMax);
    ra=1;


    glClearColor(0.5, 0.7, 1.0, 1.0); // defineix color de fons (d'esborrat)
    carregaShaders();
    createBuffers();
    modelTransform ();
    projectTransform();
    viewTransform();
}
コード例 #12
0
ファイル: MyGLWidget.cpp プロジェクト: elena20ruiz/IDILabs
void MyGLWidget::init_camera(){

    /**CONFIG PROJECCIO **/

    FOV = (float)M_PI/2.0f;
    angle = FOV/2;
    ra = 1.0f;
    znear = 0.4f;
    zfar = 3.0f;
    //Carreguem la projeccio del model
    projectTransform();

    /**CONFIG VIEW**/

    OBS = glm::vec3(0,0,1);
    VRP = glm::vec3(0,0,0);
    UP = glm::vec3(0,1,0);

    //Carreguem la view del model
    viewTransform();
}
コード例 #13
0
ファイル: RCCamera.cpp プロジェクト: jorj1988/Shift
bool RCViewableTransform::screenSpaceFromWorldSpace(const Eks::Vector3D &worldPos, Eks::Vector3D &posOut)
  {
  auto eye = viewTransform() * worldPos;

  if(eye.z() > 0.0f)
    {
    return false;
    }

  Eks::Vector4D eyeH;
  eyeH.head<3>() = eye;
  eyeH(3) = 1.0f;

  Eks::Vector4D projected = projection() * eyeH;
  float w = projected.w();

  float x, y;
  screenViewportCoordinates(projected.x() / w, projected.y() / w, x, y);

  posOut = Eks::Vector3D(x, y, projected.z());
  return true;
  }
コード例 #14
0
ファイル: MyGLWidget.cpp プロジェクト: rodergas/IDI
void MyGLWidget::initializeGL ()
{

  FOV = M_PI/2; // NEW 5.1
  FOVIni = M_PI/4; // NEW 5.1

  // glew és necessari per cridar funcions de les darreres versions d'OpenGL
  glewExperimental = GL_TRUE;
  glewInit();
  glGetError();  // Reinicia la variable d'error d'OpenGL

  glEnable(GL_DEPTH_TEST);

  glClearColor(0.5, 0.7, 1.0, 1.0); // defineix color de fons (d'esborrat)
  carregaShaders();
  m.load("../models/Patricio.obj");
  calculaCapsaModel();
  createBuffers();
  //modelTransform ();
  projectTransform();
  viewTransform();
}
コード例 #15
0
void MyGLWidget::keyPressEvent (QKeyEvent *e)
{
  switch (e->key())
  {
    case Qt::Key_C:
      {
        if(isCameraModified){
            posObs = glm::vec3(0, 0, -2*radiAux);
            vrp = glm::vec3(0 ,0, 0);
            up = glm::vec3(0,1,0);
            zNear = double(radiAux);
            zFar = 3. * double(radiAux);
            angleY = M_PI*7/4.;
            angleX = -M_PI/8.;
            //aqui es podria afegir angleXaux i angleYaux per recuperar la càmera
        } else {
            posObs = glm::vec3(-10 , 4, -10);
            vrp = glm::vec3(-10 ,0, 10);
            up = glm::vec3(0,1,0);
            zNear = 1;
            zFar = sqrt(16 + 4000);
            angleX = 0.;
            angleY = 0.;
        }
        isCameraModified = !isCameraModified;
        projectTransform();
        viewTransform();
        break;
      }

    case Qt::Key_L:
      {
        if (isFocusRed){
            colFocus = glm::vec3(0.8, 0.8, 0.8);
        } else {
            colFocus = glm::vec3(0.8, 0., 0.);
        }
        isFocusRed = !isFocusRed;
        break;
      }

    //camera axonomètrica vista en planta
    case Qt::Key_A:
    {
        isOrthoPlantCamera = !isOrthoPlantCamera;
        projectTransform();
        viewTransform();
        break;
    }

    case Qt::Key_R:
    {
        angleModelsRotation += M_PI/8.0;
        break;
    }

    case Qt::Key_Escape:
        exit(0);
    default: e->ignore(); break;
  }
  updateGL();
}