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

LWJGL:在opengl中不能呈现多个形状

卫焕
2023-03-14

只是对lwjgl做一些修修补补,制作一些2D形状。我不确定我做错了什么,但我不能在屏幕上显示比第一个绿色方块更多的东西。下面是我的窗口循环函数的代码:

private void loop() {
// This line is critical for LWJGL's interoperation with GLFW's
// OpenGL context, or any context that is managed externally.
// LWJGL detects the context that is current in the current thread,
// creates the GLCapabilities instance and makes the OpenGL
// bindings available for use.
GL.createCapabilities();
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glOrtho(0, vidmode.width(),0, vidmode.height(),-1,1);

// Set the clear color
glClearColor(.0f, 0.6f, 0.6f, 0.0f);


// Run the rendering loop until the user has attempted to close
// the window or has pressed the ESCAPE key.
while (!glfwWindowShouldClose(window) && !dataH.isGameOver()) {


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer

    glBegin(GL_QUADS);
    {
        glColor3f(0.1f, 1.0f, 0.1f);  // Green
        glVertex2d(xMapCentre - 100,yMapCentre - 100);
        glVertex2d(xMapCentre - 100,yMapCentre + 100);
        glVertex2d(xMapCentre + 100,yMapCentre + 100);
        glVertex2d(xMapCentre + 100,yMapCentre - 100);

        glColor3f(0.2f, 0.2f, 0.2f); // Dark Gray
        glVertex2f(-0.9f, -0.7f);
        glColor3f(1.0f, 1.0f, 1.0f); // White
        glVertex2f(-0.5f, -0.7f);
        glColor3f(0.2f, 0.2f, 0.2f); // Dark Gray
        glVertex2f(-0.5f, -0.3f);
        glColor3f(1.0f, 1.0f, 1.0f); // White
        glVertex2f(-0.9f, -0.3f);
    }
    glEnd();



    glBegin(GL_TRIANGLES);          // Each set of 3 vertices form a triangle
    {
    glColor3f(0.0f, 0.0f, 1.0f); // Blue
    glVertex2f(0.1f, -0.6f);
    glVertex2f(0.7f, -0.6f);
    glVertex2f(0.4f, -0.1f);

    glColor3f(1.0f, 0.0f, 0.0f); // Red
    glVertex2f(0.3f, -0.4f);
    glColor3f(0.0f, 1.0f, 0.0f); // Green
    glVertex2f(0.9f, -0.4f);
    glColor3f(0.0f, 0.0f, 1.0f); // Blue
    glVertex2f(0.6f, -0.9f);
    }
    glEnd();


    glfwSwapBuffers(window); // swap the color buffers
    // Poll for window events. The key callback above will only be
    // invoked during this call.
    glfwPollEvents();
}
}

任何帮助都将不胜感激,如果我太含糊,请告诉我。谢了。

共有1个答案

俞博涛
2023-03-14

通常,当在三维空间中呈现2D结构时,应该禁用背面剔除gldisable(GL_CULL_FACE)。否则你只能从一个侧面看到他们。在你的着色器中,你必须意识到正常的方向。

在仅2D的情况下,如果要进行背面或正面剔除,请检查三角形的缠绕顺序,将glfontface(GL_CCW)glfrontface(GL_CW)分别设置为逆时针和顺时针缠绕顺序。(当使用glvertex2f时,我无法确认缠绕顺序是否会在2D中产生差异)

还要尝试diable深度测试和深度写入gldisable(GL_DEPTH_TEST)gldepthmask(GL_FALSE)

 类似资料:
  • 假设我有一个金字塔…我知道如何绘制它,我知道如何为整个金字塔设置纹理,但如何为每面墙设置不同的纹理? 我通过在 我试图通过添加<code>GL11.glBindTexture(GL11.GL_TEXTURE_2D,TEXTURE.getTextureID())来绑定纹理 后,但

  • 我到处都找过了,我似乎无法让OpenGL绘制一个简单的四边形。窗口在正确的颜色背景下显示得很好,但OpenGL就是不会绘制框。我正在使用OpenGL 4.4.0-构建20.19.15.4463窗口大小为1920x1080 这是我目前拥有的代码: 在Main.java: 在实体框中:

  • 我在使用OpenGL使颜色正常工作时遇到问题。我正确地绘制了形状,它们看起来很好,但当我调用glColor4d(r,g,b,a)时,它并没有正确地使用RGB应该指定的颜色,而是绘制了不同但相似的颜色。例如,大多数绿色绘制为完全黄色或完全绿色,任何灰色绘制为纯白。 在这个随机颜色值的短列表中,所有颜色值都绘制为实心FFFFFF白色,即使它们都不应为白色。 我用来绘制矩形的代码:

  • 我正在尝试在OpenGL/LWJGL中制作一个简单的按钮, 我可以正确地渲染我的2D四边形,但是当我实现纹理时,整个四边形只有大约3/4的部分得到了纹理,就像这样:https://dl.dropboxusercontent.com/u/60223805/glerror1.png 如果我删除纹理坐标,我得到这个:https://dl.dropboxusercontent.com/u/60223805

  • 我刚刚开始学习LWJGL / OpenGL来创建3D游戏,所以我从小处着手,尝试制作一条线(2D)的简单显示。窗口加载正常,大小合适,但显示器上没有绘制任何内容。有一个空白屏幕,我似乎对代码所做的任何更改都不会影响在屏幕上绘制的内容。这可能是因为我对如何正确执行此操作缺乏了解,或者这可能是我的代码/计算机中的问题。我尝试在我的初始化代码中添加和删除各种东西,如glEnable(GL_TEXTURE

  • 我是最新版本的OpenGL的新手,我试图通过以下教程来学习它:http://open.gl/drawing 然而,我正在使用LWJGL的最新版本,并尽最大努力将其OpenGL与教程一样使用。然而,应该绘制的白色三角形却不是。 这是我的代码: 我的着色器与本教程的着色器相同,但无论如何都会为了便于阅读而发布它们: 。蓄意杀伤 .vert 代码运行,但都是黑色的。有什么想法吗?