OpenGL
LotusOne
这个作者很懒,什么都没留下…
展开
-
OpenGL系统设计-高级3D模型接口之MD2模型(3)
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2009-12-26 19:42:00 · 2611 阅读 · 0 评论 -
OpenGL系统设计-DirectInput(1)
首先我们使用DirectInput来改善我们的输入处理。由于本文的重点不在于DirectX,这里只对涉及到的DirectX部分作简单介绍,达到能够使用目的地,如果要详细了解DirectX的细节,可以参考相关的DirectX书籍。为了能够使DirectX融入我们的应用程序中,必须有DirectX SDK,可以在微软公司的网站下载,我们使用的是8.0的版本。为了能够使程序链接成功,还需要在工程原创 2009-12-09 19:59:00 · 1086 阅读 · 0 评论 -
OpenGL系统设计-全屏模式(2)
明白了显示模式的设置方法后,实现OpenGL的全屏模式就不难了。下面我们来看一个全屏的应用,由于全屏的程序框架有了较多的改变,我们将主要代码列出来加以说明。其中InitInstance是全屏实现的关键。 /* 创建OpenGL窗口* width - 窗口宽度* height - 窗口高度* bits原创 2009-12-01 20:42:00 · 4467 阅读 · 2 评论 -
OpenGL系统设计-全屏模式(1)
当你在运行一个程序时,总是希望可见的范围越大越好,不要有其他不需要的信息显示在屏幕上,这就涉及到了全屏。全屏总是一个激动人心的话题。在全屏状态下,我们可以对独占计算机系统资源,提高程序的运行效率。和窗口模式有区别的是,在设置全屏时还必须注意一些事项。首先,改变显示模式的函数是ChangeDisplaySettings,它是一个标准的Win32函数,其原型如下 LONG Change原创 2009-12-01 20:37:00 · 2682 阅读 · 0 评论 -
OpenGL 扩展 SDK
Copyright (C) 2006 Thomas Jansen (jansen@caesar.de) glext.hOglExt.hOglExtd.dllOglExtd.lib 下载地址 http://www.ziddu.com/download/7509700/OglextSDK.rar.html原创 2009-11-26 17:03:00 · 1149 阅读 · 0 评论 -
OpenGL SDK
OpenGL SDK for WindowsSDK包括.h文件, .lib文件OPENGL32.LIBGLAUX.LIBGLU32.LIBGLU.Hgl.hGLAUX.H 下载地址http://www.ziddu.com/download/7504848/OpenGLSDK.rar.html原创 2009-11-26 11:14:00 · 1726 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(5)
1.1 NURBS非均匀有理样条NURBS(Non-Uniform Rational B-Splines)是近年来发展迅速,应用广泛的一种表示曲线曲面造型技术。它能够精确地表示二次规则曲线曲面,从而能用统一的数学形式表示规则曲面与自由曲面,具有可影响曲线曲面形状的权因子,使形状更宜于控制和实现。1991年国际标准化组织颁布了关于工业产品数据交换的STEP国际标准,将NURB原创 2009-11-23 21:22:00 · 2082 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(6)
和曲线类似,曲面也可以通过控制点来模拟。实际上在很多场合也使用多边形来模拟平滑曲面,但使用控制点需要的计算机系统资源开销相对要少很多。同时,控制点个数越多,就越能够逼近真实的曲面,所以选择好的算法和适当的控制点个数相当重要。OpenGL实现曲面的方法和曲线类似,它使用二维的glMap2和glEvalCoord2来代替glMap1和glEvalCoord1。同样,glMap2是设置二维曲面原创 2009-11-19 22:34:00 · 1584 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(5)
相对于直线的生成,曲线的生成要难一些。对于参数曲线,通常是根据其切向量、法向量、弧长、曲率等使用插值、拟合来逼近曲线。当拟合后的若干小线段和曲线本身之间的误差很小以至于人眼看不出来时,我们就认为拟合的曲线就是我们需要的结果。对于非参数曲线,则通过控制点,应用不同的规则来拟合曲线,例如Hermit曲线,Bezier曲线等。OpenGL中定义曲线的函数是glMap1,其原型如下 vo原创 2009-11-19 22:30:00 · 1612 阅读 · 0 评论 -
OpenGL系统设计-DirectInput(2)
我们把对DirectInput进行初始化的过程放在DXInit函数中。 #include //DirectInput头文件LPDIRECTINPUT8 g_DI; //DirectInput对象指针LPDIRECTINPUTDEVICE8 g_KDIDev; //DirectInput设备对象指针 int DXIni原创 2009-12-09 20:02:00 · 1558 阅读 · 0 评论 -
OpenGL系统设计-DirectInput(3)
作为标准的输入设备,鼠标在应用程序中也不可或缺。进入Windows时代后,有些工作没有鼠标基本上就无法完成。在游戏中也可以看到不少人左手键盘,右手鼠标,共同冲锋陷阵。DirectInput对鼠标的支持和对键盘的支持相同,使用鼠标的过程也和使用键盘的过程一样。首先是初始化DirectInput,需要对DXInit进行修改。 #include LPDIRECTINPUT8原创 2009-12-09 20:06:00 · 965 阅读 · 0 评论 -
OpenGL系统设计-粒子系统(2)
接下来再看粒子的创建 GLvoid CParticle:: Create(CParticleSystem* parent, float TimeCounter){ VECTOR3D TempVelocity; float RandomYaw; //随机的增长 float RandomPitch; flo原创 2009-12-09 19:43:00 · 1515 阅读 · 0 评论 -
OpenGL系统设计-高级3D模型接口之MD2模型(2)
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font D原创 2009-12-26 19:38:00 · 2259 阅读 · 0 评论 -
OpenGL系统设计-高级3D模型接口之MD2模型(1)
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2009-12-26 19:36:00 · 2041 阅读 · 0 评论 -
OpenGL系统设计-融合DirectXAudio(2)
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2009-12-26 19:26:00 · 1011 阅读 · 0 评论 -
OpenGL系统设计-融合DirectXAudio
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2009-12-26 19:20:00 · 1200 阅读 · 0 评论 -
OpenGL系统设计-高级3D模型接口之OBJ模型(1)
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font原创 2009-12-26 19:28:00 · 2584 阅读 · 0 评论 -
OpenGL系统设计-粒子系统(4)
int glInit(GLvoid){ //创建粒子系统使用的纹理 ParticleTexture[0] = CreateTexture("particle.bmp"); if(!ParticleTexture[0]) //创建失败则返回 { return FALSE; } glShadeModel(GL原创 2009-12-09 19:48:00 · 1503 阅读 · 0 评论 -
OpenGL系统设计-和DirectX融合
作为最大的两个3D图形API,OpenGL和DirectX一直没有停止过竞争。微软退出OpenGLARB,全力发展自己的DirectX就是一个明证。这种竞争也导致了技术的发展,至少对开发人员来说是一件好事。DirectX本身并不完全是一个3D API,Direct3D才是。DirectX应该说是一个应用的完整解决方案,它包括DirectDraw、Direct3D、DirectSound、Dir原创 2009-12-09 19:51:00 · 1277 阅读 · 0 评论 -
OpenGL系统设计-粒子系统(3)
上面我们完成了一个粒子类的创建,从粒子类中可以看到,每一个粒子是处在一个粒子系统中的,所有粒子的行为都受到粒子系统的影响。下面再来看粒子系统类的构造。 //粒子系统类的定义class CParticleSystem{private: bool mAttracting; // 粒子系统是否对粒子产生引力 bool mStopped;原创 2009-12-09 19:46:00 · 1401 阅读 · 0 评论 -
OpenGL系统设计-反走样
计算机是使用像素来表示图形的,这样,实际上是以光栅化后的离散量来代替连续量,从而会引起失真。这种现象叫走样(aliasing)。不同的应用,使用不同的算法走样的程度也不一样。走样通常出现的有阶梯状边界、图形细节失真、狭小图形遗失等。图9-3到9-5给出了几类走样的说明。 用于减少和消除各种走样现象的方法就是反走样。通常反走样的方法有提高分辨率法、非加权区域采样法、加权区域采样法原创 2009-11-13 20:28:00 · 1523 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(3)
除了直线的宽度可以根据需要进行改变外,直线的线型也可以改变。glLineStipple就可以提供不同于常规的连续线段的中心线、虚线、点划线等等。其函数原型如下 void glLineStipple( GLint factor, GLushort pattern);其中factor 是比例因子,它表示在线型模式中,每一位的放大倍数。例如,factor为3,那么线型模原创 2009-11-15 22:35:00 · 2260 阅读 · 0 评论 -
OpenGL系统设计-位图 字体(1)
位图 字体OpenGL不仅是一个完整的3D渲染接口,同时也是一个非常高效的图像处理引擎。本章主要讨论OpenGL处理彩色像素和单位图的功能。OpenGL并不会直接渲染图像,因为图像通常都是以特定的格式存储在文件里面,OpenGL不知道这些图像文件的格式,因此它只知道怎样渲染像素矩形,却不会对图像文件进行解码。如果前面所讲,使用TGA、BMP、JPG文件都需要自己写解码代码。将像素数据原创 2009-10-31 19:09:00 · 1456 阅读 · 0 评论 -
OpenGL系统设计-光照与材质(4)
材质在现实世界中,物体本身也具有它自己的颜色,不过物体的颜色和光源的颜色不同。物体的颜色是通过其对光的反射来表征的,物体对光的反射和透射(透明物体)决定了物体所呈现的颜色。例如,红色的玻璃只是玻璃对红色反射的量多一些,对绿色和蓝色反射的少一些。事实上,我们看到的红色的玻璃,严格来说,并不是该玻璃的颜色是红色的,而应该说该玻璃是由反射红色光的材质作成的。 材质的颜色也分为环境原创 2009-10-30 19:42:00 · 1580 阅读 · 0 评论 -
OpenGL系统设计-显示列表(2)
1.1 管理显示列表上面我们直接使用了CUBELIST这个事先定义好的整数来作为显示列表的名字,这种做法在显示列表数目不多时还可以适用。一旦显示列表的数目增多,使用这种方法来管理显示列表就会带来两个问题,一是定义的管理比较麻烦,容易出错;二是一旦创建显示列表使用的名字不小心重复了已经使用的显示列表,则先创建的显示列表就随之失效了。因此,在创建显示列表时,我们有必要采用更加安原创 2009-10-29 22:07:00 · 3207 阅读 · 0 评论 -
OpenGL系统设计-纹理贴图(2)
1.1 位图纹理 纹理可以映射到平面上,也可以映射到曲面上,并且还可以多层映射。多层映射使用的是多重纹理。 使用纹理映射时,首先要定义一个纹理,然后控制纹理的滤波,说明映射的方式,在绘制顶点时同时给出其纹理坐标即可。 理论上来说,只要是图形文件都可以作为纹理贴图,不过最常用的还是BMP、JPEG、TGA文件。BMP文件处理方便,JPEG原创 2009-10-29 22:06:00 · 2284 阅读 · 0 评论 -
OpenGL系统设计-显示列表(1)
在前面的章节中,OpenGL命令一旦给出就立即执行,这种方式称为即时模式(immediate mode),当存在大量的运算特别是矩阵运算时,应用程序的性能会受到一定程度的影响。为了解决这个问题,提高程序的运行效率,也为了方面使用,OpenGL提供了显示列表。显示列表是为了方便使用和提高效率的目的而组成的一组OpenGL命令,这些命令先以显示列表的方式保存起来,在以后需要的时候一次调原创 2009-10-29 21:57:00 · 1993 阅读 · 2 评论 -
OpenGL系统设计-纹理贴图(1)
利用前一章的方法创建的三维物体,仅仅从颜色和建模方面去考虑的话,和实际的物体相差还是很大。因为现实世界中的物体并不是完全平滑的,在物体的表面有各种各样的图案,例如墙面的砖块、地面的木板纹路、衣服上的绣花、粗糙的桔子皮等等。这些效果是无法使用建模方法创造出来的。 将图案映射到物体的表面,显示出真实物体的模样,这种方法叫做纹理映射(Texture Mapping),也称作纹理贴图原创 2009-10-27 20:49:00 · 2498 阅读 · 0 评论 -
OpenGL系统设计-纹理贴图(4)
1.1 JPEG纹理 大型的应用程序特别是游戏程序使用的贴图非常多,如Quake III使用的JPEG和TGA文件就有将近2000个,其中JPEG文件超过一半,占用近30MB。如果都使用BMP格式的话,因为没有压缩,占用的空间将大大增加,至少达到180MB。因此,JPEG文件作为贴图也是大型程序的选择。因为JPEG文件是压缩的,使用JPEG文件,必须先进行解码。因为JP原创 2009-10-27 21:37:00 · 2725 阅读 · 0 评论 -
OpenGL系统设计-位图 字体(4) 读写像素
1.1 读写像素OpenGL的图像(Image)操作实际上是对屏幕像素的直接处理,包括读取、写入、复制和缩放等。对像素的读取函数为glReadPixels,其原型如下: void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,原创 2009-11-05 20:57:00 · 2563 阅读 · 0 评论 -
OpenGL系统设计-显示列表(3)
嵌套显示列表为了支持更加复杂的绘图,显示列表还支持嵌套,即在glNewList()和glEndList()创建显示列表的过程中使用glCallList()或glCallLists()调用已经定义过的显示列表。生成列表的嵌套层数从理论上来说可以支持2^31-2级,但是实际上有两个原因无法支持这么多,一是当嵌套层数增加较多时,仅仅创建显示列表就需要耗费大量的资源和时间;二是即便可以创建多级原创 2009-10-30 19:24:00 · 2018 阅读 · 0 评论 -
OpenGL系统设计-光照与材质(1)
光照与材质 光照是计算机图形学的重要组成部分,没有光照,任何物体看起来就象是塑料作成的,还是缺少真实感。在大自然中,光也是最重要的组成要素之一。籍于光,我们才能认识世界。能够产生光的物体称为光源。对人类来说,太阳就是最大、最重要的光源,其他小如燃烧的蜡烛,发光的二极管也是光源。有光就有阴影,在光照不到的地方就形成了阴影。当光照在物体上时,不论是什么物体,都会反射光,但是反射光原创 2009-10-30 19:36:00 · 1343 阅读 · 0 评论 -
OpenGL系统设计-光照与材质(2)
1.1 光照光照法向量(Light Normals)告诉OpenGL顶点的周围是怎样的反射光线。可以想像在顶点有一个很小的镜子,而光照法向量就表示镜子的方向,对于不同的法向量,反射出来的光的方向也不相同。glNormal用来设置当前的法向量,当设置的新的法向量后,所有顶点的光照颜色将重新计算。光照法向量应该归一化以校正光照效果,使用glScale函数不仅可以对顶点坐标,原创 2009-10-30 19:38:00 · 2200 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(2)
1.1 线段(Line)设置线段的宽度和模式的函数分别是glLineWidth和glLineStipple,glLineWidth的原型如下 void glLineWidth( GLfloat width);width参数表示光栅化的线段的宽度,缺省值为1.0。glLineWidth函数指定的光栅化的线的宽度对走样线和反走样线均适用。和点的效果类似,使原创 2009-11-15 22:32:00 · 2660 阅读 · 0 评论 -
OpenGL系统设计-雾与混合 (1)
雾也是大自然中最常见的现象之一,有了雾的效果,场景看起来会更加真实。在OpenGL中,很容易实现雾的效果。在OpenGL中,雾的工作模式有两种:线性模式和指数模式。这两种模式是根据雾的浓度变化来区分的。在线性模式下,只需要提供一个距离视点的开始位置和结束位置。从开始位置到结束位置之间,雾的浓度越来越高,浓度的变化和距离成正比。在指数模式下,雾的浓度随着距离的增加呈指数增长。这种模原创 2009-11-13 20:19:00 · 3363 阅读 · 0 评论 -
OpenGL系统设计-扩展建模(1)
使用OpenGL提供的标准几何图元对于多数的简单应用已经足够,但是遇到稍微复杂的应用就很吃力。例如,绘制虚线和点划线这样的图形就很难实现。不过OpenGL也提供了另外的方法,使得我们可以对点、线、面进行自定义,创造自己需要的几何图形。 1.1 点(Point)对点的自定义函数是glPointSize,其原型为 void glPointSize(原创 2009-11-13 20:32:00 · 1164 阅读 · 0 评论 -
OpenGL系统设计-雾与混合(2)
在高级三维建模中都少不了Alpha,它作为RGBA颜色模型中的一个分量,表征了物体的透明度。和RGB取值范围一样,Alpha取值从0.0到1.0。 0.0表示完全透明,1.0表示完全不透明。鉴于Alpha的性质,它可以用于模拟玻璃、水。也可以混合合成图像,对几何图元进行反走样处理。混合是OpenGL提供的基于像素级的颜色操作,它只支持RGBA颜色模式。在颜色索引表模式下,混合是无效的原创 2009-11-13 20:24:00 · 1609 阅读 · 0 评论 -
OpenGL系统设计-位图 字体(3) 汉字显示
汉字显示对于汉字的字符作为位图显示时,如果采用上面的办法就会很麻烦,你必须把一个16X16点阵汉字的32个字节的点阵数据描述出来,如果有多个汉字或者汉字的点阵数目更多,如36X36等,工作量就会增加很多,并且手工处理点阵数据又容易出错。因此,为了解决汉字点阵字符问题,我们可以借助于点阵汉字库来解决这个问题。通常汉字的存储是以机器内码的方式进行的,每个汉字占用两个字节,这两个字节都大于12原创 2009-10-31 19:14:00 · 2201 阅读 · 0 评论 -
OpenGL系统设计-位图 字体(2)
光栅位置设置当前光栅位置的命令是glRasterPos,其原型为: void glRasterPos{[2][3][4]}{[d][f][i][s]}[v](TYPE x,TYPE y,TYPE z,TYPE w); 其中234表示光栅位置的坐标值个数,也决定了后面的参数个数。dfis表示参数取值类型,如果带v则表示参数是一个向量。例如设置一个光栅位置的三维坐标可以使用g原创 2009-10-31 19:11:00 · 2960 阅读 · 0 评论 -
OpenGL系统设计-光照与材质(5)
下面我们来创建几种材质,全部的定义放在materials.h文件中。 /////////////////////////////////////////////////////////////// File: Materials.h// Author: LotusOne// Date: 03/10/2003// Usage: Defi原创 2009-10-30 19:43:00 · 1524 阅读 · 0 评论