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

标签 java swing opengl jogl

我转而使用 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/

相关文章:

java - 在游戏中随机生成物体

java - 如何根据文本字段输入从 JTable 中删除行

java - 将不透明度从 0.0 0.1 .. 更改为 1.0 以创建动画效果

c++ - Matrix4转GLSL统一值

c++ - 在 C++ 中无效使用类?

Java正则表达式跳过一些字符只匹配一次出现的数字,间歇句点

java - (JAVA) 添加新组件时如何实现滚动?

java.lang.UnsupportedOperationException : Not supported yet

c++ - OpenGL 对象不转换为旋转轴

java - 我无法从 plpgsql 函数中读取 java 返回的数组