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 напрямую может быть невозможным. Однако возможно достичь эффекта, который вы описываете, используя косвенный подход:
- Создайте GLControl, но сделайте его невидимым (т.е. не присоединяйте его к WindowsFormsHost)
- Создать объект фреймбуфера ( документация и пример кода)
- Визуализируйте вашу сцену OpenGL в объект кадрового буфера
- использование
GL.GetTexImage2D()
восстановить визуализированную сцену - Отображать результат в обычном WPF PictureBox
Таким образом, вы можете использовать любые эффекты WPF для конечного PictureBox, включая прозрачность.
(Плохо: кажется, что вы используете OpenTK.GLControl, а не Tao.SimpleGlControl. Они имеют похожую функцию, но их API и возможности совсем другие.)