OpenGL 学习系列--基础的绘制流程

  • 在什么地方进行绘制?
  • 绘制成什么形状?
  • 用什么颜色来绘制?

而我们的程序也主要以解决上述三个问题为主,下面以 OpenGL 绘制一个点来讲解。

OpenGL 坐标

手机屏幕的坐标是以左上角为原点(0,0),向右为 X 轴正方形,向下为 Y 轴正方向,而 OpenGL 也有着它自己的一套坐标定义。

假设我们定义了一个点的坐标(4.3,2.1),也就是它的 X 轴坐标和 Y 轴坐标,而 OpenGL 最后会把我们定义的坐标映射手机屏幕的实际物理坐标上。

无论是 X 坐标还是 Y 坐标,OpenGL 都会把手机屏幕映射到 [-1,1] 的范围内。也就是说:屏幕的左边对应 X 轴的 -1 ,屏幕的右边对应 +1,屏幕的底边会对应 Y 轴的 -1,而屏幕的顶边就对应 +1。

不管屏幕是什么形状和大小,这个坐标范围都是一样的,例如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,上面定义的坐标(4.3,2.1),最后是会被映射到手机屏幕之外的,处于不可见的状态。

这里,假定绘制一个位于原点的点(0,0),那么映射之后的位置就手机屏幕的中心了。

基本图元

解决了位置的问题,接下来就是形状和颜色的问题。

如同 Android 的 Canvas 对象提供了一些方法来完成基本的绘制:drawPoint、drawRect、drawLine 等,OpenGL 程序也提供且仅提供了三种基本的图元来完成绘制。

  • 线
  • 三角形

其他的所有形状都是基于这三种图元来完成的,比如矩形就可以看成是两个三角形拼成的。

由于我们要绘制的是一个点,在坐标系中,一个坐标就可以代替一个点了。假设要绘制一个三角形,那么在坐标系中就需要三个点才行了。

接下来就涉及到 OpenGL 如何把定义的点的数据绘制出来了。

渲染管线

首先要明白一个概念渲染管线

根据百度百科的定义,渲染管线也称为渲染流水线像素流水线像素管线,是显示芯片内部(GPU)处理图形信号相互独立的并行处理单元。

显卡的渲染管线就是显示核心的重要组成部分,是负责给图形配上颜色的一组专门通道。渲染管线的数量是决定显示芯片性能和档次的最重要的参数之一。

现阶段的显卡都是分为顶点渲染像素渲染的。在显卡,内部分为两大区域,一个区域是顶点渲染单元(也叫顶点着色),主要负责描绘图形,也就是建立模型。一个区域是像素渲染管线,主要负责把顶点绘出的图形填上颜色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图就是 OpenGL 中渲染管线的一个处理流程。

可以看到,流程图从读取顶点数据开始,然后后执行两个着色器:

  • 顶点着色器
  • 主要负责描绘图形,也就是根据顶点坐标,建立图形模型。
  • 片段着色器
  • 主要负责把顶点绘出的图形填上颜色。

由于这两个着色器对于最后图形显示效果至关重要,并且它们还是可以通过编程来控制的,这也是为什么可编程渲染管线要优于固定编程管线了。

事实上,随着显示技术的发展,渲染管线将不复存在了,顶点着色器和渲染管线统一被流处理器(Stream Processors)所取代。

但是目前手机上 OpenGL 还是使用渲染管线中,有了渲染管线,我们就可以完成点的形状绘制和着色两大问题了,接下来的工作也是围绕这条渲染管线开始的。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值