Как сделать событие перетаскивание? Т.е уменя нарисован кубик, я нажимаю левую кнопку мыши и передвигаю мышь, то объект должен вращаться.

Что-то написал. Но почему-то сразу же выходит после запуска программы.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// для работы с библиотекой OpenGL 
using Tao.OpenGl;
// для работы с библиотекой FreeGLUT 
using Tao.FreeGlut;
// для работы с элементом управления SimpleOpenGLControl 
using Tao.Platform.Windows;

namespace View3D
{
    public partial class Form1 : Form
    {
        int x, y;
        double AlphaX,AlphaY;
        bool MouseIsDown;
        public Form1()
        {
            AlphaX = 45;
            AlphaY = 45;
            
            InitializeComponent();
            AnT.InitializeContexts();

            Init();
            Draw();
            
            Gl.glFlush();
            AnT.Invalidate();
        }

        private void Init()
        {
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
            Gl.glClearColor(0, 0, 0, 1);
            Gl.glViewport(0, 0, AnT.Width, AnT.Height);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Glu.gluLookAt(10, 10, 10, 0, 0, 0, 0, 0, 1); 
        }

        private void Draw()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glLoadIdentity();
            Gl.glColor3f(1, 1, 1);
            Gl.glPushMatrix();
            Gl.glTranslated(0, 0, -6);
            Gl.glRotated(AlphaX, 1, 0, 0);
            Gl.glRotated(AlphaY, 0, 1, 0);

            Glut.glutWireCube(2);
            Gl.glColor3f(1, 0, 0);

            DrawAxes(0.5);
            Gl.glPopMatrix();
        }
        private void DrawAxes(double Length)
        {
            Gl.glColor3f(1, 0, 0);
            Gl.glBegin(Gl.GL_LINES);
                Gl.glVertex3d(0,0,0);
                Gl.glVertex3d(Length, 0, 0);
            Gl.glEnd();
            Gl.glColor3f(0, 1, 0);
            Gl.glBegin(Gl.GL_LINES);
                Gl.glVertex3d(0, 0, 0);
                Gl.glVertex3d(0, Length, 0);
            Gl.glEnd();
            Gl.glColor3f(0, 0, 1);
            Gl.glBegin(Gl.GL_LINES);
                Gl.glVertex3d(0, 0, 0);
                Gl.glVertex3d(0, 0, Length);
            Gl.glEnd();
        }

        private void AnT_DragDrop(object sender, DragEventArgs e)
        {
            
        }

        private void AnT_MouseDown_1(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            MouseIsDown = true;
        }

        private void AnT_MouseUp_1(object sender, MouseEventArgs e)
        {
            MouseIsDown = false;
        }

        private void AnT_MouseMove_1(object sender, MouseEventArgs e)
        {
            if (MouseIsDown)
            {
                AlphaX += Convert.ToDouble(x - e.X);
                AlphaY += Convert.ToDouble(y - e.Y);
                x = e.X;
                y = e.Y;
                Init();
                Draw();
            }
        }
    }
}


Задумал создать визуализатор.


Буду писать потихоньку. Надеюсь на помошь советами.

Пусть для начала будем считать что грид состит из кубов.
Создаем класс одного кубика
    class Cubic
    {
        public double x, y, z,size,r,g,b;
        public Cubic(double x, double y, double z)
        {

        }
        public void Draw()
        {
            Gl.glPushMatrix();
            Gl.glTranslated(x,y,z);
            Gl.glRotated(45, 1, 0, 1);
            Gl.glColor3d(r, g, b);
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(size, size, size);
                Gl.glVertex3d(-size, size, size);
                Gl.glVertex3d(-size, -size, size);
                Gl.glVertex3d(size, -size, size);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(size, size, -size);
                Gl.glVertex3d(size, -size, -size);
                Gl.glVertex3d(-size, -size, -size);
                Gl.glVertex3d(-size, size, -size);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(-size, size, size);
                Gl.glVertex3d(-size, size, -size);
                Gl.glVertex3d(-size, -size, -size);
                Gl.glVertex3d(-size, -size, size);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(size, size, size);
                Gl.glVertex3d(size, -size, size);
                Gl.glVertex3d(size, -size, -size);
                Gl.glVertex3d(size, size, -size);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(-size, size, -size);
                Gl.glVertex3d(-size, size, size);
                Gl.glVertex3d(size, size, size);
                Gl.glVertex3d(size, size, -size);
            Gl.glEnd();
            Gl.glBegin(Gl.GL_POLYGON);
                Gl.glVertex3d(-size, -size, -size);
                Gl.glVertex3d(size, -size, -size);
                Gl.glVertex3d(size, -size, size);
                Gl.glVertex3d(-size, -size, size);
            Gl.glEnd();
            Gl.glPopMatrix();
        }
    }


У меня есть сетка. Как можно определять координаты при кликаньи мыши на одну из ячеек?


Есть ли одна процедура типа обратного вызова, такая чтоб там прописал, и перерисовывалось изображение?


Как сделать вот такую штуку
http://img3.imageshack.us/img3/1230/90289944.png
чтоб каждому значению соответствовало значение


Попробовал использовать Glut.glutMainLoop(). До этого задаю
Glut.glutDisplayFunc(RenderScene);
Glut.glutReshapeFunc(ChangeSize);
Программа виснет.
Никто не сталкивался?


Чтоб при разворачивании формы, размеры SimpleOpenGLСontrol менялись тоже?


Они описаны в gl.h. Как возможно подключить gl.h ?
#define GL_POINTS                         0x0000
#define GL_LINES                          0x0001
#define GL_LINE_LOOP                      0x0002
#define GL_LINE_STRIP                     0x0003
#define GL_TRIANGLES                      0x0004
#define GL_TRIANGLE_STRIP                 0x0005
#define GL_TRIANGLE_FAN                   0x0006
#define GL_QUADS                          0x0007
#define GL_QUAD_STRIP                     0x0008
#define GL_POLYGON                        0x0009
Можно в принципе цифры писать, но код будет не читабельный. Кто с этим сталкивался?


^