예제 #1
0
        public static Point _BakMousePosition = new Point(0, 0);  //記錄原游標位置
        public static void OpenGLCtrl_MouseMove(object sender, MouseEventArgs e)
        {
            OpenGLCtrl ctrl = (OpenGLCtrl)sender;

            if (_3DMoveStatus == MoveStatus.Rotate)
            {
                _RoX += (e.X - _BakMousePosition.X) / 5.0f;
                _RoY += isNav * (e.Y - _BakMousePosition.Y) / 5.0f;
                if (_RoX < 0)
                {
                    _RoX += 360;
                }
                else if (_RoX > 360)
                {
                    _RoX -= 360;
                }
                if (_RoY < 0)
                {
                    _RoY += 360;
                }
                else if (_RoY > 360)
                {
                    _RoY -= 360;
                }
            }
            else if (_3DMoveStatus == MoveStatus.Shift)
            {
                _LX += (e.X - _BakMousePosition.X) / (70.0f + _LZ);
                _LY += (_BakMousePosition.Y - e.Y) / (70.0f + _LZ);
            }
            _BakMousePosition.X = e.X;
            _BakMousePosition.Y = e.Y;
        }
예제 #2
0
 private void UserControl_Loaded(object sender, RoutedEventArgs e)
 {
     try
     {
         if (double.Parse(OpenGLCtrl.OpenGL.Version.Substring(0, 3)) < 4.0)
         {
             OpenGLCtrl.OpenGLVersion = SharpGL.Version.OpenGLVersion.OpenGL4_0;
         }
         if (OpenGLCtrl.RenderContextType != RenderContextType.FBO)
         {
             OpenGLCtrl.RenderContextType = RenderContextType.FBO;
         }
         OpenGLCtrl.FrameRate = 60;
         OpenGLCtrl.OnApplyTemplate();
         //Set the default OpenGLControl handlers to prevent SharpGL error messages.
         OpenGLCtrl.OpenGLInitialized += GLControl_OpenGLInitialized;
         OpenGLCtrl.OpenGLDraw        += GLControl_OpenGLDraw;
         OpenGLCtrl.Resized           += GLControl_Resized;
     }
     catch (Exception ex)
     {
         MessageBox.Show("WPF.OpenGLControl settings caused exception: " + ex.Message, "GLScene Error.", MessageBoxButton.OK, MessageBoxImage.Error);
     }
     my_gl = OpenGLCtrl.OpenGL;
     //Specify the attribute locations
     my_AttributeLocations = new Dictionary <uint, string>
     {
         { positionAttribute, "Position" },
         { normalAttribute, "Normal" },
         { colorAttribute, "Color" },
         { textureAttribute, "Texture" }
     };
     //Check version before creating shaders.
     //TODO: This could allow to switch to Immediate mode??
     if (double.Parse(my_gl.Version.Substring(0, 3)) < 2.0)
     {
         throw new Exception("OpenGL version " + double.Parse(my_gl.Version.Substring(0, 3)) + " does not allow use of shaders.");
     }
     //Create the shaderProgram.
     my_Shader = new ShaderProgram();
     if (!my_UpdateShader) //No Shaders were defined so use the default shaders
     {
         LoadDefaultShaders();
         UpdateShaders();
     }
     CreateProjectionMatrix(0.45F, ActualWidth, ActualHeight, 1, 300);
     if (my_UpdateLights)
     {
         UpdateLights();
         my_UpdateLights = false;
     }
     //Set the scene background color.
     if (Background != null)
     {
         my_Background = (Color)ColorConverter.ConvertFromString(Background.ToString());
         my_gl.ClearColor(my_Background.ScR, my_Background.ScG, my_Background.ScB, my_Background.ScA);
     }
     SceneIsLoaded = true;
 }