OpenGL的工作流程

1. 几何操作
(1) 针对每个顶点的操作
每个顶点的空间坐标需要经过模型取景矩阵变换、法向矢量矩阵变换,若允许纹理自动生成,则由变换后的顶点坐标所生成的新纹理坐标替代原有的纹理坐标,再经过当前纹理矩阵变换,传递到几何要素装配步骤。
(2) 几何要素装配
不同的几何要素类型决定采取不同的几何要素装配方式。若使用平直明暗处理,线或多边形的所有顶点颜色则相同;若使用裁剪平面,裁剪后的每个顶点的空间坐标由投影矩阵进行变换,再由标准取景平面进行裁剪,再进行视口和深度变换操作。如果几何要素是多边形,还要做剔除检验,最后生成点图案、线宽、点尺寸的像素段,并赋上颜色、深度值。
2. 像素操作
由主机读入的像素首先解压缩成适当的组份数目,然后进行数据放大、偏置,并经过像素映射处理,根据数据类型限制在适当的取值范围内,像素最后写入纹理内存,使用纹理映射或光栅化生成像素段;如果像素数据由帧缓冲区读入,则执行放大、偏置、映射、调整等像素操作,再以适当的格式压缩。像素拷贝操作相当于解压缩和传输操作的组合,只是压缩和解压缩不是必须的,数据写入帧缓冲区前的传输操作只发生一次。
3. 像素段操作
当使用纹理映射时,每个游戏像素段将产生纹素,再进行雾效果计算、反走样处理。接着进行裁剪处理、一致性检验(只在RGBA模式下使用)、模板检验、深度缓冲区检验和抖动处理。若采用颜色索引模式,像素还要进行逻辑操作;在RGBA模式下则进行混合操作。
根据着色模式不同,决定像素段采取颜色屏蔽还是指数屏蔽,屏蔽操作之后的像素段将写入到适当的帧缓冲区。如果像素写入模板或深度缓冲区,则进行模板和深度检验屏蔽,而不用执行混合、抖动和逻辑操作。
对于创建一个三维图形的基本步骤,大致可以包括以下三个主要环节:
(1)建模:包括几何建模和行为建模,几何建模处理物体的几何和形状的表示,行为建模处理物体的运动和行为的描述; 
(2)设置视点:描述观察者的空间位置;
(3)设置环境:描述环境的特征,如:光源、空气能见度等。
OpenGL的绘制过程多种多样,内容非常丰富,主要提供以下几种对三维物体的绘制方式:
(1) 线框绘制方式(Wire frame):绘制三维物体的网格轮廓线。
(2) 深度优先线框绘制方式(Depth cued):采用线框方式绘图,使远处的物体比近处的物体暗一些,以模拟人眼看物体的效果。
(3) 反走样线框绘制方式(Antialiased):采用线框方式绘图,绘制时采用反走样技术,以减少图形线条的参差不齐。
(4) 平面明暗处理方式(Flat shading):对模型的平面单元按光照进行着色,但不进行光滑处理。
(5) 光滑明暗处理方式(Smooth shading):对模型按光照绘制的过程进行光滑处理,这种方式更接近于现实。
(6) 加阴影和纹理的方式(Shadow and Texture):在模型表面贴上纹理甚至加上光照阴影效果,使三维场景像照片一样逼真。
(7) 运动模糊绘制方式(Motion blured):模拟物体运动时人眼观察所觉察到的动感模糊现象。
(8) 大气环境效果(Atmosphere effects):在三维场景中加入雾等大气环境效果,使人有身临其境之感。 
(9) 深度域效果(Depth of effects):类似于照相机镜头效果,模拟在聚焦点处清晰。

时间: 2024-08-08 21:56:29

OpenGL的工作流程的相关文章

OpenGL工作流程

