// Zoom in and out according to the change in wheel delta.
void QGLGraphicsNavigationItemPrivate::wheel(qreal delta)
{
    QGLCamera *camera = viewportItem->camera();
    qreal scale = qAbs(viewDelta(delta, delta).x());
    if (delta < 0)
        scale = -scale;
    if (scale >= 0.0f)
        scale += 1.0f;
    else
        scale = 1.0f / (1.0f - scale);
    qreal fov = camera->fieldOfView();
    if (fov != 0.0f)
        camera->setFieldOfView(camera->fieldOfView() / scale);
    else
        camera->setViewSize(camera->viewSize() / scale);
}
void ViewportWidget::initializeGL(QGLPainter *painter) {
    QGLCamera *camera = new QGLCamera();
    camera->setNearPlane(5.0f);
    camera->setFarPlane(1000.0f);
    camera->setFieldOfView(34.0f);
    setCamera(camera);

    _lp.setPosition(QVector3D(-1.0, -2.0, 1.0));
    _lp.setSpotAngle(180);
    _lp.setSpotExponent(24);
    _lp.setSpotDirection(QVector3D(1.0, 4.0, 4.0));

    _lm.setAmbientSceneColor(QColor(200, 200, 200));

    painter->setLightModel(&_lm);
    painter->setMainLight(&_lp);
    painter->setClearColor(Qt::black);
}