Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenGL淡出/淡入不工作_Java_Opengl_Jogl - Fatal编程技术网

Java OpenGL淡出/淡入不工作

Java OpenGL淡出/淡入不工作,java,opengl,jogl,Java,Opengl,Jogl,我正在尝试使用JOGL淡入/淡出图像。我可以很好地渲染图像,但是它总是以全强度渲染。代码如下: 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

我正在尝试使用JOGL淡入/淡出图像。我可以很好地渲染图像,但是它总是以全强度渲染。代码如下:

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是一个float,每次渲染时它都会递增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;
    }
  }
}
private void update(){
如果(透明){
α+=0.1f;
如果(α>=1.0f){
α=1.0f;
isTransparent=假;
}
}
否则{
α-=0.1f;

如果(alpha这可能是一个深度测试问题。我不知道
渲染
有什么作用,但如果它只是在
z=0
处渲染一个屏幕对齐的纹理四元体,那么在启用深度测试时,您在其上渲染的四元体将不会被渲染,因为它与纹理四元体的深度相同。因此,请尝试
glDisable(GL\u depth\u TEST)
在渲染半黑色四边形时(以及
glEnable
之后)


编辑:愚蠢的想法,但可能是你改变alpha的速度太快,以至于最终只有一个恒定的灰色阴影吗?

也许你应该显示
渲染的代码和更新
alpha
值的代码?什么意思是“它不会褪色”?图像是否始终以全强度渲染?@ChristianRau抱歉,请参阅编辑,其中定义和使用了
alpha
?@DanW alpha在同一类
私有浮点alpha
中定义,并且仅在更新方法中修改。从何处调用
更新
方法?这是我的第一个想法,however setUpGL包含行
gl.glDisable(GL2.gl_DEPTH_TEST);
我尝试降低alpha变化率,但没有效果。问题出在别处(请参阅我的答案)