轮换和翻译是相反的

时间:2014-09-02 11:42:47

标签: opengl 3d

我正在努力为3D空间中的对象获得良好的旋转。

一切看起来都很不错,除了我的旋转动作是相反的。

我将通过几个屏幕截图来说明我的问题。注意,绿轴 - Y,红轴 - X和蓝 - Z。

如果我将光标从A点拖到B点。我希望旋转如红色箭头所示,但事实上 - 模型正如绿色箭头所示旋转。

enter image description here

但是,如果我将几何体与Y轴(绿色)对齐,则从A点到B点的光标移动会得到预期的结果。模型如红色箭头所示旋转。

enter image description here

我有垂直旋转的情况。

我用着色器绘制几何体。渲染之前我的矩阵设置如下:

modelMatrix = Matrix4.Identity;

viewMatrix =
        Matrix4.CreateRotationY(_xRot) * // just input from mouse movements
        Matrix4.CreateRotationX(_yRot) * // just input from mouse movements
        Matrix4.CreateScale(_scale);     // just input from mouse movements

projectionMatrix = Matrix4.CreateOrthographic(width, heigth, 10000f, -10000f);

从鼠标输入旋转:

private void glControl1_MouseMove(object sender, MouseEventArgs e)
{
    if (MouseButtons == MouseButtons.Left)
    {
        var dx = (e.X - _previousCursorPosition.X) / (float)Width;
        var dy = (e.Y - _previousCursorPosition.Y) / (float)Height;


        if (ModifierKeys == Keys.None)
        {
            _xrot += dx * RotationSensititivity;
            _yrot += dy * RotationSensititivity;
        }
    }
}

0 个答案:

没有答案