在OpenGL中,一切事物都在3D空间中,但我们的屏幕坐标确实2D像素数组,OpenGL大部分工作就是把3D坐标转换成适应屏幕的2D像素.3D坐标转换成2D屏幕坐标的过程是有OpenGL的图形渲染管线管理的.图形渲染管线的工作可以被划分为两个主要的部分: 一.把3D坐标转换成2D坐标. 二.把2D坐标转换成实际有颜色的像素. 注意:2D坐标和像素是不同的,2D坐标精确的描述了一个点在2D空间中的位置,二2D像素是这个点的近似值,2D像素收到你的屏幕/窗口分辨率的限制 图形渲染管线包含很多部分.首

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

Struts2工作流程

Struts2是一个非常优秀的MVC框架,它主要通过StrutsPrepareAndExecuteFilter过滤器将Struts2集成到Web应用中的. 基本工作流程: 1.客户端提交一个HttpServletRequest请求(action或JSP页面): 2.请求经过一系列的过滤器(如ActionContextCleanUp,SiteMesh等): 3.Struts2的核心过滤器StrutsPrepareAndExecuteFilter被调用,并询问ActionMapper来决定这个请求是

Laravel 5系列教程二:路由,视图,控制器工作流程

免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel的神奇世界了,主要是讲解Laravel的Router,Views,Controllers的工作流程,目的也就是让大家明白Laravel在处理一个get请求的时候是如何工作的. 在开始之前,我们首先得将我们的服务器启动起来,如果你使用Laravel的artisan,你可以直接: php artisan

RT-thread finsh工作流程

finsh是RT-Thread的命令行外壳(shell),提供一套供用户在命令行的操作接口,主要用于调试.查看系统信息.在大部分嵌入式系统中,一般开发调试都使用硬件调试器和printf日志打印,在有些情况下,这两种方式并不是那么好用.比如对于RT-Thread这个多线程系统,我们想知道某个时刻系统中的线程运行状态.手动控制系统状态.如果有一个shell,就可以输入命令,直接相应的函数执行获得需要的信息,或者控制程序的行为.这无疑会十分方便. finsh支持两种模式: 1. C语言解释器模式, 为

[Servlet]Servlet的工作流程及注意事项

Servlet工作流程 利用Servlet完成的Web应用的实际工作流程是通过Tomcat服务器发布服务,客户端与服务器端之间的交互遵循Http协议完成的.具体工作流程如下: 客户端浏览器向服务器端发送请求. 服务器端由Tomcat服务器提供的Servlet容器解析接收到的请求. 通过Web应用程序的配置文件web.xml,解析到对应执行的Servlet. Servlet完成客户端发送的请求逻辑,并完成向客户端发送的响应内容. 由Tomcat服务器提供的Servlet容器向客户端浏览器进行响应.

Ajax的工作流程简述

提到Ajax相信我们都不会陌生,不管你是前端开发还是后台数据处理的程序员,ajax的作用就像现在生活中的手机一样,无论是作用还是流程都差不多,这里我们要进行ajax操作后台数据并显示在页面上的话,首先我们这里才用原生态的ajax去实现,第一步要做的就是首先我们得有一个ajax才行,紧接着还得清楚他的工作流程才行啊,下面我就简单谈谈ajax的工作流程.     v作为一个刚接触ajax的信任来说肯定会觉得很神奇,不知道一个小小的ajax竟然有这种强大的功效实现这样复杂的任务,其实不然,当我们除去包

图解EJB工作流程

学习EJB需要对JNDI和RMI方面知识有一定的了解. JNDI为EJB提供命名和目录服务,实现不同目录位置的Bean的唯一标识. RMI为EJB提供远程访问能力,实现Bean的远程调用功能 在介绍Bean的工作流程之前,先熟悉一下RMI的工作流程 RMI设计的目标:实现运行在不同JVM中Java对象的调用 客户端通过JNDI服务获取Bean对象的接口,称为桩(stub) 一般情况下Bean对象并不希望被直接操控,比如针对不同客户端暴露不同接口,所以在JVM2上也提供一个对外接口,称为骨架(sk

Struts2的工作流程

Struts2的工作流程 1.客户端浏览器初始化时发出HTTP请求 2.根据web.xml配置,上述请求被FilterDispatcher接收 3.根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton 4.Action调用业务逻辑组件处理业务逻辑 5.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面 6.返回HTTP响应到客户端浏览器