OpenGL ES开发遇到问题集锦

问题和故障:
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
//进行绘制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值