我开始将我的游戏从iOS移植到Android,我遇到了问题。
在iOS上的标准工作流程中,我将顶点信息存储在一个结构数组中:
typedef struct{
float x, y, z;
} Vector3;
Vector3 verts[];
那种事。
然后,当我将顶点数据发送到GL时,我只会指向顶点数组,它会将它视为一个浮点数组。
glVertexAttribPointer(Vertex_POSITION, 3, GL_FLOAT, 0, 0, (void *)verts);
我如何用Java做到这一点?
我尝试制作一个Vector3类并将其中的一些放入数组中,但是当我尝试将该数组填充到GL中时会抛出错误。
答案 0 :(得分:1)
根据你的方向,我不认为这可以直接起作用。当你有一个Java对象数组(就像你的Vector3
类的数组)时,数组包含一个引用序列到这些对象,并且每个对象都分配在一个单独的块中记忆。
您需要传递给glVertexAttribPointer()
或glBufferData()
等OpenGL入口点的是包含数据的连续内存块。一组对象没有该布局,因此根本无法直接使用它。
您有多种选择:
float[]
或FloatBuffer
。 Android中的Java入口点将缓冲区作为参数,因此使用缓冲区是最直接的方法。您应该能够在Android OpenGL示例中找到大量示例。