OpenGL渲染的基本流程

来源:互联网 发布:混沌摆淘宝 编辑:程序博客网 时间:2024/05/22 14:16
 

(一)OpenGL渲染的基本流程

标签: opengl
 845人阅读 评论(0) 收藏 举报
 分类:

总结自教程:http://www.learnopengl.com/#!Getting-started/Hello-Triangle

OpenGL中的坐标是带有深度信息的三维坐标,把这些三维坐标转换成可以在LCD上显示的二维坐标,这个过程叫做pipeline。pipeline分为以下两个步骤: 
第一步:将坐标值由3D的转换成2D。 
第二步:对第一步中的2D坐标赋予颜色值(RGBA)。

GPU的并行运算,就是同时跑成千上万个小程序,这些小程序都在执行pipeline这一流程。 
这一个个小程序,就成为OpenGL中的Shader。

pipeline流程中通常包含以下6种shader,我们可以编辑的shader为蓝色的部分。

这里写图片描述

上面的pipeline是画一个三角形。

请注意,可以设置OpenGL的构图方式,可以将输入的点构成线条、三角形以及多边形等等。可以这只shader中的构图方式为:GL_POINTS, GL_TRIANGLES and GL_LINE_STRIP等。 
第一步,将三维数据导入vertex shader,vertex就是顶点信息,在这个例子中就是三角形的3个顶点。vertex shader中包含了坐标以及颜色值信息。vertex shader的主要工作就是将3D坐标转成不同的3D坐标(下面章节中将会有详细介绍)。

第二步,primitive assembly将上一步中的顶点信息,构成一个基本的图形,这里是三角形。

第三步,geometry shader将上一步中的基本图形在变换成其它图形,而这个变换中不需要增加新的顶点信息。这个例子中,将上一步中的一个三角形变换成了两个三角形。

第四步,rasterization ,译成中文就是“光栅化”。也就是将一个线条形状转化成实际的像素点,这些像素点是没有颜色信息的。

第五步,fragment shader。这一步是计算上一步中每个像素点的最终像素值,往往OpenGL的算法都放在这一步执行。

第六步。在最终的颜色值确定之后,最后一步为alpha test and blending,也就是透明度调整以及混色。这一步根据fragment的深度信息,检测每一个fragment有没有被其它fragment遮挡,根据遮挡的程度来设置当前fragment的透明度,然后将这些叠加在一起的fragment进行混色。所以尽管每个三角形的颜色都在fragment shader中确认下来了,但是最终的现实效果可能和上一步中的颜色信息完全不一致。

0
 
0
 
 

我的同类文章

  • (二)OpenGL中的Shader2016-09-08

    参考知识库

    img

    算法与数据结构知识库

    猜你在找
    使用Cocos2d-x 开发3D游戏
    OpenGL ES2.0 中级篇
    Unity3D着色器程序设计-CG版
    数据结构与算法在实战项目中的应用
    数据结构基础系列(1):数据结构和算法
    初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
    初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
    Android应用开发性能优化完全分析
    HWUI reader thread workflow
    cocos2d-x设计模式发掘之一单例模式
    查看评论

      暂无评论

    发表评论
    • 用 户 名:
    • yz2010
    • 评论内容:
    • 插入代码
        
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    核心技术类目
    全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERP IE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide MaemoCompuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap
      个人资料
       
      BeyondTheBuzzer
       
      1
      • 访问:15881次
      • 积分:319
      • 等级: 
      • 排名:千里之外
      • 原创:15篇
      • 转载:0篇
      • 译文:0篇
      • 评论:6条
      文章分类
    • MCU编程(4)
    • OpenCV学习(4)
    • Android开发(2)
    • VR(1)
    • OpenGL学习笔记(2)
    • ROS学习笔记(2)
    • 四轴飞行器(1)
      文章存档
    • 2016年09月(5)
    • 2016年01月(1)
    • 2015年05月(1)
    • 2015年03月(3)
    • 2015年02月(1)
      展开
      阅读排行
    • OpenCV手势识别-手掌特征提取(3272)
    • 开源四轴飞行器CC3D的稳定模式和PID算法简介(2172)
    • Linux开源智能视频监控软件zoneminder的安装(1532)
    • VR中的图形畸变(1405)
    • OpenCL嵌入式图像处理(1126)
    • (一)OpenGL渲染的基本流程(845)
    • 飞思卡尔KL25Z开发板开发经验(799)
    • OpenCV 将Mat数据转成Video格式视频(784)
    • 用OpenCV的随机树算法(Random Forest Tree)进行手势检测(747)
    • Android Bitmap加载透明背景图片(729)
      评论排行
    • OpenCV手势识别-手掌特征提取(4)
    • Linux开源智能视频监控软件zoneminder的安装(1)
    • 用OpenCV的随机树算法(Random Forest Tree)进行手势检测(1)
    • OpenCV 随机森林(Random Forest)手势识别应用---样本选择问题(0)
    • Android Bitmap加载透明背景图片(0)
    • android 自定义POP window弹出窗口,用于信息提示(0)
    • Linux Ubuntu环境下对SD卡分区(烧写uboot,kernel,及filesystem)(0)
    • OpenCL嵌入式图像处理(0)
    • OpenCV 将Mat数据转成Video格式视频(0)
    • (一)ROS的Roscore命令(0)
      推荐文章
      • * 云计算的那些事儿之计算虚拟化
      • * 微服务--分布式事务的实现方法及替代方案
      • * 你应该知道的 Android 数据库更新策略
      • * HDFS副本放置节点选择的优化
      • * CSDN日报20170416 ——《为什么程序员话少钱多死得早?》
      • * 凡人视角C++之string(上)
      最新评论
    • OpenCV手势识别-手掌特征提取

      VictorChi: 你的图片是晚上拍的吗?白天用红外线摄像头怎么拍出这样的图片

    • OpenCV手势识别-手掌特征提取

      午夜小学徒丶磊: 怎么集成到XCode,文件缺少啊。

    • OpenCV手势识别-手掌特征提取

      BeyondTheBuzzer: @songrui_Lai:同事在淘宝买的,具体型号不太清楚。普通的红外摄像头即可。

    • 用OpenCV的随机树算法(Random Forest Tree)进行手势检测

      woxiangjiayou: 请问你的训练识别代码还有吗?

    • OpenCV手势识别-手掌特征提取

      songrui_Lai: 请问工程用的是哪种红外摄像头?

    0 0
    原创粉丝点击