private void CreateSceneObjects()
        {
            for (int x = 0; x < 10; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    var boxVisual3D = new Ab3d.Visuals.BoxVisual3D()
                    {
                        CenterPosition = new Point3D(-100 + 20 * x, 50 + y * 30, 0),
                        Size           = new Size3D(10, 10, 10),
                        Material       = _standardMaterial
                    };

                    if (x == 4 && y == 2)
                    {
                        boxVisual3D.Material = _selectedMaterial;
                        _selectedModel       = boxVisual3D;
                    }

                    SelectionRootModelVisual3D.Children.Add(boxVisual3D);
                }
            }

            var eventManager3D = new Ab3d.Utilities.EventManager3D(MainViewport);

            var multiVisualEventSource3D = new MultiVisualEventSource3D(SelectionRootModelVisual3D.Children);

            multiVisualEventSource3D.MouseEnter += delegate(object sender, Mouse3DEventArgs args)
            {
                Mouse.OverrideCursor = Cursors.Hand;
            };

            multiVisualEventSource3D.MouseLeave += delegate(object sender, Mouse3DEventArgs args)
            {
                Mouse.OverrideCursor = null;
            };

            multiVisualEventSource3D.MouseClick += delegate(object sender, MouseButton3DEventArgs e)
            {
                if (_selectedModel != null)
                {
                    _selectedModel.Material = _standardMaterial;
                }

                var baseModelVisual3D = e.HitObject as Ab3d.Visuals.BaseModelVisual3D;
                if (baseModelVisual3D != null)
                {
                    baseModelVisual3D.Material = _selectedMaterial;
                    _selectedModel             = baseModelVisual3D;
                }
                else
                {
                    _selectedModel = null;
                }

                string logText = string.Format("Camera1.TurnTo(new Point3D({0:0}, {1:0}, {2:0})", e.FinalPointHit.X, e.FinalPointHit.Y, e.FinalPointHit.Z);

                if (AnimateCheckBox.IsChecked ?? false)
                {
                    // Animate the camera turn. Animation duration is 0.5 second and use QuadraticEaseInOutFunction for easing.
                    Camera1.TurnTo(position: e.FinalPointHit,
                                   animationDurationInMilliseconds: 500,
                                   easingFunction: Ab3d.Animation.EasingFunctions.QuadraticEaseInOutFunction);

                    logText += ", 500, QuadraticEaseInOutFunction)";
                }
                else
                {
                    Camera1.TurnTo(e.FinalPointHit); // Turn immediately
                    logText += ")";
                }

                LogCommandText(logText);

                // You can also call this with direction vector - for example:

                //var directionVector = e.FinalPointHit - Camera1.Position;
                //Camera1.TurnTo(directionVector);
            };

            eventManager3D.RegisterEventSource3D(multiVisualEventSource3D);
        }