OpenTKstart's picture

Move a Graphics Object

hi,

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