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

Posted

技术标签:

【中文标题】有没有办法在带有 Java 的 Android 的 OpenGL ES 2.0 中使用顶点缓冲区中的对象?【英文标题】:Is there a way to use objects in the vertex buffer in Android's OpenGL ES 2.0 with Java? 【发布时间】:2015-12-13 21:20:16 【问题描述】:

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

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

    ;

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢。我就是这么想的,但我希望我错了,并且有办法。

以上是关于有没有办法在带有 Java 的 Android 的 OpenGL ES 2.0 中使用顶点缓冲区中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在Android上将arraybuffer从javascript传递到java?

android工程下不能运行java main程序的解决办法

有没有办法在 Android 项目中将 Eclipse 与 Gradle 集成?

有没有办法在 android studio/Java 上使用 .dae (collada) 文件?

Android:创建一个带有图像且没有文本的切换按钮

带有 3D 标记的 Android 谷歌地图?