有没有办法在 Android 的 OpenGL ES 2.0 和 Java 中使用顶点缓冲区中的对象?

Is there a way to use objects in the vertex buffer in Android's OpenGL ES 2.0 with Java?

在 C++ 中,我可以定义一个顶点,例如

class Vertex
    {
    public:
        Vertex();
        ~Vertex();
        //Position
        float x, y, z, w;
        //Normals
        float nx, ny, nz, nw;
        //Textures
        float tu, tv;

    };

然后创建一个包含上述顶点对象数组的顶点缓冲区。我会告诉着色器位置、法线和纹理的偏移量是多少,着色器将能够正确映射这些值。

在 Android 上的 Java 中,使用 OpenGL ES 2.0,我已经能够为位置、法线和纹理创建单独的浮点数组,或者为所有这些创建单个浮点数组我在其中指定了偏移量,但我还没有找到一种方法来告诉缓冲区我正在使用一个对象数组。这可能吗?还是我需要自己生成一个浮点数数组?

不,据我所知这在 Java 中是不可能的。

在 C 和 C++ 中,这就像在对象数组中一样工作,对象在内存中连续对齐,它们的成员变量也是如此。所以你有一大块连续的数据要传递给 GL。

Java 通过引用存储对象——所以你宁愿有一个引用数组。实际对象在内存中没有连续对齐。