gpt4 book ai didi

C# + GL 控制混合背景与窗体

转载 作者:行者123 更新时间:2023-12-02 21:30:40 28 4
gpt4 key购买 nike

我正在使用适用于 OpenGL 的 C# 和 OpenTK 库,我想将 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 个 channel ,并且黑色背景上的 alpha 值为 0

这是原图: http://imageshack.com/a/img801/517/u2z8.png

这就是问题所在: http://imageshack.com/a/img40/1729/zezj.jpg

顶部是使用GLControl的纹理,底部是Windows窗体的Picturebox,我想做的是GLControl的黑色背景变得透明。

我启用 Blend cap 并使用 GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);所以我认为这不是问题所在。

也许问题出在纹理环境上?

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

最佳答案

由于 airspace restrictions ,直接混合 OpenGL 和 WPF 可能是不可能的。但是,使用间接方法可以实现您所描述的效果:

  1. 创建 GLControl,但保持其不可见(即不要将其附加到 WindowsFormsHost)
  2. 创建帧缓冲区对象( documentationexample code )
  3. 将 OpenGL 场景渲染到帧缓冲区对象
  4. 使用GL.GetTexImage2D()检索渲染的场景
  5. 在常规 WPF PictureBox 中显示结果

这样,您就可以在最终的 PictureBox 上使用任何和所有 WPF 效果,包括透明度。

(吹毛求疵:看来您使用的是 OpenTK.GLControl ,而不是 Tai.SimpleGlControl 。它们共享类似的功能,但它们的 API 和功能却截然不同。)

关于C# + GL 控制混合背景与窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22376197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com