2012-07-25 3 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); 
} 

переменная альфа представляет собой поплавок, который увеличивается на 0,1 для каждого рендеринга, если оно превышает 1,0, то уменьшается на 0,1, пока она не станет меньше, чем 0, то увеличивается, и так на.

EDIT 1: Вот код, который обновляет значение альфа:

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'? И что означает * «он не исчезает» *? Является ли изображение всегда визуализированным с полной интенсивностью? –

+0

@ChristianRau извинения, см. Править – mikeythemissile

+0

Где именно 'alpha' определен и используется? –

ответ

2

Это может быть проблемой глубины тестирования. Я не знаю, что делает renderImage, но если он просто отображает выровненный по экрану текстурированный квадрат на z = 0, то квадрат, который вы визуализируете над ним, не будет отображаться при включении глубинного тестирования, так как он находится на той же глубине, что и текстура квад. Поэтому попробуйте glDisable(GL_DEPTH_TEST) при рендеринге вашего получерного квадрата (и glEnable после этого).

EDIT: Глупые мысли, но может быть, вы так быстро меняете альфа, чтобы в конце концов вы имели постоянный серый оттенок?

+0

Это была моя первая мысль, однако setUpGL содержит строку 'gl.glDisable (GL2.GL_DEPTH_TEST);' – mikeythemissile

+0

Я попытался уменьшить скорость альфа-изменения, но это не имело никакого значения , Проблема была в другом месте (см. Мой ответ) – mikeythemissile

Смежные вопросы