gpt4 book ai didi

java - 使用 JOGL 调整 GLJPanel 的大小会导致我的模型消失

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:08 24 4
gpt4 key购买 nike

我转而使用 GLCanvas 中的 GLJPanel 来避免某些闪烁问题,但这本身就造成了一些意想不到的后果。

从我目前收集到的信息来看,GLJPanel 每次调整大小时都会调用 GLEventListener.init(),如果我很幸运,否则我的模型将完全消失。

我试过调试它,但我无法纠正这种行为。这是我的 init() 函数:

    gl.glShadeModel( GL.GL_SMOOTH );

gl.glEnable( GL.GL_DEPTH_TEST );
gl.glDepthFunc( GL.GL_LEQUAL );
gl.glDepthRange( zNear, zFar );

gl.glDisable( GL.GL_LINE_SMOOTH );
gl.glEnable(GL.GL_NORMALIZE);

gl.glEnable( GL.GL_BLEND );
gl.glBlendFunc( GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA );

// set up the background color
gl.glClearColor( ((float)backColor.getRed () / 255.0f),
((float)backColor.getGreen() / 255.0f),
((float)backColor.getBlue () / 255.0f), 1.0f);

gl.glEnable ( GL.GL_LIGHTING );
gl.glLightfv( GL.GL_LIGHT0, GL.GL_AMBIENT, Constants.AMBIENT_LIGHT, 0 );
gl.glLightfv( GL.GL_LIGHT0, GL.GL_DIFFUSE, Constants.DIFFUSE_LIGHT, 0 );

gl.glEnable ( GL.GL_LIGHT0 );

gl.glTexEnvf( GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE );
gl.glHint( GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST );

// code to generate model

除了从 init() 中删除所有内容并将其添加到我的 display() 函数之外,还有什么办法可以解决这个问题吗?考虑到 GLJPanel 的 init() 和 reshape() 行为,我不确定这是否会修复它。

最佳答案

就 JOGL 而言,GLJPanel 和 CLCanvas 在功能上基本相同。唯一的区别是 GLJPanel 是 JComponent 和轻量级,而 GLCanvas 是 Component 和重量级。您看到的任何问题很可能不是由这些差异造成的(尽管 JOGL 不是 Java 中最稳定的部分,并且可能存在“未记录”的差异)。

消失的模型可能是由于实际上没有调用绘制代码,或者在 GL 初始化中错误设置了某些东西(很容易做到)。我建议将所有内容都转移到 display() 函数。如果问题解决了,它会一次一个地向后移动(这只是一个性能问题)。

话虽如此,我没有看到您在 init() 中设置视口(viewport)大小。这是每次窗口大小更改时必须做的事情之一。

关于java - 使用 JOGL 调整 GLJPanel 的大小会导致我的模型消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com