Opengl(一)基础知识

1、Opengl能做什么

opengl是一个2d与3d的图片库。

  • 视频渲染就是通过opengl实现。
  • 图像、视频编辑及各种特效
  • 游戏引擎
  • 虚拟现实
  • 3D建模

2 常见的2D/3D图形应用接口

图形应用接口优点缺点
OpenGl ESOpenGl的移动版 、 跨平台学习曲线较高 、 架构老化 、效率略低
VulKan新一代图形接口,代替OpenGl 、高性能、跨平台学习曲线高、支持度不如Opengl
Metal高性能、API简单易用不支持跨平台
Direct3D性能高 API简单易用不支持跨平台
WebGLweb图形API 、易于集成性能差
WebGPU新一代Web图形API 、性能高 、易于集成适配性差点

3 OpenGL简介

  • 1992年发布第一个版本,到现在有30多年历史
  • 1997年支持多平台
  • 2003年发布2.0,是其一个重要版本,加入了shader
  • 2008年发布3.0,功能得到较大提升
  • 2014年4.4和GLES3.0发布,移除过时API,功能统一

4 图形渲染管线

将3D图像绘制到2D屏幕上的流程,多GPU并行操作,成为流水线。
图形管线也叫渲染管线,是将渲染数据(例如模型、材质、贴图等内容)进行整合、运算并最终显示到屏幕的流程。渲染管线将渲染的整个流程划分为了若干个阶段,每一个阶段的计算过程都依赖上一个阶段的计算结果,就像工厂内的生产流水线,每一个环节都有专门的步骤来对原材料进行加工,这就是它被称为渲染管线或渲染流水线的原因。

图形管线简单而言可以分为程序阶段、几何阶段以及光栅化阶段三大阶段,每一大阶段又由若干个小阶段或者细节构成。

在这里插入图片描述
应用程序阶段在cpu中执行,几何阶段和光栅化阶段都是在GPU中执行。

应用程序阶段

顶点坐标数据

 /**
     * 三角形顶点位置
     */
    private val triangleCoors = floatArrayOf(
        0.5f, 0.5f, 0.0f,
        -0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f
    )

光照
摄像机位置
纹理:类比墙面、皮肤
shader程序

   /*
     * 顶点位置程序
     */
    private val vertexShaderCode =
        "attribute vec4 vPosition;" +
                "void main() { " +
                "   gl_Position = vPosition;" +
                "}"

几何变换

模型变换-》视图变换-》顶点着色-》曲面细分-》顶点增减-》投影变换-》视口裁剪-》屏幕映射
投影变换:3D空间模型投影到2D上
视口裁剪:3D空间物体可能是比较大的,会超出视口,超出的部分会被裁剪掉。
在这里插入图片描述

光栅化

三角形组装:对定点的输入数据(比如颜色、法线、纹理坐标)进行插值得到各个像素对应的数据值,为后面的像素着色提供数据
遍历三角形:将三角形所覆盖的像素位置找出来,并生成对应的片元(像素),同时进行插值计算得到片元的属性(如颜色、法线、纹理坐标等)
片元着色:对每个片元进行颜色计算,例如进行纹理采样,光照计算,阴影处理等
片元操作:片元操作是对每个片元进行一些测试和混合,例如裁剪测试,深度测试,模版测试,Alpha测试和alpha混合等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值