三、WindowsNT下的OpenGL

3.1、Windows NT下的OpenGL函数
  如前面的章节所述,Windows NT下的OpenGL同样包含100多个库函数,这些函数都按一定的格式来命名,即每个函数都以gl开头。Windows NT下的OpenGL除了具有基本的OpenGL函数外,还支持其他四类函数:

  在OpenGL中有115个核心函数,这些函数是最基本的,它们可以在任何OpenGL的工作平台上应用。这些函数用于建立各种各样的形体,产生光照效果,进行反走样以及进行纹理映射,进行投影变换等等。由于这些核心函数有许多种形式并能够接受不同类型的参数,实际上这些函数可以派生出300 多个函数。
  OpenGL的实用函数是比OpenGL核心函数更高一层的函数,这些函数是通过调用核心函数来起作用的。这些函数提供了十分简单的用法,从而减轻了开发者的编程负担。OpenGL的实用函数包括纹理映射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体(本指南将详细讲述这些函数的具体用法)等。这部分函数象核心函数一样在任何OpenGL平台都可以应用。
  OpenGL的辅助库是一些特殊的函数,这些函数本来是用于初学者做简单的练习之用,因此这些函数不能在所有的OpenGL平台上使用,在Windows NT环境下可以使用这些函数。这些函数使用简单,它们可以用于窗口管理、输入输出处理以及绘制一些简单的三维形体。为了使OpenGL的应用程序具有良好的移植性,在使用OpenGL辅助库的时候应谨慎。
  6个WGL函数是用于连接OpenGL与Windows NT的,这些函数用于在Windows NT环境下的OpenGL窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等。这些函数把Windows与OpenGL揉合在一起。最后的5个Win32函数用于处理象素存储格式和双缓冲区,显然这些函数仅仅能够用于Win32系统而不能用于其它OpenGL平台。

3.2、OpenGL基本功能
  OpenGL能够对整个三维模型进行渲染着色,从而绘制出与客观世界十分类似的三维景象。另外OpenGL还可以进行三维交互、动作模拟等。具体的功能主要有以下这些内容。
模型绘制
OpenGL能够绘制点、线和多边形。应用这些基本的形体,我们可以构造出几乎所有的三维模型。OpenGL通常用模型的多边形的顶点来描述三维模型。如何通过多边形及其顶点来描述三维模型,在指南的在后续章节会有详细的介绍。
模型观察
在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。观察三维模型是通过一系列的坐标变换进行的。模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。

颜色模式的指定
OpenGL 应用了一些专门的函数来指定三维模型的颜色。程序员可以选择二个颜色模式,即RGBA模式和颜色表模式。在RGBA模式中,颜色直接由RGB值来指定;在颜色表模式中,颜色值则由颜色表中的一个颜色索引值来指定。程序员还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色。
光照应用
用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL提供了管理四种光(辐射光、环境光、镜面光和漫反射光)的方法,另外还可以指定模型表面的反射特性。
图象效果增强
OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来增强图象的效果。反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模型的半透明效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。
位图和图象处理
OpenGL还提供了专门对位图和图象进行操作的函数。
纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。OpenGL提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。
实时动画
为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(double buffer)。OpenGL提供了双缓存技术的一系列函数。
交互技术
目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。
3.3、Windows NT下OpenGL的结构
  OpenGL的作用机制是客户( client )/服务器( sever )机制,即客户(用OpenGL绘制景物的应用程序)向服务器(即OpenGL内核)发布OpenGL命令,服务器则解释这些命令。大多数情况下,客户和服务器在同一机器上运行。正是OpenGL的这种客户/服务器机制,OpenGL可以十分方便地在网络环境下使用。因此Windows NT下的OpenGL是网络透明的。正象Windows的图形设备接口( GDI )把图形函数库封装在一个动态链接库(Windows NT下的GDI32.DLL)内一样,OpenGL图形库也被封装在一个动态链接库内( OPENGL32.DLL )。受客户应用程序调用的OpenGL函数都先在OPENGL32.DLL中处理,然后传给服务器WINSRV.DLL。OpenGL的命令再次得到处理并且直接传给Win32的设备驱动接口( Device Drive Interface,DDI ),这样就把经过处理的图形命令送给视频显示驱动程序。下图简要说明这个过程:

 在三维图形加速卡的GLINT图形加速芯片的加速支持下,二个附加的驱动程序被加入这个过程中。一个OpenGL可安装客户驱动程序( Installable Client Driver,ICD )被加在客户这一边,一个硬件指定DDI( Hardware-specific DDI )被加在服务器这边,这个驱动程序与Wind32 DDI是同一级别的。

