2012-07-25 64 views
0

我试图用JOGL淡入/淡出图像。我可以渲染图像,但它总是呈现完整的强度。下面是代码:OpenGL淡出/不工作

private void render(GLAutoDrawable glad) { 
GL2 gl = glad.getGL().getGL2(); 

// Prepares the rendering, things such as disabling depth, clearing the buffer bit etc 
setUpGL(gl); 

BufferedImage background = main.getCurrentState().getImage(); 
// Render the background, adapted from here: http://bit.ly/QjeusP 
renderImage(gl, background, background.getWidth(), background.getHeight()); 

gl.glEnable(GL2.GL_BLEND); 
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); 
gl.glColor4f(0, 0, 0, alpha); 
gl.glBegin(GL2.GL_QUADS); 
gl.glVertex2f(0, background.getHeight()); 
gl.glVertex2f(background.getWidth(), background.getHeight()); 
gl.glVertex2f(background.getWidth(), 0); 
gl.glVertex2f(0, 0); 
gl.glEnd(); 
gl.glDisable(GL2.GL_BLEND); 
} 

变量alpha是浮子,它是由0.1对于每个递增渲染,如果它超过1.0,它是由0.1递减,直到它小于0,则递增,并且因此上。

编辑1:这里是一个更新的Alpha值码:

private void update() { 
    if (isTransparent) { 
    alpha += 0.1f; 
    if (alpha >= 1.0f) { 
     alpha = 1.0f; 
     isTransparent = false; 
    } 
    } 
    else { 
    alpha -= 0.1f; 
    if (alpha <= 0.0f) { 
     alpha = 0.0f; 
     isTransparent = true; 
    } 
    } 
} 
+2

也许你应该显示'renderImage'的代码和更新'alpha'值的代码?而什么意思*“它不会淡入”*?图像是否总是呈现完整的强度? – 2012-07-25 15:34:58

+0

@ChristianRau道歉,请参阅编辑 – mikeythemissile 2012-07-25 15:41:26

+0

'alpha'在哪里定义和使用? – 2012-07-25 15:42:29

回答

2

它可能是一个深度测试的问题。我不知道renderImage是干什么的,但如果它只是在z = 0上渲染一个屏幕对齐的纹理四边形,那么在深度测试启用时,您渲染的四边形不会呈现,因为它与纹理处于相同的深度四。所以尝试glDisable(GL_DEPTH_TEST),同时渲染你的半黑色四元组(然后glEnable它)。

编辑:愚蠢的想法,但它可能是你改变阿尔法快,让你最终只有一个恒定的灰色阴影?

+0

这是我的第一个想法,但setUpGL包含行'gl.glDisable(GL2.GL_DEPTH_TEST);' – mikeythemissile 2012-07-25 15:42:25

+0

我试着降低阿尔法变化的速度,但它没有任何区别。问题在别处(请参阅我的答案) – mikeythemissile 2012-07-27 15:57:08