当前位置: 首页 > 知识库问答 >
问题:

如何用LWJGL 3绘制形状

李星波
2023-03-14

最初我用的是:

public void DrawQuad(int x, int y, float width, float height) {
        GL11.glColor3f(0, 255, 255);

        glBegin(GL_QUADS); 

        glVertex2f(-x, y);
        glVertex2f(width, y);
        glVertex2f(width, -height);
        glVertex2f(-x, -height);

       glEnd();
}

但它只是给了我一个错误:

public static void run() {
        System.out.println("Hello LWJGL " + Version.getVersion() + "!");

        Display window1 = new Display(640, 480);
        window1.init();

        while(window1.isRunning()) {
            /*
            glBegin(GL_QUADS); 
            glVertex2f(-0.5f, 0.5f);
            glVertex2f(0.5f, 0.5f);
            glVertex2f(0.5f, -0.5f);
            glVertex2f(-0.5f, -0.5f);
            glEnd();
            */

            window1.DrawQuad(10, 10, 50, 50);

            window1.update(); 
        }

        window1.terminate();
    }



public static void main(String[] args) {
    run();
}

显示类中的代码:

public long window;
private int length;
private int heigth;

public Display(int length, int heigth) {
    this.length = length;
    this.heigth = heigth;
}

public void init() {
    if(!glfwInit()) {
        throw new IllegalStateException("Failed to initalize GLFW!");
    }

    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
    window = glfwCreateWindow(length, heigth, "test", 0, 0); 
    //glfwGetPrimaryMonitor() Replace for full screen^
    if(window == 0) {
        throw new IllegalStateException("Failed to initalize Window!");
    }

    GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor());
    glfwSetWindowPos(window, (videoMode.width() - length) / 2, (videoMode.height() - heigth) / 2);

    glfwShowWindow(window); 


}

public boolean isRunning() {
    return(!glfwWindowShouldClose(this.window));
}

public void update() {
    glfwSwapBuffers(window); 
    glfwPollEvents();
}

public void terminate() {
    glfwTerminate();
}

public void DrawQuad(int x, int y, float width, float height) {
    GL11.glColor3f(0, 255, 255);

    glBegin(GL_QUADS); 

    glVertex2f(-x, y);
    glVertex2f(width, y);
    glVertex2f(width, -height);
    glVertex2f(-x, -height);

    glEnd();
    //glLoadIdentity(); 
}

共有1个答案

司寇光华
2023-03-14

您没有将OpenGL上下文绑定到窗口。您需要在窗口创建后添加GLFWMakeContextCurrent(window)

 类似资料:
  • 问题内容: 使用Mobile Safari 转到http://m.google.com页面时,您会在页面顶部看到漂亮的栏。 我想那样画一些梯形(美国:梯形),但我不知道怎么做。我应该使用CSS3 3D转换吗?如果您有实现此目标的好方法,请告诉我。 问题答案: 您可以使用以下CSS: 制作所有这些形状真的很酷,请查看以下更漂亮的形状: http://css-tricks.com/examples/S

  • 我只是试图用DrawOval()方法画圆,当我运行程序时,它只显示小正方形。我试图将构造函数添加到Surface类,但它不起作用。这是我制作的代码:

  • 通过 Entity 添加形状 先来看一个添加立方体的例子 var viewer = new Cesium.Viewer('cesiumContainer'); var redBox = viewer.entities.add({ name : 'Red box with black outline', position: Cesium.Cartesian3.fromDegrees(-107

  • 用Pixi绘制几何图形 使用图片纹理是制作精灵最有效的方式之一,但是Pixi也提供了自己低级的绘画工具。你可以使用它们来创造矩形、线段、复杂的多边形以及文本。并且它使用和Canvas Drawing API几乎一致的api,所以如果你熟悉canvas的话,那么几乎没有什么新东西需要学习。当然另一个巨大的优势在于,不同于Canvas的绘画api,你使用Pixi绘制的图形是通过WebGL在GPU上渲染

  • 假设我有三个锚,来自阿拉片段的命中结果。 锚定=命中结果。createAnchor(); 如何使用Sceneform绘制三角形并应用自定义纹理?

  • 我有一个名为pct的数据集 我想使用ggplot2或绘图包获得正条形图和负条形图。 给定下表中的数据集 我想得到这样的东西