gpt4 book ai didi

android - 将纹理应用于顶点缓冲区对象基元

转载 作者:行者123 更新时间:2023-11-30 04:31:27 25 4
gpt4 key购买 nike

在 Android 中如何将纹理应用于顶点缓冲区对象?

回答:


代码工作正常,除了它缺少对

的调用
glEnable(GL_TEXTURE_2D);

这个和调用

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

两者都是必需的,以便顶点缓冲区对象绘制纹理。


问题:

据我所知,首先你必须创建一个 NIO 缓冲区:

ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
tbb.order(ByteOrder.nativeOrder());
FloatBuffer textureBuffer = tbb.asFloatBuffer();
textureBuffer.put(texCoords);
textureBuffer.position(0);

在此代码示例中,数组 texCoords 包含 2 分量 (s, t) 纹理数据。

创建NIO Buffer后,需要将其传递给opengl并创建Vertex Buffer Object:

int[] id = new int[1];//stores the generated ID.
gl11.glGenBuffers(1, id, 0);
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, id[0]);
gl11.glBufferData(GL11.GL_ARRAY_BUFFER, texCoords.length * 4, textureBuffer, GL11.GL_STATIC_DRAW);

这样就完成了所有的初始化工作。接下来我们需要绘制它,我们这样做:

gl11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);//enable for textures
gl11.glActiveTexture(GL11.GL_TEXTURE0);
//lets pretend we created our texture elsewheres and we have an ID to represent it.
gl11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);

//Now we bind the VBO and point to the buffer.
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, id[0])//the id generated earlier.
gl11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);//this points to the bound buffer

//Lets also pretend we have our Vertex and Index buffers specified.
//and they are bound/drawn correctly.

因此,尽管我认为这是 OpenGL 绘制纹理所需要的,但我有一个错误,只有一个红色三角形(没有我调制的石头纹理)渲染。

最佳答案

需要调用 VBO 的两个函数来启用纹理。

gl.glEnable(GL11.GL_TEXTURE_2D);gl.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

关于android - 将纹理应用于顶点缓冲区对象基元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628809/

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