【发布时间】:2018-04-25 16:04:17
【问题描述】:
在Qt 5.9 Qt OpenGL Hello GL2 Example中,为了实现物体的旋转,在根据鼠标移动计算旋转时,有一个度数归一化函数。我只是不明白 1)为什么它需要 dx 和 dy 时间 8 来获得鼠标移动距离?和 2)然后在这里 360 乘以 16 来归一化角度,为什么是 16?和 3) 什么时候通过除以 16 来设置渲染中的旋转?谢谢。
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
int dx = event->x() - m_lastPos.x();
int dy = event->y() - m_lastPos.y();
if (event->buttons() & Qt::RightButton) {
....
setZRotation(m_zRot + 8 * dx);
}
m_lastPos = event->pos();
}
static void qNormalizeAngle(int &angle) {
while (angle < 0)
angle += 360 * 16;
while (angle > 360 * 16)
angle -= 360 * 16;
}
void GLWidget::setZRotation(int angle)
{
qNormalizeAngle(angle);
if (angle != m_zRot) {
m_zRot = angle;
.....
update();
}
}
void GLWidget::paintGL() {
....
m_world.rotate(m_zRot / 16.0f, 0, 0, 1);
....
}
【问题讨论】: