OpenGL

合集下载

opengl使用手册 简书

opengl使用手册 简书

OpenGL(Open Graphics Library)是一种用于渲染2D和3D图形的跨平台图形API。

OpenGL提供了一系列的函数,可以用来配置图形环境、绘制几何图形、处理纹理、执行变换等。

以下是一个简要的OpenGL使用手册的概述:1. 初始化OpenGL环境:-创建OpenGL上下文,配置窗口和视口,初始化OpenGL的各种参数。

2. 设置投影和视图矩阵:-使用OpenGL的矩阵操作函数,设置投影矩阵和视图矩阵,定义场景中物体的可见范围和视图。

3. 创建和加载着色器:-编写顶点着色器和片元着色器,将它们编译成着色器程序,并链接到OpenGL上下文。

4. 创建和绑定缓冲区对象:-创建顶点缓冲对象(VBO)和索引缓冲对象(IBO)来存储顶点数据和索引数据。

5. 定义顶点数据和绘制图形:-定义顶点数据,将数据传递到缓冲区对象中,使用OpenGL函数绘制图形。

6. 处理纹理:-加载纹理图像,创建纹理对象,将纹理数据传递到GPU,使用纹理进行图形渲染。

7. 执行变换:-使用OpenGL的矩阵操作函数,对物体进行平移、旋转、缩放等变换。

8. 设置光照和材质:-配置光源和材质属性,实现光照效果。

9. 深度测试和遮挡剔除:-启用深度测试和遮挡剔除,以处理物体的深度关系和遮挡关系。

10. 处理用户输入:-处理用户输入,例如键盘和鼠标事件,以交互式地改变场景。

11. 错误处理:-添加错误检查,确保OpenGL函数的调用没有错误,方便调试。

12. 清理和释放资源:-在程序结束时清理和释放分配的OpenGL资源,防止内存泄漏。

13. OpenGL扩展:-了解和使用OpenGL的扩展,以获取更先进的图形特性。

14. 学习资源:-利用OpenGL的学习资源,包括在线教程、书籍和社区,以深入了解图形编程。

请注意,上述步骤是一个简要的概述。

OpenGL是一个庞大而灵活的库,涵盖了广泛的图形编程概念。

深入学习OpenGL需要时间和实践。

opengl光栅化原理

opengl光栅化原理

opengl光栅化原理OpenGL,这个被广泛使用的图形编程接口,以其强大的功能和灵活的编程方式,在计算机图形领域占据了重要的地位。

而在OpenGL 中,光栅化(Rasterization)是一个关键步骤,它把几何形状转换成像素网格。

这篇文章将带您深入了解OpenGL中的光栅化原理。

一、引言想象一下,你正在一个巨大的画布前,手中握着一把画笔,你的任务是将那些复杂的几何形状转换成实际的像素。

这就是光栅化的过程,也是OpenGL中的核心步骤。

理解这个过程,对于我们更好地使用OpenGL,尤其是进行高效的渲染,是非常重要的。

二、基本原理1.坐标变换:首先,我们需要将几何形状的顶点从世界坐标系转换到屏幕坐标系。

这个过程通常涉及到矩阵变换,包括平移、旋转和缩放等。

2.边缘检测:在转换后的顶点上,我们需要找到相邻的像素,以确定哪些部分的形状应该被绘制出来。

这通常通过使用扫描线(scanline)方法来实现。

3.细化:通过将线段分割成更小的线段,我们可以减少绘制的复杂性。

这种方法通常涉及到使用一些算法,如Z-Buffering或扫描线算法。

4.像素填充:最后,我们将每个边缘的像素部分填充为颜色。

这通常涉及到采样颜色纹理或者使用一些插值方法来生成颜色。

三、更深入的理解1.光栅化效率和精度:在光栅化过程中,我们需要平衡效率和精度。

为了提高效率,我们可以使用一些简化的算法,如简单的扫描线算法或简单的Z-Buffering。

但是,这些算法可能会牺牲精度。

相反,更复杂的算法如PhongAntialiasing或Mipmapping可以提供更好的视觉效果,但可能会降低性能。

2.纹理映射:纹理映射是OpenGL中的一项重要功能,它允许我们在渲染时使用图像数据来替代像素的颜色。

在光栅化过程中,我们需要将纹理坐标应用到几何形状上,然后将纹理采样到对应的像素上。

这个过程涉及到很多计算和存储开销,因此我们需要使用合适的纹理过滤技术来减少这些开销。

