2012-05-12 2 views
0

Я работаю с OpenGL в C# с инструментами OpenTK.помощь для opengl или opentk в C#

Моя проблема: во-первых, мы хотим нарисовать фигуру с линиями в glwindows, мы начинаем рисовать линию с помощью события MouseDown и заканчиваем его с помощью ключа (e), когда мы закончим рисовать линии, а в следующем мы будем хотите нарисовать новые строки, windowsframe (ColorBufferBit) очистится, и я не знаю, что я должен делать?

для более подробного объяснения, я должен сказать, что когда мы рисуем линию, мы называем
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); и когда мы finishid его, и мы хотим, чтобы darwing новых линий, насильственные, я должен вызвать
GL.Clear(ClearBufferMask.AccumBufferBit | ClearBufferMask.DepthBufferBit);
, что должен я делаю? здесь код

using System; 
using OpenTK; 
using OpenTK.Graphics; 
using OpenTK.Graphics.OpenGL; 
using OpenTK.Audio; 
using OpenTK.Audio.OpenAL; 
using OpenTK.Input; 
using System.Drawing; 
using System.Drawing.Imaging; 

namespace FarmApp 
{ 
class openGLfarm : GameWindow 
{ 
    bool flage, chechFirst; 
    float XMouseBegin_first, YMouseBegin_first; 
    //----------------------------- 
    public openGLfarm(GraphicsMode mode) 
     : base(700, 700, GraphicsMode.Default, "O Sample") 
    { 
     VSync = VSyncMode.On; 
     chechFirst = true; 
     Mouse.ButtonDown += new EventHandler<MouseButtonEventArgs>(Mouse_ButtonDown); 
     Mouse.ButtonUp += new EventHandler<MouseButtonEventArgs>(Mouse_ButtonUp); 
     Mouse.Move += new EventHandler<MouseMoveEventArgs>(Mouse_Move); 

     Mouse.ButtonDown += new EventHandler<MouseButtonEventArgs>(Mouse_ButtonDown); 
     Mouse.ButtonUp += new EventHandler<MouseButtonEventArgs>(Mouse_ButtonUp); 
     Mouse.Move += new EventHandler<MouseMoveEventArgs>(Mouse_Move); 


    } 
    //------------------------------- 
     public openGLfarm() 
    { 
     // TODO: Complete member initialization 
    } 


    void Mouse_Move(object sender, MouseMoveEventArgs e) 
    { 
     // Now use mouse_delta to move the camera 
    } 

    void Mouse_ButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     switch (e.Button) 
     { 
      case MouseButton.Left: 
       { 
        flage = true; 
        if (chechFirst) 
        { 
         chechFirst = false; 
         XMouseBegin_first = Mouse.X; 
         YMouseBegin_first = Mouse.Y; 

        } 
        break; 
       } 
      case MouseButton.Middle: 
       ///camera_mode = ECameraMode.CAMERA_DOLLY; 
       break; 
      case MouseButton.Right: 
       //camera_mode = ECameraMode.CAMERA_ORBIT; 
       break; 
     } 

    } 

    void Mouse_ButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     switch (e.Button) 
     { 
      case MouseButton.Left: 
       { 
        break; 
       } 
      case MouseButton.Middle: 
       ///camera_mode = ECameraMode.CAMERA_DOLLY; 
       break; 
      case MouseButton.Right: 
       //camera_mode = ECameraMode.CAMERA_ORBIT; 
       break; 
     } 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
    } 

    protected override void OnResize(EventArgs e) 
    { 
     base.OnResize(e); 

    } 

    protected override void OnUpdateFrame(FrameEventArgs e) 
    { 
     base.OnUpdateFrame(e); 
     if (Keyboard[Key.Escape]) 
      Exit(); 
     if (Keyboard[Key.E]) 
     { 
      flage = false; 
      chechFirst = true; 

     } 
    } 



    void table(float count) 
    { 
     float x, y; 
     GL.Color4(Color4.Wheat); 

     float z = (2f)/(count); 
     x = -1; 
     y = -1; 
     for (double i = 0; i < count; i++) 
     { 
      GL.Begin(BeginMode.Lines); 

      GL.Vertex2(x + (z), -1); 
      GL.Vertex2(x + (z), 1); 

      GL.End(); 
      x = x + (z); 
     } 

     for (double i = 0; i < count; i++) 
     { 
      GL.Begin(BeginMode.Lines); 

      GL.Vertex2(-1, y + (z)); 
      GL.Vertex2(1, y + (z)); 

      GL.End(); 
      y = y + (z); 
     } 


    } 
    public void DrawLine(float Xbegin, float Ybegin, float Xend, float Yend) 
    { 
     GL.Begin(BeginMode.Lines); 
     GL.Vertex2(Xbegin, Ybegin); 
     GL.Vertex2(Xend, Yend); 
     GL.End(); 

    } 
    protected override void OnRenderFrame(FrameEventArgs e) 
    { 
     //base.OnRenderFrame(e); 
     if (chechFirst) 
      GL.Clear(ClearBufferMask.AccumBufferBit | ClearBufferMask.DepthBufferBit); 

     else 
      GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); 
     GL.MatrixMode(MatrixMode.Modelview); 
     GL.LoadIdentity(); 
     table(Form1.co); 
     if (flage) 
     { 
      //flage = false; 
      DrawLine((XMouseBegin_first/350f - 1f), -(YMouseBegin_first/350f - 1f), (Mouse.X/350f - 1f), -(Mouse.Y/350f - 1f)); 
     } 
     SwapBuffers(); 
    } 
} 

}

+0

http://stackoverflow.com/questions/how-to-ask –

ответ

0

можно FOOR пример создания массива Vector2 и перейти спасая начальную и конечную точки этого. Затем в функции, которая рисует линии, делают for и рисуют все из них.

Смежные вопросы