0

我希望我的程序每次左键单击时都制作一个四边形。我是 lwjgl 的新手,正在尝试使用 if 语句

    if(lClick == true){
drawQuad();
}

现在,(从调试中)我知道 if 语句有效,所以我的错误必须在我的 drawQuad() 变量中。

这是我的drawQuad:

public static void drawQuad(){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); // Resets any previous projection matrices
    glOrtho(0, 640, 480, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);

    //System.out.println("drawQuad Is Being Used");

glBegin(GL_QUADS);
        glVertex2i(c1, c2);
        glVertex2i(c1, c4);
        glVertex2i(c2, c1);
        glVertex2i(c2, c3);
glEnd();

}

我的 c1、c2、c3 和 c4 整数是

        int c1 = Mouse.getX() + 25;
        int c2 = Mouse.getX() - 25;
        int c3 = Mouse.getY() + 25;
        int c4 = Mouse.getY() - 25;

所有这些整数都在

while(!Display.isCloseRequested()){}
4

4 回答 4

0

一个常见的新手错误是从输入事件处理程序调用 OpenGL 绘图函数。根据使用的框架,输入事件处理程序中可能没有活动的 OpenGL 上下文。

而不是直接绘制四边形,您应该附加到某个列表或数组,并在绘图代码中根据该列表/数组中的数据绘制四边形。

于 2013-06-30T22:43:10.907 回答
0
    int c1 = Mouse.getX() + 25;
    int c2 = Mouse.getX() - 25;
    int c3 = Mouse.getY() + 25;
    int c4 = Mouse.getY() - 25;

有没有可能你没有在你的整数上加上 25?下面可能是一个解决方案(附加 = 运算符)。抱歉,这是我的第一个贡献。

    int c1 = Mouse.getX() += 25;
    int c2 = Mouse.getX() -= 25;
    int c3 = Mouse.getY() += 25;
    int c4 = Mouse.getY() -= 25;
于 2013-07-01T07:29:44.467 回答
0

在 OpenGL 中,您必须每帧重绘整个场景。因此,不是在单击鼠标时绘制一次四边形,而是应该存储每个四边形的位置(可能在 ArrayList 中?)。然后每次调用draw/render函数时,您都可以绘制已放置的每个四边形。

作为旁注,我建议学习 OpenGL 3+ 而不是传统的 OpenGL。

于 2013-07-04T22:18:16.687 回答
0

你在更新你的变量吗,比如当你点击时你在说

public void updateCords(){
    c1 = Mouse.getX() + 25;
    c2 = Mouse.getX() -= 25;
    c3 = Mouse.getY() += 25;
    c4 = Mouse.getY() -= 25;
}

如果不是,从程序第一次运行的那一刻起,电线将保持不变

于 2013-07-05T06:21:12.240 回答