【我的OpenGL学习进阶之旅】关于OpenGL ES 绘制纹理,因为加载纹理坐标设置错误,导致纹理无法渲染的问题 | 您所在的位置:网站首页 › ae处理opengl命令时出现错误 › 【我的OpenGL学习进阶之旅】关于OpenGL ES 绘制纹理,因为加载纹理坐标设置错误,导致纹理无法渲染的问题 |
目录
一、问题描述二、分析问题2.1 错误代码2.2 顶点着色器2.3 继续分析问题
三、总结
扫码下方二维码,关注微信公众号【字节卷动】! 前段时间学习OpenGL ES绘制纹理的时候,本来想绘制出如下的效果: 好吧,既然出现了问题,那么我们就解决问题吧。 二、分析问题 2.1 错误代码整个问题分析的过程比较狗血,我得把draw() 方法的代码一行一行的查看,这里就不再重复整个艰辛的过程了。直接说结论吧! // Load the vertex position glVertexAttribPointer(TEXTURE_MAP_VERTEX_POS_INDEX, TEXTURE_MAP_VERTEX_POS_SIZE, GL_FLOAT, GL_FALSE, TEXTURE_MAP_VERTEX_POS_SIZE * sizeof(GLfloat), verticesCoords); // Load the texture coordinate glVertexAttribPointer(TEXTURE_MAP_VERTEX_POS_INDEX, TEXTURE_MAP_VERTEX_TEXTCOORD_SIZE, GL_FLOAT, GL_FALSE, TEXTURE_MAP_VERTEX_TEXTCOORD_SIZE * sizeof(GLfloat), textureCoords); glEnableVertexAttribArray(TEXTURE_MAP_VERTEX_POS_INDEX); glEnableVertexAttribArray(TEXTURE_MAP_VERTEX_POS_INDEX);
其实这个问题,就是在写代码的时候直接copy & paste 上一行的代码,因为类似。 但是漏改了部分参数。 2.2 顶点着色器我们来看看 顶点着色器代码如下: 这样我们就可以结合下面这张图看来出问题了,原来就是因为 location =1 的 a_texCoord 根本没有赋值 我们实际上想要的代码如下: 但是,实际上我不喜欢魔法数字,所以才定义了一些常量,但是又因为常量命名一样看过去差不多,没有注意到差别所在,所以导致部分参数未修改正确,才导致了纹理渲染不出来的bug。 这样我们就找到了问题所在,把代码改一下,如下所示: 这样就成功把纹理渲染出来了!!! 三、总结 渲染纹理的时候,纹理坐标相关的一定要设置正确,否则无法渲染出纹理有时候相类似的代码复制粘贴的时候,一定要注意细节,不要漏掉了需要修改的部分参数,导致排查起来很麻烦。有时候直接写数字可能比写一些定义的常量更加直观,虽然我很不喜欢魔法数字。定义常量的时候,尽量把不同的变量命名的容易区分一些,不要导致一眼望过去无法区分,这样容易出现一些bug。 |
CopyRight 2018-2019 实验室设备网 版权所有 |