java - 如何在android上更新顶点缓冲区?

标签 java android opengl-es

我在 android 上更新顶点信息时遇到问题。基本上,FloatBuffer 最初包含一个立方体形状,但我想在按下按钮时转换这个形状,所以每次按下 UI 按钮时我都必须更新顶点值。我使用以下函数来更改 FloatBuffer:

public float increment(float value)
    {
        float v = 0.0f;
        for(int i = 0; i < boxf.length; i++)
        {
            if(i % 3 == 2 && boxf[i] > 0.0f)
            {
                this_boxf[i] += value;
                box.put(i, this_boxf[i]);
                v = box.get(i);
            }
        }
        return v;
    }

这是绘制函数:

public void draw(GL10 gl) {
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, box);
        gl.glNormalPointer(GL10.GL_FLOAT,0, normals);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
    }

立方体显示正确,但当我尝试更改其 FloatBuffer 时,没有任何变化。我在谷歌上四处阅读,似乎我必须使用 glBufferData。但是,GL10 没有这样的功能。我将如何做到这一点?

最佳答案

如果您的渲染模式设置为 RENDERMODE_WHEN_DIRTY,则仅当 View 无效或调用 requestRender() 时才会调用 draw() 函数,因此您不会看到任何变化当您更新顶点缓冲区时。

为了查看您的更改,您可以将渲染模式设置为 RENDERMODE_CONTINUOUSLY,或者在更新顶点缓冲区后调用 GLSurfaceView 对象上的 requestRender()。

关于java - 如何在android上更新顶点缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027855/

相关文章:

java - 如何将文本渲染为位图并绘制它

java - 从 firebase-crashlytics 18.3.3 更新到 18.3.4 时 Android 应用程序崩溃

java - jsf - 字符串无法解析为数字

java - 带有 Fragment 和 ViewPager 的 NullPointerException

iphone - ios游戏制作 mask 层效果

opengl-es - OpenGL ES - 使用 glDrawArrays()

用于解析和构建逻辑表达式的 Java 库

java - 从 Jar 文件中的资源复制/提取目录

android - Android : some issue 中的重复补间动画

java - 在设备上运行的 PopupWindow 中聚焦 EditText 时出现异常