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
。想一想,我们在一个外壳上有两个GLCanvas
es,其中一个在另一个之上,现在我们如何才能透明顶部的 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 上制作透明背景?的主要内容,如果未能解决你的问题,请参考以下文章