コード例 #1
0
ファイル: D3DUtil.cs プロジェクト: asdlei99/DX9SDK
    /// <summary>
    /// Fired when the containers mouse is moving
    /// </summary>
    private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            if (internaldragging)
            {
                // recompute nowQuat
                Vector3    vCur        = ScreenToVector(e.X, e.Y);
                Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur);
                internalnowQuat       = internaldownQuat;
                internalnowQuat       = Quaternion.Multiply(internalnowQuat, qAxisToAxis);
                internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis);
            }
            else
            {
                internalrotationDelta = Matrix.Identity;
            }

            internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat);
            internaldragging       = true;
        }

        if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle))
        {
            // Normalize based on size of window and bounding sphere radius
            float fDeltaX = (saveMouseX - e.X) * internalradiusTranslation / internalWidth;
            float fDeltaY = (saveMouseY - e.Y) * internalradiusTranslation / internalHeight;

            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                internaltranslationDelta  = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f);
                internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta);
            }
            if (e.Button == System.Windows.Forms.MouseButtons.Middle)
            {
                internaltranslationDelta  = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY);
                internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta);
            }

            // Store mouse coordinate
            saveMouseX = e.X;
            saveMouseY = e.Y;
        }
    }