Jogl:如何在 com.jogamp.opengl.swt.GLCanvas 上制作透明背景?

Posted

技术标签:

【中文标题】Jogl:如何在 com.jogamp.opengl.swt.GLCanvas 上制作透明背景?【英文标题】:Jogl: How to make a transparent background on com.jogamp.opengl.swt.GLCanvas? 【发布时间】:2012-10-28 06:05:36 【问题描述】:

我搜索并阅读了多个关于 openGL 透明度的论坛,我发现了这段代码

gl.glEnable(GL2.GL_BLEND);
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL2.GL_ALPHA_TEST);
gl.glAlphaFunc(GL2.GL_GREATER, 0.1f);
gl.glClearColor(0, 0, 0, 0);

有人在init 方法中编写了这段代码并得到了结果。我真的不再了解 Blending,但我添加了这段代码,但什么也没发生!

这里有什么错误或误解吗!?我该怎么做?

顺便说一句,我正在使用jogl 2.0

【问题讨论】:

您到底想做什么?你想让你的 OpenGL 窗口是半透明的吗?如果是这样,那您还需要一个带有 alpha 通道和 alpha 掩码的窗口 pixelformat/visual/fbconfig;因为您依赖 Jogl 创建窗口,所以这取决于 Jogl 是否支持。 @datenwolf 我不想做一个透明的SHELL,我想要一个透明的GLCanvas。想一想,我们在一个外壳上有两个GLCanvases,其中一个在另一个之上,现在我们如何才能透明顶部的 GLCanvas。 【参考方案1】:

您可以通过以下方式制作透明的GLJPanel,通过精炼它的GLCapabilities

/** Creates an instance of a transparent GLJPanel. **/
public static final GLJPanel createTransparentPanel() 
    /* Instantiate a new set of GLCapabilities based upon the System's default parameters. */
    final GLCapabilities lGLCapabilities = new GLCapabilities(GLProfile.getDefault());
    /* Define that we don't wish for the background to be opaque. */
    lGLCapabilities.setBackgroundOpaque(false);
    /* Create a new GLJPanel based on these capabilities. */
    final GLJPanel lGLJPanel = new GLJPanel(lGLCapabilities);
    /* Disable opacity for the panel. */
    lGLJPanel.setOpaque(false);
    /* Return the panel. */
    return lGLJPanel;

然后可以将其添加到透明的JFrame。您可以通过调用为您的 JFrame 启用透明度:

.setBackground(new Color(0,0,0,0));

【讨论】:

你的回答离题了,因为他使用的是 com.jogamp.opengl.swt.GLCanvas 而不是 GLJPanel。 我认为对于这样一个老问题,这是一个合适的解决方法。

以上是关于Jogl:如何在 com.jogamp.opengl.swt.GLCanvas 上制作透明背景?的主要内容,如果未能解决你的问题,请参考以下文章

我如何从这个 jogl 程序中获得更多的每秒帧数? [关闭]

您可以使用 JOGL 创建 3D 组件吗?

在 JOGL 中跨多个 QWidget 共享 VBO

这个简单的 OpenGL/JOGL 模板测试有啥问题?

[转]JOGL安装

JOGL:在指定位置绘制球体会导致问题