问题和故障:
OpenGLES 中遇到一个问题,当我创建了一个纹理,在draw绘制的时候,手动设置了一下GLES30.glUniform1i(“纹理索引”, “纹理ID”);
例如 GLES30.glUniform1i(this.texture2, textureid2); 当我下载到手机中并没有纹理的绘制,没起到任何作用,注释到该行代码 只保留
GLES30.glActiveTexture(GLES30.GL_TEXTURE1);
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D , textureid2);
发现纹理能够正常绘制
解决和理解:
1.如果只又一个纹理在Opengl中则无需指定某个,如果有多个纹理是需要指定设置 GLES30.glUniform1i(“纹理索引”, “纹理id”); 才能够正确使用多个纹理进行绘制。
例如:一个纹理情况下
//--------------------------获取创建纹理步骤---------------------------
int textureid //创建生成一个纹理id
//--------------------------进入绘制-顶点数据,法线数据,纹理数据设置
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); //启动纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D , textureid); //绑定纹理
//---------------------------绘制----------------------------------------------
GLES30.glDrawArrays即可
多个纹理情况下
// 获取多个纹理id
int textureid1 ,textureid2 ,textureid3
// 获取片元着色器每个纹理的索引
texture1= GLES30.glGetUniformLocation(mProgram, “sTexture1”);
texture2= GLES30.glGetUniformLocation(mProgram, “sTexture2”);
texture3= GLES30.glGetUniformLocation(mProgram, “sTexture3”);
//进入绘制
//--------------------------进入绘制-顶点数据,法线数据,纹理数据设置
GLES30.glActiveTexture(GLES30.GL_TEXTURE0); //启动纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D , textureid1); //绑定纹理
GLES30.glActiveTexture(GLES30.GL_TEXTURE1); //启动纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D , textureid2); //绑定纹理
GLES30.glActiveTexture(GLES30.GL_TEXTURE2); //启动纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D , textureid3); //绑定纹理
GLES30.glUniform1i(texture1, 0); //设置每个纹理索引对应一个纹理IDGL_TEXTURE0
GLES30.glUniform1i(texture2, 1);//GL_TEXTURE1
GLES30.glUniform1i(texture3, 2); //GL_TEXTURE2
//进行绘制
OpenGL ES开发遇到问题集锦
最新推荐文章于 2021-08-26 14:46:05 发布