OpenGL简介

OpenGL简介

OpenGL简介(),Open Graphics Library,开放图形库,是跨语⾔、跨平台的3D图形编程接⼝。

OpenGL使⽤客户端 - 服务器架构设计,应⽤程序为客户端,图形硬件设备为服务器。

客户端负责提交OpenGL命令,服务器执⾏这些命令并渲染出图像。

OpenGL是⼀个状态机,每个状态都有⼀个默认值。

开发者可以设置这些状态,然后让它们⼀直⽣效,直到再次修改它们。

例如:当前颜⾊就是⼀个状态变量,可以把其设置成红⾊,那么在此之后绘制的所有物体都会使⽤这种颜⾊,直到再次把当前颜⾊设置为其他颜⾊。

OpenGL的API可通过软件模拟实现,⾼效实现依赖于显⽰设备⼚商提供的硬件加速。

注:开源()是⼀个纯软件模拟实现的图形API,其代码兼容于OpenGL。

OpenGL规范⽬前由⾮盈利组织()的架构评审委员会(Architecture Review Board,ARB)维护。

ARB主要由操作系统⼚商(Apple Computer、Microsoft【2003.3已退出】等)、图形硬件⼚商(3Dlabs、SGI、NVIDIA、ATI Technologies、Intel等)、技术公司(Mozilla、Google等)和国际3D组织组成。

OpenGL是⼀个不断进化的API,在OpenGL1.2.1版本引⼊扩展(extension)的概念。

OpenGL新版本会定期由Khronos Group发布。

①增加新的扩展API(引⼊新函数和新常量)来增加新功能②放松或取消现有扩展API的限制来增强功能⼀个扩展由两部分组成:包含扩展函数原型的头⽂件和⼚商的设备驱动实现ARB扩展:标准扩展。

由架构评审委员ARB批准发布。

第⼀个ARB扩展是GL_ARB_multitexture(注:在OpenGL1.3中加⼊)。

所有ARB 扩展可从查询。

GL_ARB_multitexture扩展中新增了包含glActiveTextureARB、glClientActiveTextureARB、glMultiTexCoord*ARB函数,共34个。

opengl 原理

opengl 原理

opengl 原理OpenGL是一种图形编程接口,使得开发者可以利用硬件加速来绘制2D和3D图形。

它提供了一系列函数和状态机,使用C语言进行编程。

OpenGL的工作原理如下:1. 初始化:在使用OpenGL之前,需要先初始化OpenGL环境。

这包括创建图形上下文、加载图形驱动程序、设置显示设备等操作。

2. 设置状态:OpenGL使用一系列状态来控制绘制过程。

这些状态可以包括清除颜色缓冲区的颜色、设置深度测试、开启光照等。

开发者可以利用OpenGL提供的函数来设置这些状态。

3. 创建对象:在OpenGL中,开发者需要创建对象来表示物体或场景。

常用的对象包括顶点数组对象(Vertex Array Object,VAO)和顶点缓冲对象(Vertex Buffer Object,VBO)。

这些对象用于存储顶点数据、纹理坐标等信息。

4. 编写着色器:OpenGL使用着色器来控制顶点和片段(像素)的处理过程。

开发者需要编写顶点着色器和片段着色器,并将它们编译为可执行的着色器程序。

顶点着色器用于处理顶点数据,而片段着色器用于处理像素数据。

5. 绘制物体:在绘制物体之前,需要将顶点数据、纹理坐标等信息传递给OpenGL。

开发者可以使用VAO和VBO来管理这些数据。

然后,利用着色器程序和绘制命令(如glDrawArrays 和glDrawElements)来执行绘制操作。

6. 渲染:在绘制完成后,OpenGL会对图形进行渲染。

这包括执行光栅化过程(将几何图形转换为像素)和颜色插值等操作。

最终,渲染结果将会显示在屏幕上。

7. 清理:在使用完OpenGL之后,需要进行清理操作,释放资源。

这包括删除VAO和VBO对象、卸载着色器程序、关闭OpenGL环境等。

总结起来,OpenGL的工作原理涵盖了环境初始化、状态设置、对象创建、着色器编写、物体绘制、渲染和清理等步骤。

通过合理地利用这些步骤,开发者可以实现高效的图形编程。

opengl面试题

opengl面试题

opengl面试题OpenGL(Open Graphics Library)是一种跨平台的图形程序接口,被广泛应用于计算机图形学、游戏开发和虚拟现实等领域。

在面试中,对于应聘者来说,熟悉和掌握OpenGL相关知识是非常重要的。

本文将针对OpenGL面试题,从基础知识到高级概念进行详细讲解。

一、OpenGL基础知识1. 什么是OpenGL?OpenGL是一种开放的、跨平台的图形程序接口,由一系列函数库组成,用于渲染2D和3D图形。

它提供了丰富的绘图函数和状态管理函数,可以用于创建和操控渲染管线,实现图形的绘制、变换、光照等操作。

2. OpenGL的版本有哪些?它们之间有何区别?OpenGL的版本包括OpenGL 1.0、OpenGL 2.0、OpenGL 3.0、OpenGL 4.0等。

每个版本都有自己特定的功能和特性,新版本通常会引入更强大的功能和更高效的实现方式。

主要的区别在于对硬件和图形特性的支持程度上有所不同。

3. 什么是渲染管线?渲染管线是OpenGL中的一个重要概念,它描述了图形的处理过程。

渲染管线包括几个阶段,如顶点处理、光栅化、片段处理等。

每个阶段都有特定的功能和输入输出。

熟悉渲染管线的工作原理是理解OpenGL的关键。

4. 什么是顶点缓冲对象(VBO)?顶点缓冲对象是OpenGL中用于存储顶点数据的缓冲区。

通过创建和绑定VBO,可以将顶点数据传输到显存中,从而提高渲染效率。

VBO可以存储顶点的位置、颜色、纹理坐标等信息。

二、OpenGL高级概念1. 什么是着色器(Shader)?着色器是OpenGL中用于控制图形渲染过程的程序。

着色器分为顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。

顶点着色器用于处理顶点相关计算,如位置变换、法线变换等;片段着色器用于处理每个像素的光照、纹理采样等操作。

2. 什么是纹理(Texture)?纹理是二维图像的映射,可以应用到模型的表面上。

OpenGL 简介

OpenGL 简介

OpenGL使用
GLUT ( OpenGL Utility Toolkit ) 安装:在windows下通过 C/C++语言编写 GLUT 程序, 需要以下三个文件:
举例:在window XP下使用VC6安装GLUT
– – – –
– GLUT.H - 需要源代码中包含这个文件。通常情况下,这个文件 应该放在系统的包含目录下的 GL 文件夹中。 – GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这 个文件必须被连接到程序中, 确保它放在 LIB 目录中。 – glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据所 使用的OpenGL选择一个,如果正在使用微软公司的版本,那么 必须选择 glut32.dll。应该把DLL放置在系统文件夹中。
OpenGL使用
void main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100); glutInitWindowSize(400,300); glutCreateWindow(“An Example OpenGL Program.”); init(); glutDisplayFunc(lineSegment); glutMainLoop(); }
OpenGL使用
OpenGL使用
OpenGL使用
#include <GL/glut.h> void renderScene(void) { //绘制一个简单的二维的三角形 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); //初始化glut glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); //设置窗口的模式-深度缓存,单缓存,颜色模型 glutInitWindowPosition(100,100); //设置窗口的位置 glutInitWindowSize(320,320); //设置窗口的大小 glutCreateWindow(“3D Tech- GLUT Tutorial”); //创建窗口并赋予title glutDisplayFunc(renderScene);//调用renderScene把绘制传送到窗口 glutMainLoop(); //进入循环等待

OpenGL介绍

OpenGL介绍
OpenGL实用库
glaux.h: OpenGL扩展库 glut.h: OpenGL实用工具包 #include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h> #include <GL/glut.h>
此外,OpenGL还提供了反走样技术,能够实现深度暗示(Depth Cue)、运动模糊(Motion Blur)、雾化(Fog)等特殊效果。
6.1.3 OpenGL的绘制流程和原理
点数据 评价器 逐点操作 基元匹配 基片 操作
显示 列表
像素 数据 像素操作
光栅化
帧缓冲区
纹理存储器
OpenGL指令从左侧进入OpenGL,有两类数据,分别是由顶点描述的几何模 型和由像素描述的位图、影像等模型,其中后者经过像素操作后直接进入光栅 化。评价器(Evaluator)用于处理输入的模型数据,例如对顶点进行转换、光照, 并把图元剪切到视景体中,为下一步光栅化做好准备。显示列表(Display List) 用于存储一部分指令,留待合适时间以便于快速处理。光栅化将图元转化成二 维操作,并计算结果图像中每个点的颜色和深度等信息,产生一系列图像的帧 缓存描述值,其生成结果称为基片(Fragment)。基片操作主要的有帧缓存的更 新、测试、融合和屏蔽操作,以及基片之间的逻辑操作和抖动(Dithering)。
第6章 OpenGL
6.1 基本介绍
6.1.1 背景情况
OpenGL(Open Graphics Library,即开放性图形库)是以SGI的 GL三维图形库为基础制定的一个开放式三维图形标准。SGI在 1992年7月发布了1.0版。 OpenGL 规 范 由 ARB(OpenGL Architecture Review Board, OpenGL结构评审委员会)负责管理,目前加入OpenGL ARB的 成员有SGI、Microsoft、Intel、IBM、SUN、Compaq、HP等公 司,它们均采用了OpenGL图形标准,许多软件厂商以OpenGL 为基础开发自己的产品,硬件厂商提供对OpenGL的支持。由 于OpenGL的广泛应用,它已经成为一个工业标准。

opengl底层原理

opengl底层原理

opengl底层原理OpenGL底层原理什么是OpenGL?•OpenGL是一种跨平台的图形编程接口,用于渲染2D和3D图形。

•它提供了一组用于操作图形硬件的函数,使开发人员可以利用计算机的图形处理单元(GPU)来实现高效的图形渲染。

OpenGL的工作原理•图形管线:OpenGL使用图形管线来处理图形数据并将其渲染到屏幕上。

•顶点着色器:顶点着色器是图形管线的第一个阶段,它负责对输入的几何图元进行处理并转换为屏幕上的像素。

•图元装配器:图元装配器负责将顶点组装成几何图元,如点、线、三角形等。

•几何着色器:几何着色器可以对输入的几何图元进行处理,并生成新的几何图元。

•光栅化器:光栅化器将几何图元转换为像素,并确定像素的片段属性,如颜色和深度值。

•片段着色器:片段着色器对光栅化产生的每个片段进行处理,并为其分配最终的颜色值。

•帧缓冲:帧缓冲是保存图像数据的内存区域,OpenGL将渲染的结果存储在帧缓冲中,并最终显示在屏幕上。

OpenGL的渲染过程1.准备图形数据–创建顶点数组对象(VAO)和顶点缓冲对象(VBO),并将顶点数据存储在VBO中。

–设置顶点着色器和片段着色器,将其编译为可执行的着色器程序。

2.进行渲染–绑定VAO和VBO,将顶点数据发送到顶点着色器。

–在顶点着色器中对顶点进行变换和处理,并将输出传递给几何着色器。

–在几何着色器中对几何图元进行处理,并将输出传递给光栅化器。

–光栅化器将几何图元转换为像素,并传递给片段着色器。

–片段着色器对每个片段进行处理,并为其分配最终的颜色。

–渲染结果存储在帧缓冲中。

3.显示结果–将帧缓冲中的渲染结果显示在屏幕上。

优化OpenGL性能的方法•使用顶点缓冲对象(VBO)来存储和传递顶点数据,减少与CPU 之间的数据传输。

•使用顶点数组对象(VAO)来管理顶点属性的状态,提高渲染的效率。

•使用着色器程序进行顶点和片段的并行处理,利用GPU的并行计算能力。

•对绘制的对象进行批处理,减少状态切换和API调用,提高渲染效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

转:OpenGL基本概念入门1——OpenGL 工作机制2009-05-02 22:401 OpenGL中3D物体的表示在3D空间中,场景是物体或模型的集合。

在3D图形渲染中,所有的物体都是由三角形构成的。

这是因为一个三角形可以表示一个平面,而3D物体就是由一个或多个平面构成的。

比如下图表示了一个非常复杂的3D地形,它门也不过是由许许多多三角形表示的。

渲染后的地形面貌复杂的地形也是由三角形构成的(图片来自本站Terrian Editor)因此,在OpenGL中,我们只要指定一个或多个三角形,就可以表示任意3D物体。

那么如何指定三角形呢?OpenGL提供三种指定三角形的方法:即单个三角形、三角条形和三角扇形。

指定单个三角形。

这是最简单,最直接的方法。

即调用特定的OpenGL函数,传入三个顶点坐标,三角条形是在单个三角形的基础上,再指定一个或多个顶点。

这些顶点按照次序同上一顶点一起构成一个新的三角形。

下图演示了这种推进过程。

三角扇形。

既然使用三角形就可以表示任何图形,为什么还要使用三角条形和三角扇形呢?这是因为在OpenGL渲染流水线中,对于每个顶点都要进行变换运算。

而对于一些连接在一起的三角形组来说,使用三角条形或三角扇形就减少了顶点的数目,这意味着减少了对顶点的运算,因此提高了渲染速度。

例如,上图中第三个三角扇形,该扇形描述了4个三角形。

如果把这四个三角形都一一作为单个三角形传给OpenGL的话,我们需要3*4=12个顶点,而使用了三角扇形之后,我们只使用了6个顶点。

这节约了一半的运算量!2 OpenGL 的渲染流水线当我们把要绘制的三角形传给OpenGL之后,OpenGL还要做许多工作以完成3D空间到屏幕的投影。

这一系列的过程被称为OpenGL的渲染流水线。

一般地,OpenGL的渲染流程如下:2.1 视图变换当一个场景确定之后,如果我们想移动某个物体,或者要实现场景内的漫游,就必须进行模型视图的变换。

模型视图变换可以根据需要,移动或旋转一个或多个物体。

例如,如果我们想在3D空间中沿着Z轴向前走的话,只需要把所有物体向-Z方向移动n个单位即可。

如果我们要向左看,就应该把所有物体沿着Y轴渲染向右旋转N个角度。

下图演示了这个过程。

2.2 背面隐藏在一些封闭的3D物体中,朝着物体内部的面总是不可见的。

对于这些永远不可见的平面,我们可以使用背面隐藏忽略对它的绘制以提高渲染速度。

为了实现背面隐藏,我们在绘制三角形的时候必须注意三角形的绕法。

一般的,OpenGL默认为逆时针缠绕的面是正面。

如下图所示的三角形中,如果把顶点按照V1->V3->V2的顺序传给OpenGL,那么OpenGL就会认为这个三角形朝着屏幕的面是正面。

使用背面隐藏,就要求我们在把图形传给OpenGL的时候要始终遵守正面使用逆时针绕法的规定。

要开启背面隐藏的功能,只需调用函数:glEnable(GL_CULL_FACE);当然,我们也可以改变OpenGL的设置,决定是对物体的正面还是背面进行隐藏。

调用如下函数: glCullFace(GL_FRONT);来隐藏正面,也可调用glCullFace(GL_BACK);来隐藏背面。

2.3 光照渲染如果你开启了光照渲染,并且为每个顶点指定了它的法线,在此过程中,OpenGL将根据顶点的法线和光源的位置及性质重新计算顶点的颜色。

使用光照效果可以大大提高画面的真实性。

我们将在第六章中讲到光照。

2.4 剪裁剪裁就是把那些不在视见空间,或者一半在可视空间中的物体剔除或剪裁,以保证不该出现在屏幕上的图形就不出现。

2.5 投影要把一个3D空间中的物体显示在屏幕上,就要进行投影。

投影又有两种方式:平行投影和透视投影。

在平行投影中,远处的物体和近处的物体是一样大的,这种投影主要运用在计算机辅助设计(CAD)上,由于这种投影没有立体感,所以一般情况下使用透视投影。

在透视投影中,远处的物体会变得较小,因此在透视投影中,可视空间是一个平头截体(或台体)。

下图表明了投影变换的原理。

2.6 视见空间变换当3D空间中的图形经过投影成为2D图形之后,我们还要把图形缩放到窗口或屏幕上。

这个过程被称为视见空间变换。

对于一般的游戏来说,视见空间应该是整个屏幕或窗体。

但是视见空间也可以是它的子集。

2.7 光栅化当2D图形的所有变换都完成之后,就要把它们栅格化以显示在屏幕上,或保存为BMP图片。

栅格化其实是把变换得到的2D矢量图转化为位图的过程。

在opebgl流水线里头,有一个步骤是栅格化(Rasterization),它在顶点组合的几何信息处理后执行,目的是“插值”,vertex shader的varying变量就是在这里被栅格化(/插值),然后再传入fragment shader作象素级别的处理。

2.8 绘制在这一步中,将由Windows GDI把光栅化的图形显示在屏幕上。

转:OpenGL基本概念入门2——使用OpenGL绘图2009-05-02 22:551 绘制之前的必要工作1.1 设置窗体的视见区域 (View Port)glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width 和Height指定了视见区域的宽度和高度。

注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。

WindowsGDI下的窗体坐标OpenGL所定义的窗体坐标1.2 创建投影变换接下来,我们要设置一种投影变换。

投影变换分为平行投影和透视投影。

平行投影中,物体无论远近,大小都是一样的,而透视投影则相反。

因此,透视投影更像是我们眼睛所看到的景物。

但在某些特殊的时候,平行投影还是有它的作用的,比如3D建模程序。

1.2.1 创建平行投影glOrtho(left, right, bottom, top, zNear, zFar: GLdouble);可以将当前的可视空间设置为正投影空间。

其中,left指定了该平行投影最左边的平面;right指定了该平行投影最右边的平面;bottom指定了该平行投影最下边的平面;top指定了该平行投影最上边的平面;zNear,zFar指定了近修剪平面和远修剪平面。

我们使用下面的代码创建一个平行投影:glMatrixMode(GL_PROJECTION );//将矩阵变换对象切换为模型视图变换。

glOrtho(-ClientWidth div 2,ClientWidth div 2,-ClientHeight div 2,ClientHeight div 2,1,100);glMatrixMode(GL_MODELVIEW); );//将矩阵变换对象切换为模型视图变换。

在上面的代码中,你看到了一个陌生的函数:glMatrixMode。

它的作用是告诉OpenGL接下来我们将要设置投影变换矩阵。

1.2.2 创建透视投影透视投影对远处的物体根据距离进行缩短或压缩变换。

这使得远处的物体看起来小些,从而更加真实。

因为远处的景物更小,所以随着距离的增加,观察者应该能看到更多的景物。

因此,透视投影的可视区域应是一个被称为平截头体的几何形状。

如图3.1-6所示。

图3.1-6 透视投影和平行投影相似,只要把函数glOrtho的调用改为glFustum或者gluPerspective。

gluPerspective(fovy, aspect, zNear, zFar: GLdouble);其中,fovy为垂直方向上可见区域的角度(即上修剪平面和下修剪平面的二面角);aspect为高度与宽度的纵横比(即 Width/Height 的比值);zNear和zFar为近、远修剪平面。

由gluPerspective定义的平截头体我们用下面的代码定义透视投影:glMatrixMode(GL_PROJECTION);gluPerspective(60,ClientWidth/ClientHeight,1,zFar);glMatrixMode(GL_MODELVIEW);其中,zFar根据要绘制场景的大小设置不同的值。

1.3 设置背景颜色这一步是可选的。

我们可以调用glClearColor函数来设置用于清空屏幕和缓冲区的颜色。

glClearColor(R,G,B,A:GLFloat);其中,R,G,B,A分别表示颜色的R、G、B分值和透明度值。

取值范围均为0-1之间。

例如,下面的代码把背景色设置为黑色:glClearColor(0,0,0,1);1.4 绘制之前,清空屏幕和缓冲区一般地,我们把所有绘制函数的调用写在RenderScene过程中。

在每次绘制之前,我们都应该清空屏幕和缓冲区。

下面的代码用指定的清空颜色清空它们:void RenderScene{glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);...图形绘制...}2 使用OpenGL绘制基本图元一切复杂的东西都是由简单而基本的元素构成的。

在OpenGL中,组成复杂图形的基本元素被成为图元。

掌握了基本图元的绘制方法,就能绘制出任何复杂的物体。

GlBegin( GL 枚举模型)参数:GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES,GL_QUADS, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUAD_STRIP,GL_POLYGON在glBegin和glEnd之间可以使用的部分函数:glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord,glEvalPoint, glMaterial, and glEdgeFlagOpenGL为我们提供了以下几种图元:点线连续线封闭线三角形三角条形三角扇形四边形多边形2.1 绘制三角形在调用glVertex之前和之后,我们需要调用glBegin和glEnd这两个函数来标识图元的开始和结束。

在调用glBegin函数时,我们需要传入一个参数,以告诉OpenGL我们将绘制什么类型的图元。

传入GL_TRIANGLES表明我们将要绘制三角形。

例如:glBegin(GL_TRIANGLES);glVertex(1,0,1);glVertex(0,1,0);glVertex(1,1,0);glEnd;将绘制一个以点(1,0,1)、(0,1,0)、(1,1,0)为顶点的三角形。

2.2 绘制三角条形和绘制三角形相同,只要把glBegin的参数该为GL_TRIANGLE_STRIP即可。

相关文档
最新文档