美文网首页
OpenGL 新手学习

OpenGL 新手学习

作者: 蒲公英守候_c082 | 来源:发表于2020-03-21 14:22 被阅读0次

    因为本人是IOS开发,所以开发环境是Mac OS下的环境搭建,同届大兄弟里面几位写的蛮不错的教学我就直接贴出来,大家可以直接查阅(任选其一即可)
    OpenGL 环境搭建1
    OpenGL 环境搭建2
    OpenGL 环境搭建3

    刚开始学习还是需要向大家介绍一下一些在开发中专用的名词,好让大家提前有个概念,后面学起来不至于看啥啥不会,听啥啥不懂 (开个玩笑)

    开始进入正题~

    图形API简介

    1.OpenGL(Open Graphics Library)是⼀一个跨编程语⾔、跨平台的编程图形程序接⼝口,它将计算机的资源抽象称为⼀一个个OpenGL的对象,对这些资源的操作抽象为⼀一个个的OpenGL指令
    2.OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦子集,针对⼿手机、 PDA和游戏主机等嵌⼊入式设备⽽而设计,去除了了许多不不必要和性能较低的API接⼝口。
    3.Metal : Metal: Apple为游戏开发者推出了了新的平台技术 Metal,该技术能够为 3D 图 像提⾼高 10 倍的渲染性能.Metal 是Apple为了了解决3D渲染⽽而推出的框架

    1.渲染

    将数学和图形数据转换成 3D 空间图像的操作叫做渲染(Rendering)。当这个术语作为动词使用时,指的是计算机创建三维图像时所经历的过程。它也作为名词使用,指的仅仅是最终的图像作品。

    2、变换(Transformation)和投影(Projection)

    图片描述

    1.变换:通过 变换(Transformation),或者说旋转这些点,并在他们之间绘制线段,我们就能在平面的 2D 屏幕上创造出一个 3D 世界的错觉。

    2.顶点: 这些点本身叫做 顶点(Vertices,单数为 Vertex),他们能通过一种称为 变换矩阵(Transformation Matrix)的数学结构进行旋转。
    另外还有一种矩阵叫 投影矩阵(Projection Matrix),用于将 3D 坐标转换成二维屏幕坐标,实际的线条也将在二维屏幕坐标上进行绘制。

    3.投影(Projection):用于创建几何图形的3D坐标将投影到一个2D表面(窗口背景)。
    正投影(Orthographic Projection)或平行投影:物体在屏幕上的大小和实际大小相同,不管是远还是近。

    4.透视投影(Perspective Projection):远处的物体看上去比近处的物体更小一些,在模拟和3D动画中,这种投影能够获得最大程度的逼真感。

    3.顶点、片元、图元和光栅化

    过程:顶点—> 图元 —> 片元—> 像素

    顶点—> 图元: 几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。

    图元 —> 片元:

    图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。
    1) 裁剪
    2) 转换到窗口坐标
    3) 光栅化

    光栅化是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个 片元(fragment)。(这就是片元和像素之间的关键区别,虽然两者的直观印象都是的像素,但是片元比像素多了许多信息,在光栅化中纹理映射之后图元信息转化为了像素)

    片元—> 像素:

    • 象素所有权(ownership)检测
    • 裁剪检测
    • Alpha检测
    • 模版检测
    • 深度检测
    • 融合
    • 抖动
    • 逻辑操作
    图片描述
    着色:沿着顶点之间改变颜⾊色值,能够轻松创建光照照射到一个立方体的效果。着色器(Shader)则是在图形硬件上执行的单独程序,用来处理顶点和执行光栅化任务。
    纹理贴图(Texture Mapping):将纹理理图⽚片附着到你绘图的图像上。一个纹理就是一副用来贴到三角形或多边形上的图片。
    混合(Blending):颜⾊色混合效果。

    4.状态机

    状态机 就是一种存在于理论中的机器,它具有以下的特点:
    1.它有记忆的能力,能够记住自己当前的状态。
    2.它可以接收输入,根据输入的内容和自己的状态,修改自己的状态,并且可以得到输出。
    3.当它进入某个特殊的状态(停机状态)的时候,它不再接收输入,停止工作。

    理论说起来很抽象,但实际上是很好理解的。
    首先,从本质上讲,我们现在的 电脑 就是典型的状态机。可以对照理解:

    1.电脑的存储器(内存、硬盘等等),可以记住电脑自己当前的状态(当前安装在电脑中的软件、保存在电脑中的数据,其实都是二进制的值,都属于当前的状态)。
    2.电脑的输入设备接收输入(键盘输入、鼠标输入、文件输入),根据输入的内容和自己的状态(主要指可以运行的程序代码),修改自己的状态(修改内存中的值),并且可以得到输出(将结果显示到屏幕)。
    3.当它进入某个特殊的状态(关机状态)的时候,它不再接收输入,停止工作。

    OpenGL 也可以看成这样的一种机器。让我们先对照理解一下:

    1.OpenGL 可以记录自己的状态(比如:当前所使用的颜色、是否开启了混合功能,等等,这些都是要记录的)
    2.OpenGL 可以接收输入(当我们调用 OpenGL 函数的时候,实际上可以看成 OpenGL 在接收我们的输入),根据输入的内容和自己的状态,修改自己的状态,并且可以得到输出(比如我们调用glColor3f,则 OpenGL 接收到这个输入后会修改自己的“当前颜色”这个状态;我们调用glRectf,则 OpenGL 会输出一个矩形)
    3.OpenGL 可以进入停止状态,不再接收输入。这个可能在我们的程序中表现得不太明显,不过在程序退出前,OpenGL 总会先停止工作的。

    简单总结就是:OpenGL 是一个 状态机,它保持自身的状态,除非用户输入一条命令让它改变状态。

    相关文章

      网友评论

          本文标题:OpenGL 新手学习

          本文链接:https://www.haomeiwen.com/subject/mkhyyhtx.html