有没有办法在 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 通过引用存储对象——所以你宁愿有一个引用数组。实际对象在内存中没有连续对齐。
在 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 通过引用存储对象——所以你宁愿有一个引用数组。实际对象在内存中没有连续对齐。