【问题标题】:Converting C++ OpenGl to Java(LWJGL), glBufferData();将 C++ OpenGl 转换为 Java(LWJGL), glBufferData();
【发布时间】:2014-08-04 15:37:51
【问题描述】:

我一直在搞乱 LWJGL 试图创建一个 .obj 解析器,该解析器将从搅拌器导出的文件转换为 OpenGL 渲染代码。我遵循了一个类似于我正在做的教程,但它是用 C++ 编写的,我几乎无法理解。我已经设法让所有东西都与解析器一起工作(我认为),但是当实际渲染到模型时,我很难创建一个与 c++ 代码等效的 java。本教程使用这行代码:

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);

然后(显然)它绘制数组。我很确定我需要将 Vecotor3f 从我的列表(顶点)转换为 FloatBuffer,我不需要第二个参数(因为 java 将处理大小)。然而,我不知道如何做到这一点,我仍在寻找关于 java 的方法,并且以前从未使用过这个类。

【问题讨论】:

    标签: java c++ opengl lwjgl .obj


    【解决方案1】:
    FloatBuffer vertexData = BufferUtils.createFloatBuffer(amountOfVertices * vertexSize);
    vertexData.put(vertices);
    vertexData.flip();
    
    glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
    

    是等效的java代码,其中vertices是一个包含顶点数据的浮点数组,vertexSize是每个顶点的浮点数,amountOfVertices是不言自明的。您可以根据需要将amountOfVertices * vertexSizevertices.length 切换,因为它们应该相等。

    【讨论】:

    • 你不能简单地使用FloatBuffer.wrap(vertices)吗?
    • 您好,感谢您的帮助。如果我正确阅读了您的回复,我需要一个包含所有顶点的浮点数组吗?我目前让我的解析器将顶点作为 Vector3f 的列表返回。如何从 Vector3f 对象列表中将顶点转换为浮点数组?
    • @user3311827 你不需要它们在float[]中,你可以用vertexData.put(float f)按顺序将它们放入缓冲区,如果你愿意,记得在你全部添加后翻转它。
    • @RetoKoradi:我相信 Java.nio 缓冲区在包装时可能不是“直接”的问题。这使得将指向内存的指针传递给 GL 很困难。对缓冲对象来说可能没多大关系,但在使用客户端内存时却是个大问题。
    • 好的,这可以工作,但我还看不到我的模型,可能是相机问题。明天会努力让它工作。感谢您的帮助!
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多