ColorPointer() public static method

public static ColorPointer ( int size, ColorPointerType type, int stride, int offset ) : void
size int
type ColorPointerType
stride int
offset int
return void
Ejemplo n.º 1
0
        static void Main()
        {
            Console.WriteLine("Entering");

            using (var game = new GameWindow(1920, 1080, new GraphicsMode(ColorFormat.Empty, 8, 0, 6), "Heart of Gold", GameWindowFlags.Default)) {
                game.Icon = Icon.ExtractAssociatedIcon(Assembly.GetEntryAssembly().Location);
                var size = 500;
                var zoom = 1.0;
                game.Load += (sender, e) => { game.VSync = VSyncMode.On;
                                              GL.PointSize(10); };
                game.MouseWheel += delegate(object sender, MouseWheelEventArgs args) {
                    if (args.Delta > 0)
                    {
                        zoom *= 1.1;
                    }
                    //zoom += args.Delta/10.0;
                    else
                    {
                        zoom /= 1.1;
                    }
                    //zoom += args.Delta/10.0;

                    if (zoom <= 0.1)
                    {
                        zoom = 0.1;
                    }

                    //var aspect = game.Width / (double)game.Height;

                    //GL.Viewport(0, 0, game.Width, game.Height);
                    //GL.Ortho(-xsize, xsize, ysize, -ysize, 0, 4.0);
                };
                game.Resize += (sender, e) =>
                               GL.Viewport(0, 0, game.Width, game.Height);

                #region Heights

                var matrix = new double[size, size];
                //var r = new Random();

                #endregion


                #region Color

                Console.WriteLine("Initializing color...");
                var cmatrix = new Color[size, size];
                using (var b = (Bitmap)Image.FromFile(@"E:\Downloads\Untitled5.png")) {
                    for (var i = 0; i < size; i++)
                    {
                        Console.Write($"\rOn column {i,4} of {size}");
                        for (var j = 0; j < size; j++)
                        {
                            matrix[i, j]  = ((double)b.GetPixel(i, j).A + 1);                           // / 8.0;
                            cmatrix[i, j] = Color.FromArgb(255, b.GetPixel(i, j));
                        }
                    }
                }
                Console.WriteLine();
                #endregion


                bool wDown = false,
                     aDown = false,
                     sDown = false,
                     dDown = false;
                game.KeyDown += (sender, args) => {
                    switch (args.Key)
                    {
                    case Key.W:
                        wDown = true;
                        break;

                    case Key.A:
                        aDown = true;
                        break;

                    case Key.S:
                        sDown = true;
                        break;

                    case Key.D:
                        dDown = true;
                        break;
                    }
                };
                var translate = Vector2.Zero;
                game.KeyUp += (sender, args) => {
                    switch (args.Key)
                    {
                    case Key.Escape:
                        game.Exit();
                        break;

                    case Key.R:
                        zoom = 1;
                        break;

                    case Key.W:
                        if (wDown)
                        {
                            translate += new Vector2(1f, 1f);
                        }
                        wDown = false;
                        break;

                    case Key.A:
                        if (aDown)
                        {
                            translate += new Vector2(1f, -1f);
                        }
                        aDown = false;
                        break;

                    case Key.S:
                        if (sDown)
                        {
                            translate += new Vector2(-1f, -1f);
                        }
                        sDown = false;
                        break;

                    case Key.D:
                        if (dDown)
                        {
                            translate += new Vector2(-1f, 1f);
                        }
                        dDown = false;
                        break;
                    }
                };

                double time = 0, sin = 0;

                game.UpdateFrame +=
                    (sender, e) => {
                    time      += e.Time;
                    sin        = (Math.Sin(time / 4) + 1) / 2;
                    game.Title = $"Heart of Gold - {game.RenderFrequency:000.00}fps - {game.UpdateFrequency:000.00}tps";
                };

                var items = new List <BufferElement>(size * size * 12);
                Console.WriteLine("Prepping buffer elements...");
                //First half
                var side = matrix.GetLength(0);
                var half = side / 2;
                for (var i = 0; i < side; i++)
                {
                    Console.Write($"\rCreating row {i,4} of {side}");
                    int x = i, y = 0;
                    while (x >= 0)
                    {
                        var hasleft  = y != side - 1;
                        var hasright = x != side - 1;
                        var left     = hasleft ? (double?)matrix[x, y + 1] : -2;
                        var right    = hasright ? (double?)matrix[x + 1, y] : -2;
                        items.AddRange(AddOne(matrix[x, y], x - half, y - half, cmatrix[x--, y++], left, right));
                    }
                }
                // Pt 2
                for (var i = 1; i <= side - 1; i++)
                {
                    Console.Write($"\rCreating column {i,4} of {side}");
                    int x = side - 1, y = i;
                    while (y < side)
                    {
                        var hasleft = y != side - 1; var hasright = x != side - 1;
                        var left  = hasleft ? (double?)matrix[x, y + 1] : -2;
                        var right = hasright ? (double?)matrix[x + 1, y] : -2;
                        items.AddRange(AddOne(matrix[x, y], x - half, y - half, cmatrix[x--, y++], left, right));
                    }
                }
                Console.WriteLine("\rCreating vertex buffer object...           ");
                Action a = delegate {
                    GL.EnableClientState(ArrayCap.VertexArray);
                    GL.EnableClientState(ArrayCap.ColorArray);
                    GL.VertexPointer(3, VertexPointerType.Float, BufferElement.SizeInBytes, new IntPtr(0));
                    GL.ColorPointer(3, ColorPointerType.Float, BufferElement.SizeInBytes, new IntPtr(Vector3.SizeInBytes));
                };
                var terrain = new VertexBuffer <BufferElement>(items.ToArray(), a, BufferUsageHint.StaticDraw);
                Console.WriteLine("Done!");
                game.RenderFrame += delegate {
                    // render graphics
                    GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
                    GL.MatrixMode(MatrixMode.Projection);
                    GL.LoadIdentity();

                    GL.Ortho(size, -size, size, -size, -double.MaxValue, double.MaxValue);

                    GL.Scale(1 * zoom, (game.Width / (double)game.Height) * zoom, 1 * zoom);
                    GL.Rotate(90 * sin, 1, 0, 0);
                    GL.Rotate(45, 0, 0, 1);
                    GL.Translate(translate.X, translate.Y, -matrix[(int)-translate.X + half, (int)-translate.Y + half]);

                    terrain.Render(PrimitiveType.Quads);

                    //GL.Begin(PrimitiveType.LineLoop);

                    //DrawOne(matrix[(int) -translate.X + half, (int) -translate.Y + half], (int) -translate.X, (int) -translate.Y,
                    //	Color.Black);
                    //GL.End();

                    game.SwapBuffers();
                };
                game.WindowState = WindowState.Maximized;
                game.Run(60.0, 60);
            }
        }
