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

LWJGL-未渲染四边形

益绯辞
2023-03-14

我已经试着让这段代码工作了一段时间,但我仍然不知道我做错了什么。(LWJGL-Java)

我曾尝试在网上查看其他人的代码,但我找不到任何重大区别。事实上,我学会了将OpenGL与C结合使用,所以我的大脑可能会被它卡住,这可能就是我找不到错误的原因。

这是init(调用一次)

FloatBuffer vertices = BufferUtils.createFloatBuffer(4 * 5);
    vertices.put(new float[]{
            // pos                  // Color
            0.5f, 0.5f,             0.5f, 0.0f, 0.5f,
            0.5f, -0.5f,            0.5f, 0.0f, 0.75f,
            -0.5f, -0.5f,           0.0f, 1.0f, 0.0f,
            -0.5f, 0.5f,            0.5f, 0.5f, 1.0f
    });
    vertices.flip();

    ByteBuffer indices = BufferUtils.createByteBuffer(2 * 3);
    indices.put(new byte[]{
            0, 1, 3,
            1, 2, 3
    });
    indices.flip();

    // VAO
    VAO = GL30.glGenVertexArrays();
    GL30.glBindVertexArray(VAO);

    // VBO
    VBO = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);

    // EBO
    EBO = glGenBuffers();
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    glEnableVertexAttribArray(0);
    //                         v - position in layout (see shader)
    //                            v - Nb of component per vertex (2 for 2D (x, y))
    //                                                v - Normalized ? (between 0 - 1)
    //                                                       v - Offset between things (size of a line)
    //                                                                     v - Where to start ?
    glVertexAttribPointer(0, 2, GL11.GL_FLOAT, false, 5 * Float.SIZE , 0);

    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL11.GL_FLOAT, false, 5 * Float.SIZE , 2 * Float.SIZE);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

    // Unbinds the VAO
    GL30.glBindVertexArray(0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);

这是渲染函数:

shaderProgram.bind();

GL30.glBindVertexArray(VAO);

GL11.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_BYTE, 0);

GL30.glBindVertexArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);

着色器:

顶点:

#version 330 core

layout(location = 0) in vec2 position;
layout(location = 1) in vec3 color;

out vec4 Color;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    Color = vec4(color, 1.0);
}

Framgent公司:

#version 330 core

in vec4 Color;

out vec4 color;

void main()
{
    color = Color;
}

共有1个答案

端木宏才
2023-03-14

在官方Java留档中,Float. SIZE定义为:

用于表示浮点值的位数。

由于glVertexAttribPointer()需要以字节为单位的跨度和偏移量参数,因此您必须将其除以8,并改用(Float. SIZE/8)

 类似资料:
  • 下面的LWJGL代码将在屏幕中心呈现一个蓝色正方形。相反,我得到了一个空白的白色屏幕。就像渲染根本不工作,或者我在屏幕外渲染。 我是OpenGL和LWJGL的新手,所以我力不从心。我浏览了所有内容,但似乎找不到任何可能与代码有关的问题。 OpenGLTest.scala VertexArray.scala

  • 在过去的几天里,我一直在尝试将纹理缩放为Quad(OpenGL 3)... 但由于某些原因,我只得到渲染到四元网格上的图像左上角像素,我使用平滑的UTIL加载和绑定纹理。。。。 代码如下: 主要游戏。Java语言 着色器程序。Java语言 顶点着色器: 片段着色器: 装载机。Java语言 模型Java语言 vbo. java 这是我想要渲染的图像(它是测试图像)(PNG格式)一头奶牛: 这是我得到

  • (这是我第二次问这个问题了。上次我得到了一个没有解决问题的答案(那里的答案提到了我试图修复这个问题时偶然留下的一点代码)。我还稍微改变了问题本身——我改变了代码的顺序,把我认为错误更高的部分放在前面,并补充说我正在使用macOS,这可能是它不起作用的原因)。 所以,我刚刚开始学习LWJGL 3,我混合使用了一些教程和示例代码来制作一些东西,应该使用VAOs和VBOs将矩形渲染到洋红屏幕上。没有错误

  • 背景信息: 我正在使用OpenGL和LWJGL 3在屏幕上绘制一些四边形。我需要知道鼠标何时在四轴上。当我将四边形渲染到屏幕上时,我使用OpenGL坐标,X和Y的范围是从-1到1,而(0,0)在屏幕的中心。当我得到我使用的鼠标位置时 这给了我从0到窗口宽度或高度的坐标,在左上角(标题栏下方)有(0,0)。然后取鼠标坐标并计算OpenGL坐标。 例如,如果我的窗口大小为(800,600),而我的鼠标

  • 我试图使用opengl在lwjgl显示器上显示自定义字体的文本。目前,我正在使用自定义位图字体类从png文件加载字体,并以与tileset相同的方式显示它们。它工作正常,但当我将文本绘制到屏幕上时,字符之间的间距完全不同,因为字母M比字母i宽得多,并且所有字符的宽度都不同。有没有办法检测每个字符的宽度?或者是否有任何特定于lwjgl字体的库?有一种方法可以使用slick2d来实现,但加载整个库只是

  • 我试图弄清楚为什么我不能用LWJGL 3渲染任何纹理。我尝试了多种加载(PNGDecoder、STB、BufferedImage)和渲染纹理的方法。但结果总是一个白色的四边形。 主要类: 加载方法: 渲染方法: ModelTexture类只是存储一些现在不使用的信息,blue.png是16x16的png文件。 这是我在启动程序时得到的输出: