openGL guide 中文版
中文版
Document Change History
版本号 |
日期 |
责任人 |
修改 |
0.9 |
2007年2月21日 |
Ehart |
Beta 版 |
1.1 |
2008年1月31 日 |
Ehart |
Feb 2008 版 |
|
|
|
|
|
|
|
|
前言
在OpenGL SDK 演示程序中提供了两个方面的帮助。首先,本程序演示了怎么去使用OpenGl API以及如何访问新硬件的功能扩展库。其次,SDK演示程序在于展示一些集成在同一个应用程序中有趣而独特的技术。在本指南中着重介绍了使用API 的方法。此外,本书中介绍的API可以用在更加复杂的效果上,并且为其他的文档提供了如何在OpenGL进行渲染的依据。
更新SDK的版本可在NVIDIA公司的官方网站上面找到:http://developer.nvidia.com
SDK 的结构
SDK的文档分为四个部分。第一部分是对文档下面需要用到的概念进行解释,这个目录提供了SDK中的所有需要用到的词汇,包括:模型,图像,数学以及示例代码。SDK中的第二部分是资源文件,包括共享数据文件(如:模型和纹理)。第三部分是介绍外部的库,包括支持窗口管理和文件访问等功能的常用库。第四章是一些示例代码,所有的代码都可以在一个解决方案文件中实现。
Common Code
本节意在将SDK中需要了解基本的概念列出来,并且在下面的大多示例中都会出现的一些名词。这样做的目的是提供一个工具让程序员更容易熟悉不同的代码。这些关键字都会放在nv这个命名空间下,以防止和其他命名的冲突以及方便重用。但是有一部分在旧的SDK中没有使用的关键字被取出来,并没有合并在标准命名空间中。
nvImage
nvImage库是一个为图像加载纹理的工具。可支持png、dds、hdr三种图片格式。它提供大量的纹理,如:压缩纹理、立方体贴图、预生成mip贴图、三维贴图、以及位图贴图等。这些贴图的接口会返回一个glTexImage的指针。nvImage库作为一个共享的库可以被所有的代码所用。
nvModel
nvModel模型图是用作加载网格数据的工具。当前nvModel只支持obj格式的多边形对象。模型库支持从文件中读取向量坐标(normals 也可以翻译为法线)以及纹理坐标,并且支持自动生成矢量空间图。模型库将网格编译为顶点数组,并且会产生一个索引列表支持点、边、三角形以及四边形等模型。和nvImage一样,nvModel也是一个共享库。
nvMath
nvMath是一个头文件库,提供了3D 应用程序所需要的基本数学库,分为:nvMath.h、nvVector.h(向量)、nvMatrix.h,三个文件,这些文件提供了向量模板、矩阵以及四元素的类。这些功能和类按照GLSL和Cg的习惯进行设计, 尽可能地使得源代码和渲染代码相匹配。
nvWidgets
nvWidgets是实时模式用户界面库,为用户减少了启动和交互的代码量,并且使得用户能更轻松地在代码中查看关键部分。nvWidget并不提供复杂的GUI界面工具,只是为简单的界面提供支持,使得简单的程序更容易理解。
GLEW
Glew是OpenGL扩展的工具,它的代码不是由NVIDIA公司提供的,但是在附带的SDK版本中有少许修改以支持NVIDIA最新的扩展。GLEW中对该库的头文件有许可和版权的限制。本SDK版本内的Glew的版本是1.5,对glProgramV ertexLimitNV的入口点做了些许修改。
GLEW查询和初始化OpenGL扩展,提供了一个机制和核心以上版本支持平台的ABI定义。GLEW解析扩展到生产E规格的扩展库的来源。SDK只包含生成的源,而不是生成脚本。
要获得更多关于Glew 的信息以及生成的脚本请访问官方网站:ttp://glew.sourceforge.net/
External Libraries (扩展库)
扩展库包括不是有英伟达公司所提供的库资源。对于所有的扩展库在文件的开头都标明了其公司以及版权。这些扩展库被许多项目用作共公库,并可以从SDK中替换为新的版本。这些库的头文件、库、以及dll所有的版本都已经被SDK测试过,并且为它们提供方便的入口,这些在SDK中提供的扩展库有:
Libpng – PNG库
Libpng 主页: http://www.libpng.org/pub/png/libpng.html
Zlib – 压缩库
Zlib 主页: http://www.zlib.net/
GLUT –OpenGL实用工具包管理的OpenGL窗口
对于zlib 和 libpng ,由the GnuWin32 project 工程 编译好的二进制文件请访问http://gnuwin32.sourceforge.net/.
Media Files(资源文件)
由SDK提供的外部资源如纹理文件等可以在下面提供的清单中找到
Paul Debevec’s Light probe images - http://www.debevec.org/Probes/
rnl_cross.dds
grace_new_cross.hdr
SpeedTree - http://www.speedtree.com/
FraserFirNeedles_MD_1.dds
FraserFirNeedles_MD_1_Normal.dds
Cg 2.0
完整的SDK自带的CG2.0的安装程序。此版本支持GeForce 8000系列GPU(图形处理器)的新功能。此版本已经有资格与此SDK中的样本。
Running the Samples
在SDK中的大多数样品需要GeForce 8000系列或更高版本的硬件。在许多情况下,
它们可以运行软件emulati在旧的硬件上(如有必要)。这种支持可以启用由NVemulate工具提供。
http://developer.nvidia.c om/object/nvemulate.html
Samples
HDR
HDR示例演示了如何使用新的GeForce 8000系列动态场景的渲染和显示功能。该示例使用GL_EXT_packed_float和GL_EXT_texture_shared_exponent扩展优化存储浮点帧缓存和纹理。该示例还演示了如何使用这些和其他动态范围格式GL_EXT_framebuffer_multisample。最后,除了曝光操作中经常使用的HDR渲染,此示例实现的效果接近人们经常会看到明亮的物体发出的光线流。
Features used
GL_ARB_vertex_program
GL_ARB_fragment_program
GL_EXT_framebuffer_object
GL_EXT_framebuffer_multisam
GL_EXT_framebuffer_blit
GL_NV_framebuffer_multis
OpenGL version 2.0
控制选项:
Control Action
Right Mouse Button Application menu
Left Mouse Button ject Rotate ob
Shift + Left Mouse But ton t of the camera Pan object in fron
Control + Left Mouse Button he camera Dolly the object toward/away from t
Escape Quit the sample
W Toggle rendering in wireframe
A Toggle MSAA 4x <-> CS AA or supersampling
F Toggle using a fragment program
C CSAA 16x only (FBO size factor = 1 and no kernel filter used)
S CSAA 16x with supersampling (FBO size factor = 2x + kernel
filter)
- Cycle backward through the HW MSAA/CSAA modes for
supers ampled FBO
+ Cycle forward through the HW MSAA/CSAA modes for
supersampled FBO
9 Decrease the supersample size factor
0 ctor Increase the supersample size fa
1 Select single bilinear downsample technique
2 Select five bilinear tap downasmple technique
3 Select advanced downsample technique
Space Toggle continuous animation of the object