2012-07-25 74 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