이 클래스에서 주어진 임의의 숫자로 직사각형을 생성 중입니다.Tao Framework에서 OpenGL 생성 사각형 C#
class Rect
{
double x;
double y;
public Rect(double _x, double _y)
{
x = _x;
y = _y;
}
public void Draw()
{
Gl.glBegin(Gl.GL_QUADS);
Gl.glVertex2d(x + (-0.05d), y + (-0.05d));
Gl.glVertex2d(x + (-0.05d), y + (0.05d));
Gl.glVertex2d(x + (0.05d), y + (0.05d));
Gl.glVertex2d(x + (0.05d), y + (-0.05d));
Gl.glEnd();
}
}
나는 페인트 함수를 호출합니다.
private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
{
Gl.glClearColor(0, 1, 0, 0);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
for (int i = 0; i < 4; i++)
{
rand = new Random();
double x = 2 * rand.NextDouble() - 1;
double y = 2 * rand.NextDouble() - 1;
rect= new Rect(x,y);
rect.Draw();
}
}
모든 것이 잘 보이지만 잘못된 것이 있습니다. 나는 모든 직사각형을 볼 수 없다. 그들 중 일부는 실종되었다. 하지만 어딘가에 중단 점을 토글하거나 MessageBox.Show(x+" "+y);
코드를 잘 작성하면 내가 원하는 사각형이 표시됩니다. 내 코드는 사실이지만 OpenGL에 대해서는 잘못된 것이라고 생각합니다. 나는 Tao Framework를 사용하고 있습니다.
내가 보여주는 코드에 문제가 있다고 생각하지 않으므로 추측하는 것 이상의 작업을 수행 할 수있는 정보가 충분하지 않습니다. 그것은 항상 누락 된 완전한 사각형입니까? 4 대신에 1, 2 또는 3 개의 직사각형이 보입니까? 이 코드에서 볼 수있는 유일한 걱정거리는 렌더링 표면에 깊이 버퍼가 있으면'glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)'를 사용해야한다는 것입니다. –
GL 파이프 라인을 플러시하거나 어떤 시점에서 버퍼를 플러시 (implicit flush)해야합니다. 그렇지 않으면 GL은 이러한 명령을 모두 큐에 넣고 논리적으로 일어날 것으로 예상 할 때가 아니라면 느낄 때마다 실행합니다 (' simpleOpenGlControl1_Paint'). –
'Gl.glClear (Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); '을 추가했지만 항상 1 또는 2 개의 rect를 보는 차이는 없습니다. 함수의 끝에 "simpleOpenGlControl1.SwapBuffers()'와'Gl.glflush()'을 시도했지만 아무 변화가 없습니다. – user1545283