2015-01-21 195 views
0

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

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); 
+0

你肯定'Display.getWidth()== 800 && Display.getHeight()== 600'? – 2015-01-21 11:07:17

+0

是的。我用sysout在循环中确认了它。它是800x600。它也正确地读我的鼠标,因为坐标是好的(也通过调用sysout而致) – Levvy 2015-01-21 11:20:11

回答

1

glRecti不工作的方式,预计角落

这样的坐标,而不是你应该做的:

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

谢谢。我真的不知道它是如何运作的,它正在吸引别人的注意 – Levvy 2015-01-21 11:38:45