
Move a Graphics Object
Posted Monday, 12 September, 2011 - 11:22 by OpenTKstart inhi,
i need to simple move a graphic object of 3 Vectors, but i dont get it. How can i access the vectors and change their position? This is my Code...modified "OnUpdateFrame" and "OnUpdateFrame" by adding this line: "Matrix4 mat4 = Matrix4.CreateTranslation(vec3);"
thanks
// Released to the public domain. Use, modify and relicense at will. using System; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; using OpenTK.Audio; using OpenTK.Audio.OpenAL; using OpenTK.Input; namespace StarterKit { class Game : GameWindow { /// <summary>Creates a 800x600 window with the specified title.</summary> public Game() : base(800, 600, GraphicsMode.Default, "OpenTK Quick Start Sample") { VSync = VSyncMode.On; } /// <summary>Load resources here.</summary> /// <param name="e">Not used.</param> protected override void OnLoad(EventArgs e) { base.OnLoad(e); GL.ClearColor(0.1f, 0.5f, 0.5f, 0.3f); GL.Enable(EnableCap.DepthTest); } /// <summary> /// Called when your window is resized. Set your viewport here. It is also /// a good place to set up your projection matrix (which probably changes /// along when the aspect ratio of your window). /// </summary> /// <param name="e">Not used.</param> protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height); Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Width / (float)Height, 1.0f, 64.0f); GL.MatrixMode(MatrixMode.Projection); GL.LoadMatrix(ref projection); } /// <summary> /// Called when it is time to setup the next frame. Add you game logic here. /// </summary> /// <param name="e">Contains timing information for framerate independent logic.</param> protected override void OnUpdateFrame(FrameEventArgs e) { base.OnUpdateFrame(e); if (Keyboard[Key.Escape]) { Exit(); } if (Keyboard[Key.A]) { GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(ref modelview); GL.Begin(BeginMode.Triangles); GL.Color4(Color4.AliceBlue); GL.Vertex3(-1.0f, -1.0f, 4.0f); GL.Color4(Color4.Beige); GL.Vertex3(1.0f, -1.0f, 4.0f); GL.Color4(Color4.Blue); GL.Vertex3(0.0f, 1.0f, 4.0f); GL.End(); SwapBuffers(); } if (Keyboard[Key.Right]) { vec3.X++; } } Vector3 vec3 = new Vector3(-2.0f, -1.0f, 4.0f); /// <summary> /// Called when it is time to render the next frame. Add your rendering code here. /// </summary> /// <param name="e">Contains timing information.</param> protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.ClearColor(Color4.MidnightBlue); Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(ref modelview); GL.Begin(BeginMode.Polygon); GL.Color4(Color4.DarkOrange); GL.Vertex3(-2.0f, -1.0f, 4.0f); GL.Color4(Color4.Beige); GL.Vertex3(1.0f, -1.0f, 4.0f); GL.Color4(Color4.Blue); GL.Vertex3(0.0f, 1.0f, 4.0f); GL.Color4(Color4.Blue); GL.Vertex3(2.0f, 1.0f, 4.0f); GL.End(); SwapBuffers(); Matrix4 mat4 = Matrix4.CreateTranslation(vec3); GL.LoadMatrix(ref mat4); } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { // The 'using' idiom guarantees proper resource cleanup. // We request 30 UpdateFrame events per second, and unlimited // RenderFrame events (as fast as the computer can handle). using (Game game = new Game()) { game.Run(30.0); } } } }

