OpenGL ES 2.0 纹理映射
纹理坐标用符点数表示,范围一般从0.0到1.0,在纹理坐标系中。纹理坐标系原点在左上侧,向右为S轴,向下为T轴。两个轴的取值范围都是0.0~1.0。
纹理映射
纹理映射:把一幅纹理图应用到相应的几何图元。
如:一个三角形图元,其3个顶点指定了纹理坐标,3组纹理坐标在右侧的纹理图中确定了需要映射的三角形纹理区域。
纹理映射的基本思想就是首先为图元中的每个顶点指定恰当的纹理坐标,然后通过纹理坐标在纹理图中可以确定选中的纹理区域,最后将选中纹理区域中的内容根据纹理坐标映射到指定的图元上。
纹理的过程实际上就是为右侧三角形图元中的每一片元着色,用于着色的颜色需要从左侧的纹理图中提取,具体过程如下:
- 首先图元中的每顶点都需要在顶点着色器中通过易变变量将作纹理坐标传入片元着色器。
- 经过顶点着色器后渲染管线的固定功能部分会根据情况进行插值计算,产生对应到每个片元的用于记录纹理坐标的易变变量值。
- 最后每个片元在片元着色器中根据其接收到的记录纹理坐标的易变变量值到纹理图中提取出对应位置的颜色即可,提取颜色的过程一般称之为纹理采样。
纹理拉伸
1.重复拉伸;2.截取拉伸
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_REPEAT);//设置S轴拉伸方式为重复
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_REPEAT);//设置T轴拉伸方式为重复
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);//设置S轴拉伸方式为截取拉伸
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);//设置T轴拉伸方式为截取拉伸
纹理采样
纹理采样:根据片元的纹理坐标到纹理图中提取对应位置颜色的过程。
1.最近点采样;2.线性采样
最近点采样
基本原理:对应像素点
优点:简单,采样最快。
缺点:将小图映射到较大的图元时,会产生明显的锯齿。
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_NEAREST);
线性采样
基本原理:加权平均
优点:平滑过渡。
缺点:有时线条边缘会比较模糊。
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);
MIN与MAG采样
当纹理图中的一个像素对应到待映射图元上的多个片元时,采用MAG采样;反之则采用MIN采样。
通俗的是纹理比图元小,采用MAG采样纹理设置。
配合:MIN与最近点,MAG与线性采样
mipmap纹理技术
基本思想:对远处的地形采用尺寸较小分辨率低的纹理,近处的采用尺寸较大分辨率高的纹理。
开发人员只需要提供一幅原始纹理图,系统会在纹理加载时自动生成一系列由大到小的纹理图。每幅图是前一幅的1/2,直至纹理图尺寸缩小到1x1。一系列纹理图中的第一副就是原始纹理图。一系列的mipmap纹理图占用的空间接近原始纹理图的2倍。
多重纹理和过程纹理
多重纹理:对同一个图元采用多幅纹理图。
平滑过渡:在多重纹理变化的边界根据某种规则进行平滑过渡。
将2D纹理映射到3D上:拓扑变换
OpenGL ES 2.0 纹理映射的更多相关文章
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- Beginning OpenGL ES 2.0 with GLKit Part 1
Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...
- OpenGL ES 3.0 基础知识
首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...
- OpenGL ES 3.0 点,线,三角形绘制形式总结
OpenGL ES 3.0 顶点 -1, 1, 0, -0.5f, 0, 0, 0, -1, 0, -1, 0, 0, 0.5f, 0, 0, 1, -1, ...
- Android OpenGL ES 3.0 纹理应用
本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...
- OpenGL ES 2.0 混合
混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...
- WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起
WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTM ...
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
1. 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...
随机推荐
- ZOJ3551 Bloodsucker(概率dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Bloodsucker Time Limit: 2 Seconds Me ...
- JDK + Tomcat 安装配置
学习Java 开发的第一步就是配置环境,今天第一次配置,把过程记录下以备后用. 一.下载JDK.Tomcat JDK:http://www.oracle.com/technetwork/java/ja ...
- GridView Footer页脚统计实现多行
在使用GridView时有时会需要多行显示页脚Footer的统计,下面是一种解决方法,仅仅供各位参考 在GridView的RowCreated事件中添加多行页脚,实例代码如下: protected v ...
- css3画苹果logo
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- JQuery 获取自身的HTml代码
$('.top').append($(this).prop("outerHTML"));
- mysql数据修改-DEDE
update `dede_arctype` set `templist`='{style}/products.htm' where `templist`='{style}/Product.htm' d ...
- [转]NopCommerce MVC 插件机制分析
原文地址:http://www.cnblogs.com/haoxinyue/archive/2013/06/06/3105541.html 基本原理 插件话的应用程序一般都是先定义插件接口,然后把插件 ...
- ucos_ii 上锁函数OSSchedLock()函数透析
因为任务调度时一般都是通过OSTIMEDLY()来实现.在这个函数中会对当前的任务执行挂起.同时查看任务调度表中是否有优先级合适的就绪任务.如果当前任务运行时调用OSSchedLock()给调度器上锁 ...
- .net core3
- DOCKER,需要进入生产实践
先玩起... 以下初级问题的解决: docker -dINFO[0000] +job serveapi(unix:///var/run/docker.sock) INFO[0000] WARNING: ...