opengles 2.0 点精灵 多边形偏移等备忘
opengl es 2.0只支持三种绘画单元:
三角形,直线和点精灵。
GL_TRIANGLES
GL_TRIANGLES_STRIP (指定n个顶点,绘制n-2个三角形)
GL_TRIANGLES_FAN (指定n个顶点,绘制n-2个三角形)
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
GL_POINTS(这个是点精灵)
设置和获得可以设置的直线的宽度:
void glLineWidth(GLfloat width);
GLfloat lw[2];
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE,lw);
指定正面和背面:
void glFrontFace(GLenum dir) //GL_CW GL_CCW
void glEnable(GL_CULL_FACE);
void glCullFace(GL_FRONT GL_BACK GL_FRONT_AND_BACK);
点精灵:
点精灵是一个与屏幕对齐的正方形,有position和radius。
在shader里面有内建变量gl_PointSize,用来输出点的半径,由顶点shader输出。
得到允许的点精灵的大小:
GLfloat pointsizeRange[2];
glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE,pointsizeRange);
注意opengles窗口的坐标范围是:从左下角(原点)到右上角。
而点精灵的原点是在左上角 坐标值 从0-1.
如何设置点精灵的position和radius呢:
position当然是用顶点属性来设置的。
radius在顶点shader里面设置,顶点shader里面有个内建的变量gl_PointSize用于设置
点精灵的radius大小。
gl_PointCoord是片段shader的内建变量,vec2类型,mediump精度。
在shader里面绘制点精灵的例子:
uniform sampler2D s_texSprite;
void main(void)
{
gl_FragColor = texture2D(s_texSprite,gl_PointCoord);
}
基元处理流程:
物体的坐标点 根据基元的类型跟视见体做裁剪,去掉看不到的部分
跟modelviewprojection相乘,然后再x/w, y/w, z/w得到normalized设备坐标(-1.0到1.0)。
视口转换阶段:
用到两个函数:
glViewport(x,y,w,h)和glDepthRange(near, far);
利用这个(x/w, y/w, z/w)坐标,在根据视口的尺寸,就可以得到物体在屏幕上的x,y坐标。
根据z/w和glDepthRange()指定的near和far深度值。
具体计算方式请看
多边形偏移:
当绘制两个完全重叠的物体时,渲染出来的效果会出现相互渗透的现象,
这是由于精度有限的缘故,这种现象如果光靠提高精度
是不能完全解决的,所以需要使用多边形偏移技术,
若开启多边形偏移,在做深度测试和深度写入之前,给片段的深度值加
一个delta,然后用这个值进行深度测试,如果深度测试通过,
则会写入原本的深度值,而不是depth+delta。
glEnable(GL_POLYGON_OFFSET_FILL);
glDisable(GL_POLYGON_OFFSET_FILL);
void glPolygonOffset(GLfloat factor, GLfloat units);
depth offset = m*factor+r*units;
书上个了个例子,factor=-1.0f,units=-2.0f。
转载于:https://www.cnblogs.com/firstldp/p/3471714.html
opengles 2.0 点精灵 多边形偏移等备忘相关推荐
- 多边形偏移算法c语言,多边形的偏移填充算法
多边形的偏移填充算法- 简书 www.jianshu.com/p/8c7e7c1afcb6 2017年9月10日 - 前言多边形偏移(polygon offset) 算法可能我们印象不深,不过用过au ...
- webgl中解决深度冲突-多边形偏移
1.webgl中解决深度冲突-多边形偏移 1.什么是深度冲突? 就是当几何图形或者物体的两个表面极为接近时,就会使得表面看上去斑斑点点,这种现象就是 深度冲突. 看看这个缓冲区渲染出的效果 缓冲区数据 ...
- 六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合
OpenGL + OpenGL ES +Metal 系列文章汇总 深度测试 在上一篇五.OpenGL 渲染技巧:正背面剔除中,文末还遗留一个问题未解决,在解决之前,先说说这种现象产生的原因 甜甜圈缺口 ...
- OpenGLES 3.0
现在已经有很多手机陆续支持openGLES3.0了,也总结一下ES3.0的优势,计划引擎支持支持ES3.0, 因为OpenglEs3.0 向后兼容ES2.0. Andriod4.3以上版本的设备和使用 ...
- php7和7.1,PHP7.0和7.1 部分新增特性备忘代码分享
以下分别备忘 PHP 7.0 & 7.1 版本的部分新增特性. PHP 7.0$foo = null; $bar = $foo ?? 123; // 相当于 $bar = isset($bar ...
- TI IPNC_RDK_V3.8.0开发环境建立步骤备忘
TI IPNC_RDK_V3.8.0开发环境建立步骤备忘: # RDK installation steps:# 1.mkdir /usr/local/IPNC_RDK_V3.8.0 2.cd /us ...
- Google 全国 地图 纠偏数据 偏移数据 超高精度(0.002) (纠偏、偏移、地图、数据)
特别注明,csv数据文件条数众多,如果使用excel打开请使用office 2007及以上版本,否则显示不全(个人建议使用记事本打开,现在的计算机打开十几MB的文本文件 时间还算可以接受) 取值间隔 ...
- opengles 3.0游戏开发_开发者们,快来测试Android Q啦!
近日,谷歌正式推出Android Q Beta 1版本及预览版SDK,TestBird已部署到测试机型,开发者们可到TestBird测试平台测试. 此次Android Q 做了不少改进,不少尝鲜的用户 ...
- OpenGLES 2.0 可编程渲染管线
OpenGL ES 2.0 与 OpenGL ES 1.x 渲染管线的最大区别就是: 顶点着色器.片元着色器是可编程的,替代了原来的固定管线的很多功能. 转载于:https://www.cnblogs ...
最新文章
- 使用训练数据结构代替注意力机制之训练一个小说
- 56.阶乘因式分解(一)
- mysql中insert into select from的使用
- fedora中linux改成英文,Fedora的英文界面下使用中文
- 不是计算机专业,哪个专业更适合学习web前端
- 【机器学习实验】scikit-learn的主要模块和基本使用
- 路由器-路由器以及×××-Client之间的×××
- 孙玄:基于CAP模型设计企业级真正高可用的分布式锁
- 贱人工具箱使用技巧5——批量修改文字
- 使用微信即时扫码开门
- 配置Pod的liveness和readiness探针
- vsftpd基于mysql_vsftpd基于mysql实现用户认证
- APP怎样通过免填邀请码,提高App邀请效率?
- 论文解读--Multi-class Road User Detection with 3+1D Radar in the View-of-Delft Dataset
- bzoj 1863 [Zjoi2006]trouble 皇帝的烦恼
- 脂肪率——最忠实的胖瘦指标
- Android 中更改了默认app图标,在手机上还是显示默认图标
- matlab reff,R语言逻辑回归和泊松回归模型对发生交通事故概率建模
- Yeslab安全实验室教徒计划第二期 2011-11-7
- [MATLAB][原创]Matlab添加libsvm后报错svmtrain已被删除, 请改用fitcsvm解决办法
热门文章
- Python查找算法之 -- 列表查找和二分查找
- 2016年5月30日上午(传智Bootstrap笔记六(图片样式))
- 工作中遇到的问题--使用注解进行增加删除修改的验证
- C#中一些常用的方法使用
- 行货好还是水货好?详解苹果iPhone5版本选购 --国行、港行、水货、合约机
- [转]UE/UI/UCE/UED的区别 附UED团队网站链接
- .Net页面中使用在线编辑框实例
- 手把手教你用AI画梵高的《星空》
- 【知识】人工智能数学基础知识
- python selenium下载优缺点_Python下selenium的实战和普通爬虫的对比