OpenGL 需要用到的数学知识:
世界坐标系: 有三维 x,y,z 轴,是 右手坐标系。
向量:在一个坐标系中,两个点位置之间的差,可认为是一个有向线段。
对于OpenGL刚入门的朋友,推荐大家看一下以下这些知识:Programming Guide (红宝书). PDF and HTML, 橙宝书 ("OpenGL Shading Language"), 以及 NeHe's OpenGL教程。
在windows开发openGL可以使用vc,也可以用devc++,后者是免费软件。
安装成功以后,创建一个新工程,工程里面就有一个openGL工程,创建好openGL工程以后,自带了一个openGL的例子。
打开压缩包,看到的是一组exe可执行文件和它们的c源文件,双击exe文件发现并不能正常运行,报告缺少某些dll文件,我们需要 通过源文件来重新编译exe文件。
打开一个源文件,把内容copy到我们工程里面的main.cpp里面,然后编译运行,IDE报link错误,难点在这里了。
工具-->检查更新-->select dev pack server,选择devpaks.org Community Devpaks
点击最下方的Check for updates 按钮,等待加载完成后在groups里面选择openGL,会出现多个插件供你选择安装,因为我们的源代码里面用到了glut,所以我们需要安装这个pakage,我们需要选择openglut就行安装,而不是选择glut,这个依然会在link的时候报错。
安装完成后,工程--》工程属性--》参数,加入库或者对象,选择以后库文件:
Lib/libopenglut.a
Lib/libglu32.a
ps: 如果使用了aux library,一定要把Lib/libaux.a 放在Lib/libopengl32.a 之前。
1. openGL 是对图形硬件的一组接口,这些接口包含了120个命令。
2. openGL 有客户端和服务端的概念,openGL可以工作在网络环境中,运行程序和发射openGL命令的计算机称作客户端,接受命令并显示图形的计算机称为服务器端,如果只有一台机器,则这台机器既是客户端又是服务器端。
3.openGL被设计为硬件无关,所以它并没有提供跟窗口和用户输入相关的接口。
4. 把图形对象的数学描述和颜色信息转化成屏幕上的像素的过程,称为光栅化。
5. 两个图形有遮挡的情况下,为了提高性能,被遮挡的部分不被画出来。
6. bitplane存储了屏幕像素的颜色信息,或者说某个像素到底有多红。
7. openGL命令习惯于使用后缀表示参数的数量和类型,比如:glColor3f()
表示这个方法有三个参数,而且类型是单精度浮点型;几乎每个命令都有vector版本,即参数是一个vector(数组,序列)。
8. openGL 是个状态机,你对openGL的一次配置都会影响到接下来的绘图工作,比如你设置了颜色,如果在接下来 不显示改变绘图颜色,那么所有图形将使用你之前设置的颜色进行绘图。
9. 有一些库封装了openGL的基本函数,使openGL的使用更方便,如GLU,这个库是跟openGL的实现一起发行的; GLX,这个库是专门用于x windows 系统的;Open Inventor 是一个openGL的面向对象工具箱。
10. 图形编程中,双缓冲技术是常用的一种图形绘图技术,先将图形绘制在内存中,完成以后再投影在到屏幕上,这样不会 因为频繁的屏幕刷新操作引起屏幕闪烁。
11. 要做到动画的产生,需要至少每秒钟在屏幕上顺序显示24帧的图片,在呈现每一张的图片的过程中,我们不要把画的过程呈献给用户,当图片画好以后再投影到屏幕上,而第一张再投影的时候,后台应该在绘制第二张需要投影的图片,这就是双缓冲技术的一个使用。
12. 假如一个机器支持的最高刷新率是60帧每秒,如果你可以在1/60之内把图片绘制完成,那么我们就可以得到最高的刷新率,即每秒60帧,这样的图像看起来也是最流畅的;但是如果我们的图片非常复杂,绘制一张图片需要1/45秒,而且在绘制完成之前是不能投影到屏幕上的,防止用户看到不完整的图片,那我们在只能在两个1/60内显示同一张图片,屏幕的实际帧数就降到了每秒30帧,假如随着程序的执行过程中我们需要绘制越来越复杂的图片,那么每秒显示的帧数可能继续降低,越来越不流畅,甚至画面卡住。
13. 因为画每一张图片的时间是随机的,有可能低于一次刷新也有可能高于一次刷新,所以动画看起来就可能时快时慢,这种情况下最好设置一个更长的刷新周期,让动画播放的慢点。
1. 不管多么复杂的图片都是由最基本的图形组成的,这些基本图形有点、线、二维多边形等。
2. openGL画图过程:清空屏幕、绘制基本几何图形、绘制光栅对象。
3. openGL 默认的是即画即显得模式,当你向发出一个openGL命令时,显示会更新,作为增强,可以维护一个openGL的命令队列。
4. 画图之前一般要先清空屏幕到指定的背景,比如要画word文件清空到白色,要绘制星空的清空到黑色,但是有时候也不需要清空,比如换了一个场景,从室外转到了室内。
5. 很多系统都有很多缓冲作为颜色缓存,这些缓存都需要被实时的更新,最好有一个这样的例程做这些工作。
6. RGBA 颜色: RED , GREEN, BLUE, ALPHA. 范围都是【0,1】闭区间,alpha = 0 完全透明, alpha = 1 完全不透明。
7. 完全的红,绿,蓝混合成白色,一点都没有的混合成黑色,红和绿混合成黄色,红和蓝混合成品红,绿和蓝混合成蓝绿。三个各一半是灰色(介于黑色和白色之间)。
8. 一般情况下,client端会把openGL命令装进一个network package,等这个package满了以后,就可以把它发给server端,然而如果package一直不满,就有可能一直等待下去。这时我们可以使用glFlush(),它命令将不满的package发送出去。
还有一个函数glFinish()执行和glFlush()一样的事情以后,等待server端将图形绘制完毕的消息,这个方法可以用在需要绘制有先后顺序,或者事件需要同步的场合。
9. 如何处理图形建的遮挡,为每个像素设置深度信息,这里使用一个深度缓冲表,当新图形的深度比旧图形的深度浅时,就把那个像素设置成新的,反之抛弃,由于像素被抛弃而不是用来 绘制,可以提高性能。
10. openGL 中的点、线、多边形 和数学中的概念有点不一样,而且知道它们的区别很重要,openGL中的点是有三维的,不过z轴通常被置为0,数学中的点是无穷的小的,在openGL中明显不是,他起码占一个像素,还有可能占更多;数学中的线是无穷细而且在两端无穷眼神的,openGL中指的是有宽度的线段;openGL中的多边形是凸多边形,而且不能有洞,凹多边形可以由凸多边形构成。
11. OpenGL中所有的几何图形都是由顶点组成的。可以使用glVertex*()来指定一个顶点。这个方法的调用应该在glBegin()和glEnd()之间。
12. 在绘制几何图形的时候,告诉openGL你要画什么,然后指定几个顶点, 绘制语句是要区分顺序的,顺序变了,画出的图形可能也就不一样了。
#define PI 3.1415926535897;
GLint circle_points = 100;
glBegin(GL_LINE_LOOP);
for (i = 0; i < circle_points; i++) {
angle = 2*PI*i/circle_points;
glVertex2f(cos(angle), sin(angle));
}
glEnd();
13. 默认的情况下,点占一个像素,线有一个像素宽,多边形是被填充的。但opengGL提供了定制接口 。
Point Details
你可以使用glPointSize(size)用像素数来指定点的宽度,这里有一个抗锯齿的概念:
如果抗锯齿功能没有开,启,
当一个点的像素数量不是一个整数的时候,系统会自动把这个数量约等于为整数,然后画出一个正方形区域,
这样我们看起来的图像是不平滑的;
如果开启了抗锯齿的功能,会画出一个圆形的区域,而且这个区域的边缘像素的亮度不是满的,这样可以让图像看起来更平滑,
在这个模式下,非整数宽度是不会被截取为整数的。
不抗锯齿的点的宽度的上限是抗锯齿宽度上限约为整数的值,可以用glGetFloatv(GL_LINE_WIDTH_RANGE)得到抗锯齿点的宽度的上限。
Line Details
线的宽度和点的宽度的概念是相同的,同样要区分抗不抗锯齿,这里需要注意的是线的宽度默认是1个像素宽,在低分率的屏幕上,线的宽度可能比较明显,而高分辨率的屏幕上,一个像素的宽度有可能让你根本看不见那条线,而要实现分辨率无关的线宽,需要把像素的物理宽度计算进来。
分享到:
相关推荐
opengl 基础入门手册(比较老)
本入门教程详细介绍了使用OpenGL ES进行iOS开发的基础知识,包括了OpenGL ES的数据类型和基本图形学概念。 1. OpenGL ES的数据类型 OpenGL ES为了确保在不同的平台和编程语言中保持一致的数据类型定义,因此定义了...
在本文中,我们将探讨OpenGL的基础知识,并通过一个简单的入门实例来介绍如何在Windows环境下使用OpenGL进行编程。 首先,OpenGL之所以成为主流图形API之一,是因为它具有几个显著的特点。一是它与C语言紧密集成,...
关于GLStudio OpenGL基础入门教程,临时定于于2D图形布局。每个课程补充详细注释,新手请按顺序阅读。每课注释于上一课补充的知识,都会有注释说明,并且将上一章的注释删除。博客教程基础知识章节完成情况√√√√...
### OpenGL入门教程知识点详解 #### 一、OpenGL简介与优势 **OpenGL** 是一种跨语言、跨平台的应用程序编程接口(API),主要用于渲染2D、3D矢量图形。它是图形学领域的一个重要标准,被广泛应用于游戏开发、虚拟...
3. **高性能的图形渲染**:作为工业标准,OpenGL得到了众多显卡制造商的支持,不断优化的性能使其在图形处理领域保持领先地位,是许多专业游戏如《DOOM3》、《QUAKE4》的图形渲染基础。 #### 二、OpenGL入门准备 #...
OpenGL_ES基础入门 OpenGL_ES基础入门
本资源“OpenGL极速入门宝典”旨在为初学者提供一个快速掌握OpenGL基础知识的途径,帮助他们步入图形编程的世界。 OpenGL是一个跨语言、跨平台的编程接口,它的主要任务是管理图形硬件,如显卡,以便高效地绘制复杂...
根据提供的文件内容,以下是从【标题】、【描述】、【标签】及【部分内容】中提炼的OpenGL入门知识点: ...教程具有清晰的目的性,适合初学者,有助于他们在掌握OpenGL基础知识后深入学习更高级的图形编程技术。
### OpenGL编程入门知识点详解 #### 一、概述 **OpenGL** 是一个强大的图形库,用于开发具有多种特殊视觉效果(如光照、纹理、透明、阴影)的三维图形。它的前身是 SGI 公司为图形工作站设计的 **IRIS GL** ...
OpenGL编程入门学习主要涵盖以下几个方面的知识点: 1. **OpenGL简介**:OpenGL是一个开放源代码的图形库,作为主流的图形应用程序接口(API)之一,它提供了丰富的图形渲染功能。OpenGL的特点包括与C语言紧密集成...
本文将围绕"opengles入门资料"展开,深入讲解OpenGLES的基础概念、关键知识点以及在Android和iOS平台上的应用。 1. **基础概念** - **顶点**: 3D图形的基本构建单元,定义了形状的位置。 - **渲染管线**: OpenGL ...
OpenGL开发入门是一个重要的主题,尤其对于想要进入3D软件和游戏开发领域的初学者而言。OpenGL是一个功能强大且高度可移植的图形库,被广泛应用于多种操作系统和设备,包括Windows、Unix/Linux以及专业设备。它的...
OpenGL2D,基础入门篇,包括点,线,面,得绘制,和变形
在VC++环境中使用OpenGL进行编程,需要了解一些基础知识和步骤。以下是一个简单的入门指南,帮助你开始在VC++中使用OpenGL。 首先,你需要创建一个新的MFC应用程序项目。在Visual Studio中,选择`File` > `New` > `...