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。

posted on 2013-12-12 17:58 ldpzgz 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/firstldp/p/3471714.html

opengles 2.0 点精灵 多边形偏移等备忘相关推荐

  1. 多边形偏移算法c语言,多边形的偏移填充算法

    多边形的偏移填充算法- 简书 www.jianshu.com/p/8c7e7c1afcb6 2017年9月10日 - 前言多边形偏移(polygon offset) 算法可能我们印象不深,不过用过au ...

  2. webgl中解决深度冲突-多边形偏移

    1.webgl中解决深度冲突-多边形偏移 1.什么是深度冲突? 就是当几何图形或者物体的两个表面极为接近时,就会使得表面看上去斑斑点点,这种现象就是 深度冲突. 看看这个缓冲区渲染出的效果 缓冲区数据 ...

  3. 六、OpenGL 渲染技巧:深度测试、多边形偏移、 混合

    OpenGL + OpenGL ES +Metal 系列文章汇总 深度测试 在上一篇五.OpenGL 渲染技巧:正背面剔除中,文末还遗留一个问题未解决,在解决之前,先说说这种现象产生的原因 甜甜圈缺口 ...

  4. OpenGLES 3.0

    现在已经有很多手机陆续支持openGLES3.0了,也总结一下ES3.0的优势,计划引擎支持支持ES3.0, 因为OpenglEs3.0 向后兼容ES2.0. Andriod4.3以上版本的设备和使用 ...

  5. php7和7.1,PHP7.0和7.1 部分新增特性备忘代码分享

    以下分别备忘 PHP 7.0 & 7.1 版本的部分新增特性. PHP 7.0$foo = null; $bar = $foo ?? 123; // 相当于 $bar = isset($bar ...

  6. 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 ...

  7. Google 全国 地图 纠偏数据 偏移数据 超高精度(0.002) (纠偏、偏移、地图、数据)

    特别注明,csv数据文件条数众多,如果使用excel打开请使用office 2007及以上版本,否则显示不全(个人建议使用记事本打开,现在的计算机打开十几MB的文本文件 时间还算可以接受) 取值间隔  ...

  8. opengles 3.0游戏开发_开发者们,快来测试Android Q啦!

    近日,谷歌正式推出Android Q Beta 1版本及预览版SDK,TestBird已部署到测试机型,开发者们可到TestBird测试平台测试. 此次Android Q 做了不少改进,不少尝鲜的用户 ...

  9. OpenGLES 2.0 可编程渲染管线

    OpenGL ES 2.0 与 OpenGL ES 1.x 渲染管线的最大区别就是: 顶点着色器.片元着色器是可编程的,替代了原来的固定管线的很多功能. 转载于:https://www.cnblogs ...

最新文章

  1. 使用训练数据结构代替注意力机制之训练一个小说
  2. 56.阶乘因式分解(一)
  3. mysql中insert into select from的使用
  4. fedora中linux改成英文,Fedora的英文界面下使用中文
  5. 不是计算机专业,哪个专业更适合学习web前端
  6. 【机器学习实验】scikit-learn的主要模块和基本使用
  7. 路由器-路由器以及×××-Client之间的×××
  8. 孙玄:基于CAP模型设计企业级真正高可用的分布式锁
  9. 贱人工具箱使用技巧5——批量修改文字
  10. 使用微信即时扫码开门
  11. 配置Pod的liveness和readiness探针
  12. vsftpd基于mysql_vsftpd基于mysql实现用户认证
  13. APP怎样通过免填邀请码,提高App邀请效率?
  14. 论文解读--Multi-class Road User Detection with 3+1D Radar in the View-of-Delft Dataset
  15. bzoj 1863 [Zjoi2006]trouble 皇帝的烦恼
  16. 脂肪率——最忠实的胖瘦指标
  17. Android 中更改了默认app图标,在手机上还是显示默认图标
  18. matlab reff,R语言逻辑回归和泊松回归模型对发生交通事故概率建模
  19. Yeslab安全实验室教徒计划第二期 2011-11-7
  20. [MATLAB][原创]Matlab添加libsvm后报错svmtrain已被删除, 请改用fitcsvm解决办法

热门文章

  1. Python查找算法之 -- 列表查找和二分查找
  2. 2016年5月30日上午(传智Bootstrap笔记六(图片样式))
  3. 工作中遇到的问题--使用注解进行增加删除修改的验证
  4. C#中一些常用的方法使用
  5. 行货好还是水货好?详解苹果iPhone5版本选购 --国行、港行、水货、合约机
  6. [转]UE/UI/UCE/UED的区别 附UED团队网站链接
  7. .Net页面中使用在线编辑框实例
  8. 手把手教你用AI画梵高的《星空》
  9. 【知识】人工智能数学基础知识
  10. python selenium下载优缺点_Python下selenium的实战和普通爬虫的对比