gpt4 book ai didi

java - 将 Java 顶点对象数组传递给 OpenGL 入口点

转载 作者:行者123 更新时间:2023-12-01 12:27:59 25 4
gpt4 key购买 nike

我开始将我的游戏从 iOS 移植到 Android,但遇到了问题。

在 iOS 上的标准工作流程中,我会将顶点信息存储在结构数组中:

typedef struct{
float x, y, z;
} Vector3;

Vector3 verts[];

诸如此类的事情。

然后,当需要将我的顶点数据发送到 GL 时,我只需指向 verts 数组,它就会将其视为 float 组。

glVertexAttribPointer(Vertex_POSITION, 3, GL_FLOAT, 0, 0, (void *)verts);

如何在 Java 中执行此操作?

我尝试创建一个 Vector3 类并将其中一些放入一个数组中,但是当我尝试将该数组填充到 GL 中时,它会抛出错误。

最佳答案

按照你的方向,我认为这不能直接起作用。当 Java 中有一个对象数组(例如 Vector3 类的数组)时,该数组包含对这些对象的引用序列,并且每个对象都分配在一 block 单独的内存。

您需要传递给 glVertexAttribPointer()glBufferData() 等 OpenGL 入口点的是包含数据的连续内存块 。对象数组没有这种布局,因此根本不可能直接使用它。

您有多种选择:

  • 不要使用对象数组来存储数据。相反,使用将数据存储在连续内存块中的数据结构。对于浮点值,这可以是 float[]FloatBuffer。 Android 中的 Java 入口点将缓冲区作为参数,因此使用缓冲区是最直接的方法。您应该能够在 Android OpenGL 示例中找到大量示例。
  • 在进行 API 调用之前将数据复制到临时缓冲区。这显然不是很有吸引力,因为额外的数据副本会导致非生产性开销。
  • 用 C++ 编写 OpenGL 代码,并使用 NDK 进行编译。如果您要从其他平台移植 C++ 代码,这也可能会为您节省大量工作。如果您在 iOS 上将 OpenGL 代码与 Objective-C 混合在一起,仍然需要工作。

关于java - 将 Java 顶点对象数组传递给 OpenGL 入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com