Ejemplo n.º 2
0
        public void SetupAttributePointersOld()
        {
            foreach (var binding in bindings)
            {
                var attribute = binding.Attribute;
                switch (binding.AttributeMapping.DstUsage)
                {
                case VertexUsage.Position:
                {
                    GL.EnableClientState(OpenGL.ArrayCap.VertexArray);
                    GL.VertexPointer(
                        attribute.Dimension,
                        (OpenGL.VertexPointerType)attribute.Type,
                        binding.Stride,
                        attribute.Offset
                        );
                    break;
                }

                case VertexUsage.Normal:
                {
                    GL.EnableClientState(OpenGL.ArrayCap.NormalArray);
                    GL.NormalPointer(
                        (OpenGL.NormalPointerType)attribute.Type,
                        binding.Stride,
                        attribute.Offset
                        );
                    break;
                }

                case VertexUsage.Color:
                {
                    if ((attribute.Dimension != 3) && (attribute.Dimension != 4))
                    {
                        //  \todo
                        continue;
                    }
                    GL.EnableClientState(OpenGL.ArrayCap.ColorArray);
                    GL.ColorPointer(
                        attribute.Dimension,
                        (OpenGL.ColorPointerType)attribute.Type,
                        binding.Stride,
                        attribute.Offset
                        );
                    break;
                }

                case VertexUsage.TexCoord:
                {
                    GL.ClientActiveTexture(OpenGL.TextureUnit.Texture0 + binding.AttributeMapping.DstIndex);
                    GL.EnableClientState(OpenGL.ArrayCap.TextureCoordArray);
                    GL.TexCoordPointer(
                        attribute.Dimension,
                        (OpenGL.TexCoordPointerType)attribute.Type,
                        binding.Stride,
                        attribute.Offset
                        );
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
        }