【问题标题】:How do I get Nifty GUI to use my coordinate system?如何让 Nifty GUI 使用我的坐标系?
【发布时间】:2012-11-15 21:01:11
【问题描述】:

出于各种原因,我喜欢让 openGL 使用像素以外的坐标,这可以通过以下方式轻松设置:

Display.setDisplayMode(new DisplayMode(800, 600));
GLU.gluOrtho2D(0f,32f,0f,24f);

但是,既然我已经开始尝试将 Nifty GUI 集成到我的应用程序中,那么这种坐标规模就会导致问题。也就是说,Nifty 似乎认为 openGL 使用像素作为单位,因此将一切渲染为巨大的。有没有办法解决这个问题?

【问题讨论】:

    标签: opengl lwjgl nifty-gui


    【解决方案1】:

    为什么不只是按照 NiftyGUI 想要的方式(像素坐标)做事,而是在渲染 NiftyGUI 时。这意味着:

    gl.glMatrixMode(gl.GL_PROJECTION_MATRIX);
    GLU.gluOrtho2D(0f,32f,0f,24f);
    //Render my stuff
    gl.glMatrixMode(gl.GL_PROJECTION_MATRIX);
    gl.glLoadIdentity();
    GLU.gluOrtho2D(0f,width,0f,height);
    //Render with NiftyGUI.
    

    【讨论】:

    • 这行得通,但是我遇到了一个不同的问题:我通过 glTranslate 移动了“相机”。对 glLoadIdentity() 的调用使得这个动作永远不会被注册。我试过用推送/弹出矩阵包围漂亮的 gui 渲染,但这只会破坏一切:-(
    • @zergylord:这是一个不同的问题,所以你应该使用“提问”按钮来提问。但是如果你这样做了,建议你提供适当的源代码来看看你的矩阵变换是做什么的。
    【解决方案2】:

    您犯了经典的 OpenGL 新手错误:一次性状态设置。

    OpenGL 未初始化。您可以根据需要重新设置每个状态。在您的情况下,这样做完全是为了在需要时将 projection 矩阵设置为像素映射正射投影,并在使用 Nifty 时设置为其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2015-03-18
      • 2015-10-20
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多