[英]helping for opengl or opentk in c#
我正在使用OpenTK工具在c#中使用OpenGL。
我的問題是:首先,我們要在glwindows中用線條繪制一些形狀,我們用MouseDown事件按鈕開始繪制線條,並用key(e)完成它,完成繪制線條后,接下來我們要繪制新線條行,窗框(ColorBufferBit)將清除,我不知道我該怎么辦?
要獲得更多解釋,我必須說,當我們畫線時,我們稱
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
當我們完成它並想要換行時,強制地,我必須打電話
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();
}
}
}
您可以為示例創建一個Vector2數組,然后保存其起點和終點。 然后在繪制線條的函數中創建for並繪制所有線條。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.