Проблема с тестом трафарета в 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?