gpt4 book ai didi

android - 需要帮助理解 GLES 2.0 的 glDrawElements

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

我正在尝试学习适用于 Android 的 OpenGL ES 2.0,但我发现很难找到好的介绍教程...我找到了 This ,但它只解释了“glDrawArrays”而不是“glDrawElements”……我正在尝试从我的模型加载类 ES 1.1 转换代码,但我觉得绘制数组可能太慢了……

所以我要问的是如何将以下内容转换为在 ES 2.0 中工作?

一个对象是如何存储的(好像没问题):

    private ShortBuffer SindexBuffer;
private FloatBuffer SvertexBuffer;
private FloatBuffer StexBuffer;

private void initSprite()
{
float[] fcol = {1,1,1,1};
float[] coords = {
0.5f, 0.5f, 0f,
-0.5f, 0.5f, 0f,
0.5f, -0.5f, 0f,
-0.5f, -0.5f, 0f
};
short[] index = {
0,1,2,
1,3,2
};
float[] texCoords ={
0,1,
1,1,
0,0,
1,0
};

//float has 4 bytes
ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4);
vbb.order(ByteOrder.nativeOrder());
SvertexBuffer = vbb.asFloatBuffer();

ByteBuffer tC = ByteBuffer.allocateDirect(texCoords.length * 4);
tC.order(ByteOrder.nativeOrder());
StexBuffer = tC.asFloatBuffer();
StexBuffer.put(texCoords);
StexBuffer.position(0);

//short has 2 bytes
ByteBuffer ibb = ByteBuffer.allocateDirect(index.length*2);
ibb.order(ByteOrder.nativeOrder());
SindexBuffer = ibb.asShortBuffer();

SvertexBuffer.put(coords);
SindexBuffer.put(index);

SvertexBuffer.position(0);
SindexBuffer.position(0);

ByteBuffer fbb = ByteBuffer.allocateDirect(fcol.length * 4);
fbb.order(ByteOrder.nativeOrder());
}

以及它是如何绘制的(这是我需要帮助的地方):

        public void drawSprite(GL10 gl, int tex)
{
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
//defines the vertices we want to draw
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, SvertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, StexBuffer);

//Draw the vertices
gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, SindexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}

(虽然纹理部分还没有那么重要......还没有到那个程度)。

感谢任何能提供帮助的人...哦,还有谁知道针对首先使用 1.1 的人的 ES 2.0 for Android 的简单介绍吗?

最佳答案

翻译成这样

 float[] coords = {
0.5f, 0.5f, 0f, //index 0
-0.5f, 0.5f, 0f, //index 1
0.5f, -0.5f, 0f, //index 2
-0.5f, -0.5f, 0f //index 3
}

并且您要告诉 opengl 使用以下点序列绘制该图:

0, 1, 2, 1, 3 , 2.

这里节省内存,因为索引是 short 类型,每个顶点需要 3 个 float

问候

关于android - 需要帮助理解 GLES 2.0 的 glDrawElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043022/

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