- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
纹理映射 纹理映射的基本思想就是首先为图元中的每个顶点指定恰当的纹理坐标,然后通过纹理坐标在纹理阁中可以确定选中的纹理区域,最后将选中纹理区域中的内容根据纹理坐标映射到指定的图元上。 具体过程如下: 首先图元中的每个顶点都需要在顶点着色器中通过易变变量将纹理坐标传入片元着色器。 经过顶点着色器后准染管线的固定功能部分会根据情况进行插值计算,产生对应到每个片元的用于记录纹理坐标的易变变量值。 最后每个片元在片元着色器中根据其接收到的记录纹理坐标的易变变量值到纹理图中提取出对应位置的颜色即可,提取颜色的过程一般称之为纹理采样。 14.1 MyTexture MyTexture MySurfaceView SceneRenderer onSurfaceCreated initTexture(); initTexture():经过初始化后,后面再要使用纹理时就非常简单了,仅需要使用纹理id 进行绑定即可,具体参看Triangle 类。 Triangle initVertexData(): 初始化顶点坐标数据,并将数据存入数据缓冲中供绘制时使用。 初始化顶点纹理坐标数据,并将数据存入数据缓冲中供绘制时使用。 initShader(MySurfaceView mv): 加载顶点着色器、片元着色器的脚本代碍; 基于顶点着色器与片元着色器创建着色程序; 从着色程序中获取顶点坐标位置引用、顶点纹理属性引用等. drawSelf(): 首先获得最终变换矩阵并传入渲染管线,然后将顶点坐标、顶点纹理坐标属性数据送入渲染管线,接着绑定纹理并绘制纹理三角形. MyTexture vertex.sh vTextureCoord = aTexCoor; 将被处理顶点的纹理坐标从属性变量aTexCoor 赋值给了易变变量vTetureCoord,供渲染管线固定功能部分进行插值计算后传递给片元着色器使用。 frag.sh gl_FragColor = texture2D(sTexture, vTextureCoord); 根据接收的记录片元纹理坐标的易变变量中的纹理坐标,调用texture2D 内建函数从采样器中进行纹理采样,得到此片元的颜色值。 将采样到的颜色值传给gl_FragColor 内建变量,完成片元的着色。 sampler2D 类型的sTexture代表的就是前面代码绑定的指定编号纹理的内容。 14.2 纹理拉伸 - 重复拉伸 上一小节的案例中,无论是S 轴还是T 轴的纹理坐标都是在0.0~1.0 中。但在特定的情况下,也可以设置大于1 的纹理坐标。当纹理坐标大于1 以后,设置的拉伸方式就会起作用了。 纹理拉伸 - 截取拉伸 截取方式中当纹理坐标的值大于 1 时都看作 1,因此会产生边缘被拉伸的效果,设置方式如下: GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE); S轴、 T轴的拉伸方式可以独立设置,可以一个轴重复、一个轴截取 EdgeRepeatx项目 EdgeRepeatx项目 EdgeRepeat项目 MyActivity 为两组单选按钮添加了监听器. MySurfaceView initTexture():为根据isRepeat 参数的值设置不同的纹理拉伸方式,若其为true重复拉伸方式,否则为截取拉伸方式。 TextureRect initVertexData(): 初始化顶点坐标数据,并将数据存入数据缓冲中供绘制时使用。 初始化顶点纹理坐标数据,并将数据存入数据缓冲中供绘制时使用。 与前一个案例基本相同,最大的区别是纹理坐标是通过接收的参数来设置的,不再是固定的,灵活性有所增强,满足了矩形顶点纹理坐标变化的需要。 initShader(MySurfaceView mv): 加载顶点着色器、片元着色器的脚本代碍; 基于顶点着色器与片元着色器创建着色程序; 从着色程序中获取顶点坐标位置引用、顶点纹理属性引用等。 drawSelf(): 首先获得最终变换矩阵并传入渲染管线,然后将顶点坐标、顶点纹理坐标属性数据送入渲染管线,接着绑定纹理并绘制纹理三角形。 14.3 纹理采样 纹理采样:根据片元的纹理坐标到纹理图中提取对应位置的颜色值的过程。 由于被渲染图元中的片元数量与其对应纹理区域中像素的数量并不一定相同,例如:将较小的纹理图映射到较大的图元或将较大的纹理图映射到较小的图元时,此通过纹理坐标在纹理图中并不一定
原创力文档


文档评论(0)