【问题标题】:Moved renderer in lwjgl rendering在 lwjgl 渲染中移动渲染器
【发布时间】:2015-01-21 10:49:04
【问题描述】:

我在 lwjgl 中做了一个简单的应用程序并创建了简单的 gui。现在我有框架和面板。但有一个问题。 因为 (Display 800x600) 当我在 Panel(x,y,w,h) (0,0,64,64) 上制作面板时一切正常,但是当我在其他位置 (x,y 点 0,0位于左上角)它呈现移动的面板。 空白区域是我的面板,当我在其上拖动鼠标时它应该会改变颜色。它是在 (417,417,64,64) 上创建的,但它是在 (90,90) 上渲染的。 我已经渲染了字体来显示它的所有位置。我在此图像上绘制的蓝色框应该在它应该在的位置,它看起来就像面板在那儿,因为当我将鼠标拖到那里时,空白区域正在改变颜色,但是这个空白区域应该在那里。 我的代码如下所示: 我正在将所有组件添加到 HashMap 中,例如 Panels。

glColor3f(backgroundColor.getRed(), backgroundColor.getGreen(),
                backgroundColor.getBlue());
        if (hasFocus()) {
            glColor3f(1f, 0f, 0f);
        }
        glPushMatrix();
        glRecti(getX(), getY(), getWidth(), getHeight());
        glPopMatrix();

还有initGL方法:

glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glScalef(1.0f, 1.0f, 1.0f);
        glOrtho(0, 800, 600, 0, 1, -1);
        glFrustum(-1, 1, -1, 1, 0.0, 40.0);
        glViewport(0, 0, Display.getWidth(), Display.getHeight());
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glShadeModel(GL_SMOOTH);

【问题讨论】:

  • 你确定Display.getWidth()==800 && Display.getHeight()==600?
  • 是的。我在循环中使用 sysout 确认了它。它是 800x600。它也能正确读取我的鼠标,因为坐标没问题(也可以通过调用 sysout 来检查)

标签: java opengl matrix rendering lwjgl


【解决方案1】:

glRecti 不能以它期望角坐标的方式工作

所以你应该这样做:

glRecti(getX(), getY(), getX()+getWidth(), getY()+getHeight());

【讨论】:

  • 谢谢。我真的不知道它是如何工作的,它正在画一些别的东西
猜你喜欢
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多