gpt4 book ai didi

java - 如何在 openGL ES 3 android 中创建 VAO

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:12 26 4
gpt4 key购买 nike

所以在普通的openGL中你可以创建一个像这样的VAO

glGenVetrexArray();

并期望此函数为您创建一个 VAO 并为您提供一个 int,即 VAO ID。

问题

在android中该函数是这样的:

glGenVetrexArray(int n , int[] array, int offset);

我不知道这些参数是什么,也不知道如何使用上述方法创建 VAO 并获取 id?

最佳答案

n - 要返回的 VAO 数量(金额);

array - 包含创建对象标识符的 n 个元素的数组;

offset - 设置 VAO 的偏移量(通常 = 0)。

创建 VAO 时,使用以下函数将其设置为当前 VAO:GLES30.glBindVertexArray(VAO[0])。绑定(bind)VAO后,所有调用,例如:glBindBuffer、glEnableVertexAttribArray、glVertexAttribPointer,都会影响当前VAO。

public class Renderer implements GLSurfaceView.Renderer {
private int[] VBOIds = new int[2]; // VertexBufferObject Ids
private int[] VAOId = new int[1]; // VertexArrayObject Id

public Renderer(...) {
// create vertex buffer objects
VBOIds[0] = 0;
VBOIds[1] = 0;
GLES30.glGenBuffers(2, VBO, 0);
...
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, VBO[0]);
GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, verticesData.length * 4,
vertices, GLES30.GL_STATIC_DRAW);
...
GLES30.glBindBuffer(GLES30.GL_ELEMENT_ARRAY_BUFFER, VBO[1]);
GLES30.glBufferData(GLES30.GL_ELEMENT_ARRAY_BUFFER, indicesData.length * 2, indices, GLES30.GL_STATIC_DRAW);
...
}

public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
GLES30.glGenVertexArrays(1, VAOId, 0); // Generate VAO Id
GLES30.glBindVertexArray(VAOId[0]); // Bind the VAO
// invokes commands glBindBuffer, glEnableVertexAttribArray,
// glVertexAttribPointer for VBOs
...
// Reset to the default VAO (default VAO always is 0)
GLES30.glBindVertexArray(0);
}

public void onDrawFrame() {
...
GLES30.glBindVertexArray(VAOId[0]); // active VAO
// Draw on base the VAO settings
GLES30.glDrawElements(GLES30.GL_TRIANGLES, indicesData.length,
GLES30.GL_UNSIGNED_SHORT, 0);
// Return to the default VAO
GLES30.glBindVertexArray(0);
}
}

您可以看到使用 VAO 的一个很好的示例 here

Project VertexArrayObjects for Android

关于java - 如何在 openGL ES 3 android 中创建 VAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60660082/

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