【发布时间】:2015-01-27 07:09:33
【问题描述】:
我正在浏览 Qt 文档中的 Hello GL Example。
他们有一些代码可以帮助通过鼠标拖动来旋转场景。
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
int dx = event->x() - lastPos.x();
int dy = event->y() - lastPos.y();
if (event->buttons() & Qt::LeftButton) {
setXRotation(xRot + 8 * dy);
setYRotation(yRot + 8 * dx);
} else if (event->buttons() & Qt::RightButton) {
setXRotation(xRot + 8 * dy);
setZRotation(zRot + 8 * dx);
}
lastPos = event->pos();
}
还有
void GLWidget::setXRotation(int angle)
{
qNormalizeAngle(angle);
if (angle != xRot) {
xRot = angle;
emit xRotationChanged(angle);
updateGL();
}
}
我可以理解他们是在尝试计算拖动过程中x/y坐标的变化。
但是他们如何将其映射到旋转场景?文档缺乏对正在做什么的解释。
另外,这些神奇的数字8 是怎么回事?
【问题讨论】:
-
有时,或者更确切地说,很多时候,这些数字是根据经验得出的。尝试了不同的数字,并选出了最好的、最神奇的数字。