我正在努力为3D空间中的对象获得良好的旋转。
一切看起来都很不错,除了我的旋转动作是相反的。
我将通过几个屏幕截图来说明我的问题。注意,绿轴 - Y,红轴 - X和蓝 - Z。
如果我将光标从A点拖到B点。我希望旋转如红色箭头所示,但事实上 - 模型正如绿色箭头所示旋转。
但是,如果我将几何体与Y轴(绿色)对齐,则从A点到B点的光标移动会得到预期的结果。模型如红色箭头所示旋转。
我有垂直旋转的情况。
我用着色器绘制几何体。渲染之前我的矩阵设置如下:
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;
}
}
}