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; }
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; }