C# + GL Control смесь фона с формой

Я работаю с C# и библиотеками OpenTK для OpenGL, я хочу смешать GLControl с картинкой, помещенной в качестве фона.

* РЕДАКТИРОВАТЬ *

Я решил проблему с загрузкой исходного изображения, изменив метод, поэтому теперь я использую структуры растрового изображения и растрового изображения:

Bitmap bitmap = new Bitmap("image.png");
BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
         ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

Я уверен, что мой источник PNG имеет 4 канала и альфа-значение 0 на черном фоне

это оригинальное изображение: http://imageshack.com/a/img801/517/u2z8.png

И это проблема: http://imageshack.com/a/img40/1729/zezj.jpg

top - это текстура, использующая GLControl, а bottom - это Picturebox формы Windows, я пытаюсь сделать так, чтобы черный фон GLControl стал прозрачным.

Я поставил Blend cap включи и используй GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); так что я думаю, что это не проблема.

Может быть проблема в текстуре окружения?

GL.TexEnv(TextureEnvTarget.TextureEnv, TextureEnvParameter.TextureEnvMode,GL_MODULATE);

1 ответ

Решение

Из-за ограничений воздушного пространства смешивание OpenGL и WPF напрямую может быть невозможным. Однако возможно достичь эффекта, который вы описываете, используя косвенный подход:

  1. Создайте GLControl, но сделайте его невидимым (т.е. не присоединяйте его к WindowsFormsHost)
  2. Создать объект фреймбуфера ( документация и пример кода)
  3. Визуализируйте вашу сцену OpenGL в объект кадрового буфера
  4. использование GL.GetTexImage2D() восстановить визуализированную сцену
  5. Отображать результат в обычном WPF PictureBox

Таким образом, вы можете использовать любые эффекты WPF для конечного PictureBox, включая прозрачность.

(Плохо: кажется, что вы используете OpenTK.GLControl, а не Tao.SimpleGlControl. Они имеют похожую функцию, но их API и возможности совсем другие.)

Другие вопросы по тегам