Выбор мыши OpenTK

Я разработал небольшой образец C #, чтобы понять суть, используя OpenTK и winforms.

Есть метод рисования квадратов и есть другой метод выбора треугольника. Почему-то я не получаю никаких хитов. Есть ли проблема с методами Readpixel? потому что я только что преобразовал образец выбора Тао в OpenTK с помощью правильных методов? Не могли бы вы сообщить мне, что не так с моим методом?

   private static int[,] board = new int[3, 3];        //Definition
   private const int BUFSIZE = 512;



   private void glControl1_MouseDown(object sender, MouseEventArgs e)
   {
        int[] selectBuffer = new int[BUFSIZE];              //This has to be redifined
        int hits;
        int[] viewport = new int[4];            

        if (e.Button == MouseButtons.Left)
        {
            GL.GetInteger(GetPName.Viewport, viewport);
            GL.SelectBuffer(BUFSIZE, selectBuffer);
            GL.RenderMode(RenderingMode.Select);
            GL.InitNames();
            GL.PushName(0);
            GL.MatrixMode(MatrixMode.Projection);
            GL.PushMatrix();
            GL.LoadIdentity();
            Byte4 Pixel = new Byte4();
            GL.ReadPixels(e.X, viewport[3] - e.Y, 1, 1, PixelFormat.Rgba, PixelType.UnsignedByte, ref Pixel);
            uint SelectedTriangle=SelectedTriangle = Pixel.ToUInt32();
            GL.Ortho(0, 3 ,0, 3, 1,-1); // Bottom-left corner pixel has coordinate (0, 0)                 
            DrawSquares(GL.RenderMode(RenderingMode.Select));
            GL.MatrixMode(MatrixMode.Projection);
            GL.PopMatrix();
            GL.Flush();
            hits = GL.RenderMode(RenderingMode.Render);
            ProcessHits(hits, selectBuffer);
            glControl1.SwapBuffers(); 
        }
    }



    private static void DrawSquares(int mode)
    {
        int i, j;
        for (i = 0; i < 3; i++)
        {
            if (mode == GL.RenderMode(RenderingMode.Select))                
                GL.LoadName(i);
            for (j = 0; j < 3; j++)
            {
                if (mode == GL.RenderMode(RenderingMode.Select))
                    GL.PushName(j);
                GL.Color3((float)i / 3.0f, (float)j / 3.0f, (float)board[i, j] / 3.0f);
                GL.Rect(i, j, (i + 1), (j + 1));
                if (mode == GL.RenderMode(RenderingMode.Select))
                    GL.PopName();
            }
        }
    }

person RobinAtTech    schedule 22.04.2013    source источник


Ответы (1)


Я сделал некоторую проблему в коде. Это сделало проблему. Измените экземпляры следующим образом. тогда получится :). Маленькая ошибка вызвала большую проблему :-(

//(mode == GL.RenderMode(RenderingMode.Select))
(mode == RenderingMode.Select) // Removed GL.RenderMode
person RobinAtTech    schedule 30.04.2013