将C++ OpenGL转换为Java(LWJGL), glBufferData();

use*_*827 2 c++ java opengl lwjgl .obj

我一直在尝试创建一个 .obj 解析器来将从 Blender 导出的文件转换为 OpenGL 渲染代码。我遵循了与我正在做的类似的教程,但它是用 C++ 编写的,我几乎无法理解。我已经设法让解析器一切正常(我认为),但是当实际渲染到模型时,我很难创建与 C++ 代码等效的 java 代码。本教程使用这行代码:

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 5

FloatBuffer vertexData = BufferUtils.createFloatBuffer(amountOfVertices * vertexSize);
vertexData.put(vertices);
vertexData.flip();

glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

是等效的 java 代码,其中vertices是包含顶点数据的浮点数组,vertexSize是每个顶点的浮点数,并且amountOfVertices是不言自明的。如果您愿意,您可以切换,amountOfVertices * vertexSize因为它们应该是相等的。vertices.length

  • @RetoKoradi:我相信 Java.nio 缓冲区在包装时可能不“直接”存在问题。这使得将内存指针传递给 GL 变得困难。对于缓冲区对象来说可能没有多大关系,但是在使用客户端内存时这是一个大问题。 (2认同)