物体在180度旋转后翻转

时间:2014-04-03 08:01:09

标签: c++ opengl rotation

我是OpenGL的新手。我有一个观察点云。 当我围绕x轴或z轴旋转点云时,它会在180度后翻转或翻转,并在0度时再次翻转。 从0到180度它工作正常,从180-360度翻转。

以下是paint事件的代码片段

    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    m_center[0] = (m_minX+m_maxX)/2.0f;
    m_center[1] = (m_minY+m_maxY)/2.0f;
    m_center[2] = (m_minZ+m_maxZ)/2.0f;
    m_radius = static_cast<float>(std::sqrt((m_maxX-m_center[0])*(m_maxX-m_center[0])
        +(m_maxY-m_center[1])*(m_maxY-m_center[1])+(m_maxZ-m_center[2])*(m_maxZ-m_center[2])));
    m_fDistance = m_radius/0.57735f; //where 0.57735f is tan(30 degrees)
    m_dNear = m_fDistance - 3*m_radius;
    m_dFar = m_fDistance + 3*m_radius;

    glLoadIdentity();
    glPushMatrix();
//  glLoadIdentity();
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-m_zoomFactor*2*m_radius, +m_zoomFactor*2*m_radius, -m_zoomFactor*2*m_radius, +m_zoomFactor*2*m_radius, m_dNear, m_dFar);

    glMatrixMode(GL_MODELVIEW);
    glRotatef(m_modelRotation.x/16.0, 1.0, 0.0, 0.0);
    glRotatef(m_modelRotation.y/16.0, 0.0, 1.0, 0.0);   
    glRotatef(m_modelRotation.z/16.0, 0.0, 0.0, 1.0);
    glScalef(m_modelScale.x,m_modelScale.y,m_modelScale.z);
    switch(m_shapeMode)
    {
    case eShapePointCloud:
        drawPoints();
        break;
    case eShapeSolid:
        drawQuads();
        break;
    default:
        qDebug()<<"No shape is specified, so use the points shape.";
        drawPoints();
        break;
    }
    glPopMatrix();

以下是鼠标移动事件的代码

    void OglWidget::mouseMoveEvent(QMouseEvent *event)
    {
GLfloat dx = GLfloat(event->x() - m_lastPos.x()) ;/// width();
GLfloat dy = GLfloat(event->y() - m_lastPos.y()) ;/// height();

if (event->buttons() & Qt::LeftButton) 
{
    setXRotation(m_modelRotation.x + 8*dy);
    setZRotation(m_modelRotation.z + 8*dx);

    this->setPropertyValue(1,m_modelRotation);

} 

m_lastPos = event->pos();
    }

0 个答案:

没有答案