Ir a contenido


MENSAJE DE BIENVENIDA Foro vínculado con Twitter, más info aquí.

“El secreto para progresar es empezar por algún lugar. El secreto para empezar por algún lugar es fragmentar tus complejas y abrumadoras tareas de tal manera que queden convertidas en pequeñas tareas que puedas realizar y entonces simplemente comenzar por la primera.” - Mark Twain

Foto

Ejemplo Básico de pintado de Triangulo en OpenGL con OpenTK


  • Please log in to reply
1 reply to this topic

#1 Alberto Dominguez

Alberto Dominguez

    Gurú

  • Administradores
  • 1.059 Mensajes:
  • LocationMadrid

Escrito 21 agosto 2010 - 17:28

Dejo código de ejemplo de uso del envoltorio(wrapper) OpenTK para la librería unmanaged OpenGL32.dll entre otras:

using System;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using System.Drawing;

namespace DibujoOpenGL
{
    public class VentanaDibujo : GameWindow
    {
        public VentanaDibujo()
            : base(600, 600, GraphicsMode.Default, "Triangulo")
        {
        }

        protected override void OnLoad(EventArgs e)
        {
            OnResize(null);
            GL.ClearColor(Color.Blue);
            int w = this.Width;
            int h = this.Height;
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            GL.Ortho(0, w, 0, h, -1, 1); // El pixel de más abajo a la izquierda es el (0, 0)
            GL.Viewport(0, 0, w, h); // Usar toda la ventana como área de render
        }

        protected override void OnRenderFrame(FrameEventArgs e)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();
            GL.Color3(Color.Yellow);
            GL.Begin(BeginMode.Triangles);
            GL.Vertex2(100, 200);
            GL.Vertex2(300, 500);
            GL.Vertex2(500, 200);
            GL.End();
            SwapBuffers();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            VentanaDibujo demo = new VentanaDibujo();
            demo.Run();
        }
    }
}

Link a descarga del Wrapper OpenTK con el que está realizado el ejemplo:
http://www.hola-mund...wrapper-opentk/

Hay que referenciar la librería: OpenTK.dll en la solución en VS una vez instalado el Wrapper.

Y para ejecutar a pantalla completa:

public VentanaDibujo()
            : base(600, 600, GraphicsMode.Default, "Triangulo", GameWindowFlags.Fullscreen)
        {
        }

o también:

this.WindowState = WindowState.Fullscreen;

Saludos,

Alberto Dominguez

Enterprise Architect y Trainer
MCT, MCPD, MCITP, MCITP Dynamics, MCSE, MCSA, MCTS, MCP...
ITIL V3 Foundation Qualification in IT Service Management
Imagen enviadaPerfil Profesional Imagen enviadaTwitter
Imagen enviadaImagen enviadaImagen enviadaImagen enviada

#2 Alberto Dominguez

Alberto Dominguez

    Gurú

  • Administradores
  • 1.059 Mensajes:
  • LocationMadrid

Escrito 21 agosto 2010 - 19:50

Otro código que hace algo parecido, pero esta vez dentro de un control GLControl llamado glControl1 insertado dentro de un formulario:

using System;
using System.Drawing;
using System.Windows.Forms;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        bool loaded = false;
        public Form1()
        {
            InitializeComponent();
        }
        private void glControl1_Load(object sender, EventArgs e)
        {
            loaded = true;
            GL.ClearColor(Color.Blue); 
            int w = glControl1.Width;
            int h = glControl1.Height;
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            GL.Ortho(0, w, 0, h, -1, 1); // El pixel de más abajo a la izquierda es el (0, 0)
            GL.Viewport(0, 0, w, h); // Usar todo el control glContro1 como área de render  
        }

        private void glControl1_Paint(object sender, PaintEventArgs e)
        {
            if (!loaded) return;

            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();
            GL.Color3(Color.Yellow);
            GL.Begin(BeginMode.Triangles);
            GL.Vertex2(100, 200);
            GL.Vertex2(300, 500);
            GL.Vertex2(500, 200);
            GL.End();
            glControl1.SwapBuffers();
        }
    }
}

El control GLControl se ha añadido primero al Toolbox desde la opción "Choose Items..." que aparece pinchando con botón derecho en alguna zona vacía de éste (ver imagen):

Imagen enviada

Una vez añadido el control se crea ese código para los eventos Load y Paint del GLControl insertado o si se ha creado primero el código, se vinculan los métodos con los eventos del glControl1 desde la misma ventana de sus propiedades.
Saludos,

Alberto Dominguez

Enterprise Architect y Trainer
MCT, MCPD, MCITP, MCITP Dynamics, MCSE, MCSA, MCTS, MCP...
ITIL V3 Foundation Qualification in IT Service Management
Imagen enviadaPerfil Profesional Imagen enviadaTwitter
Imagen enviadaImagen enviadaImagen enviadaImagen enviada




0 usuarios están leyendo este tema

0 miembro/s, 0 invitado/s, 0 usuario/s anónimo/s