文末卡片领取上方资料、还有更多音视频开发资料

WindowsNT下的OpenGL相关推荐

  1. Ubuntu下安装OpenGL/Glut库

    http://www.libaqiang.com/?p=78330 1.Ubuntu下安装OpenGL/Glut库 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语 ...

  2. LINUX 下构建OpenGL ES 3.0

    Ubuntu LINUX 下构建OpenGL ES 3.0 Category : OpenGL LINUX 下构建OpenGL ES 3.0 软件:PowerVRSDKSetup-4.0.run-x6 ...

  3. Qt下的OpenGL 编程(3)绘制平面几何体

    一. 提要 之前的一篇教程已经搭建好了Qt下的OpenGL的编程环境,几天要来学习的就是OpenGL的2D绘图. 2D作为绘图的基础,还是很值得去好好学习,比如迪卡尔坐标,透视设置等等,而所谓的3D, ...

  4. VC++下的OpenGL编程

    1.值得记住的约定 一般情况下,VC++下进行OpenGL应用程序开发步骤如下: 1.通过PIXELFORMATDESCRIPTOR结构设置备注描述表DC的像素格式属性. 2.创建渲染描述表RC,并与 ...

  5. win32下的OpenGL绘图环境框架

    Win32下OpenGL入门 主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件 1, 新 ...

  6. Win32 OpenGL 编程(1)Win32下的OpenGL编程必须步骤

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Win3 ...

  7. 在Win32下搭建opengl绘制环境

    在官方标准教程中使用glfw3来创建opengl的窗体,处理输入相关消息.本文介绍下如何在win32下搭建opengl绘制环境. 以下是在win32下搭建opengl绘制环境的流程 1.入口函数:in ...

  8. Linux中opengl库叫什么名字,Linux下的OpenGL——Mesa和GLX简介

    一.什么是Mesa和GLX 众所周知,OpenGL作为图形界的工业标准,其仅仅定义了一组2D和3D图形接口API,而对于窗口管理.IO消息响应等并没有规定.也就是说,OpenGL依赖各平台提供用于渲染 ...

  9. linux下opengl开发环境,Linux下配置OpenGL开发环境

    原创:http://blog..net/u013383042/article/details/50344467 1.首先安装build-essential软件包,输入命令:sudo apt-get i ...

最新文章

  1. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...
  2. 扇区、磁盘块、页、页框、缓冲区之间的关系!
  3. 使用infinite-scroll实现Ghost博文列表的滚动加载
  4. Python---json模块
  5. python语言的变量随时_Python参数注解
  6. 【openjudge 1.11 07】和为给定数
  7. [51nod1201]整数划分
  8. 服务器出生点配置文件,服务器设置出生点
  9. 数据 3 分钟 | 国产数据库迎来 2 名开源玩家、数据库厂商年度报告都说了些什么?...
  10. 台式计算机主机组成图,台式电脑主板的各部分组成及详细说明,还有各种连...-卓优商学问答...
  11. android 溢出按钮,React-Native封裝Tabbar 實現中間按鈕溢出效果(Android/iOS)
  12. mysql 还原 批量ibd_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
  13. SQL:显示每天的小计,某一天没有记录也要显示
  14. iOS APP 逆向安全杂谈之三
  15. linux 定位 踩内存_应用稳定性优化系列(二),Crash/Tombstone问题分析及定位
  16. AWVS13批量脚本
  17. 赛思永盛120G固体硬盘拆解,YS9082HC主控方案,布局很像公版2258XT和2259XT
  18. 亲民地理第39期-佛山(2)南风古灶
  19. 【数据分析可视化】股票市场分析实战之风险分析
  20. linux PS命令详解

热门文章

  1. 玩客云安装宝塔面板5.9(2022/3/30亲测有效)
  2. 联合解决方案 | 亚信科技AntDB数据库携手浪潮K1 Power赋能关键行业数字化转型,助力新基建
  3. creo绘图属性模板_Proe_creo完整制作工程图格式和模板
  4. 【动手学习pytorch笔记】24.门控循环单元GRU
  5. c语言课程班级档案管理系统,C语言班级档案管理系统
  6. 国际嵌入式大会精彩内容抢先看!
  7. 完美使用Word的小技巧
  8. 关于CCNA的培训课程(1)-- 网络基础部分
  9. CCNA培训课总结笔记(一)
  10. 【编译原理】构造DFA例题