Roullakis Ответов: 0

Проблема с тестом трафарета в sharpgl


Я пытаюсь заставить тест трафарета работать с помощью SharpGL. Следующий упрощенный пример не работает. Он должен был отображать только часть второго прямоугольника, однако он отображает весь прямоугольник целиком. Любая помощь будет очень признательна.

     OpenGLControl1.OpenGL.Enable(OpenGL.GL_STENCIL_TEST);
OpenGLControl1.OpenGL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
OpenGLControl1.OpenGL.LineWidth(1.0f);

//First rectangle
float[] VertexArray1 = { -0.2f, -0.4f, +0.2f, -0.4f, +0.2f, +0.4f, -0.2f, +0.4f };
//Second rectangle
float[] VertexArray2 = { -0.4f, -0.2f, +0.4f, -0.2f, +0.4f, +0.2f, -0.4f, +0.2f };

uint[] VertexIndex = { 0, 1, 2, 3 };

uint[] VertexBuffer = new uint[VertexArray1.Length];
OpenGLControl1.OpenGL.GenBuffers(1, VertexBuffer);
OpenGLControl1.OpenGL.BindBuffer(OpenGL.GL_ARRAY_BUFFER, VertexBuffer[0]);
OpenGLControl1.OpenGL.EnableVertexAttribArray(0);
OpenGLControl1.OpenGL.VertexAttribPointer(0, 2, OpenGL.GL_FLOAT, OpenGL.GL_FALSE == 1, 0, (IntPtr)0);

OpenGLControl1.OpenGL.ColorMask(0, 0, 0, 0);
OpenGLControl1.OpenGL.StencilFunc(OpenGL.GL_ALWAYS, 0, 1);
OpenGLControl1.OpenGL.StencilOp(OpenGL.GL_KEEP, OpenGL.GL_KEEP, OpenGL.GL_REPLACE);
OpenGLControl1.OpenGL.StencilMask(1);

OpenGLControl1.OpenGL.Color(0.5f, 0.5f, 0.5f);
OpenGLControl1.OpenGL.BufferData(OpenGL.GL_ARRAY_BUFFER, VertexArray1, OpenGL.GL_STATIC_DRAW);
OpenGLControl1.OpenGL.PolygonMode(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_FILL);
OpenGLControl1.OpenGL.DrawElements(OpenGL.GL_QUADS, VertexIndex.Length, VertexIndex);
OpenGLControl1.OpenGL.StencilMask(0);
OpenGLControl1.OpenGL.ColorMask(1, 1, 1, 1);
OpenGLControl1.OpenGL.StencilFunc(OpenGL.GL_EQUAL, 1, 1);
OpenGLControl1.OpenGL.StencilOp(OpenGL.GL_KEEP, OpenGL.GL_KEEP, OpenGL.GL_KEEP);

OpenGLControl1.OpenGL.BufferData(OpenGL.GL_ARRAY_BUFFER, VertexArray2, OpenGL.GL_STATIC_DRAW);
OpenGLControl1.OpenGL.PolygonMode(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_FILL);
OpenGLControl1.OpenGL.DrawElements(OpenGL.GL_QUADS, VertexIndex.Length, VertexIndex);

OpenGLControl1.OpenGL.DisableVertexAttribArray(0);


Что я уже пробовал:

Я попробовал использовать как целые, так и шестнадцатеричные числа для масок, но безрезультатно.

Gerry Schmitz

OpenGL-это как использование костылей, когда вы уже можете работать (WPF и DirectX).

Roullakis

Спасибо, Джерри. Мне нужно только делать статическую 2D-графику. Какой пакет DirectX вы бы порекомендовали, чтобы он был доступен из WPF?

0 Ответов