SweetDream
高歌一壶新酿酒,醉抱青山不必归。

随笔分类 -  3D

NeHe_Lesson 23 sphere map (球面图)
摘要:要实现环境映射,只需要创建一个合适的环境纹理图,然后让OpenGL生成纹理坐标。 创建纹理可以用一些处理图像的工具得到,基本上这个纹理就是一个能反射外界环境的一个球体的反射表面。创建了环境纹理图后,需要启用OpenGL的环境映射算法,对于要渲染的物体上的点,在环境图中找到一个这样的纹素:它对应的球面点的切面与该物体点的切面相同,并将该物体点的颜色绘制为该纹素的颜色。 要自动生... 阅读全文
posted @ 2006-04-27 20:06 SweetDream 阅读(896) 评论(0) 推荐(0)
z-buffering 和 w-buffering
摘要:z-buffering 和 w-buffering都表示深度值。几乎所有的3-D加速卡都支持z-buffering,这样就使得z-buffers成为现在最常用的深度缓冲类型。但是,z-buffers也有它本身的缺陷。由于它所使用的数学方法,使得一个z-buffer中产生的z值在它允许的范围内[0.0,1.0]并不是均匀分布的。特别是靠近剪切面与远离剪切面处的比例,更是影响了z值的均匀分布。如果远平... 阅读全文
posted @ 2006-04-26 22:00 SweetDream 阅读(826) 评论(0) 推荐(0)
NeHe_Lesson 20 masking 区域掩盖
摘要:masking就是一种特殊的Blending。它的效果如图: 注意,你可以通过雪花看见它后面的背景。 这节主要就是混合因子的使用,理解了混合公式这节就很容易理解了。 混合公式如下: (RsSr + RdDr ,GsSg + GdDg ,BsSb + Bd + Db ,AsSa + AdDa) 其中(Sr ,Sg ,Sb ,Sa)为源混合因子,即后添加的片元的颜色值在混合中所占的比重。(Dr... 阅读全文
posted @ 2006-03-06 11:49 SweetDream 阅读(403) 评论(0) 推荐(0)
粒子系统概述
摘要:开始以为粒子系统也和Fog一样有现成的函数,只要改变一下状态,设置一下就可以达到想要的效果,在看过NEHE的粒子系统和网络上的一些介绍后才知道,粒子系统是一步一步通过很基本的操作构造的。 粒子系统主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质在计算机上的生成与显示的问题。 每个粒子需要一些属性来和其他粒子区别。通常在一个系统中的所有粒子有一个相同的属性集。 有一些适用于粒子的... 阅读全文
posted @ 2006-03-02 11:02 SweetDream 阅读(4079) 评论(0) 推荐(0)
NeHe_Lesson 16 雾 fog
摘要:雾效开启后离视点较远的物体将融入到雾的颜色中。通过使用雾可以提高性能,因为我们无需绘制那些由于雾的影响而看不见的物体。 OpenGL中开启雾很容易,它只是一条语句: glEnable(GL_FOG);//开启雾效果 然而开启雾效后得到的默认的效果可能不是我们想要的,我们可以通过调用 void glFog*( GLenum pname, GLfloat param );来设置雾效达到我们预期的效果... 阅读全文
posted @ 2006-02-25 10:53 SweetDream 阅读(523) 评论(0) 推荐(0)
NeHe_Lesson 12 显示列表 (Display Lists)
摘要:显示列表是一组OpenGL函数调用,被存储起来供以后执行(有点类似 SQL 中的存储过程),调用显示列表时,将按顺序执行其中的函数。 显示列表的使用目的 1.如果要绘制一个几何体多次,或者需要对一组状态作相同的变更。注意每次执行一个显示列表之前必须相应得设置模型视点举证,以计算物体的正确大小和位置。 2.C/S 模式下的应用程序,显示列表是服务器状态的一部分,它们驻留在服务器中,因此通过... 阅读全文
posted @ 2006-02-24 10:25 SweetDream 阅读(283) 评论(0) 推荐(0)
NeHe_Lesson 11 飘动的旗子
摘要:1. 多边形的填充方式。 多边形有两个面:正面和被面,默认的情况下,正面和背面都是以填充的方式绘制多边形,但通过 void glPolygonMode(GLenum face,GLenum mode) 可以改变绘制方式。其中参数 face的取值为GL_FRONT_AND_BACK,GL_FRONT,GL_BACK;参数mode取值为GL_POINT,GL_LINE,GL_FILL。 2. 角度与... 阅读全文
posted @ 2006-02-23 10:50 SweetDream 阅读(450) 评论(0) 推荐(0)
NeHe_Lesson 10 基于文本文件的场景构造和漫游
摘要:当您想要使用一系列的数字来完美的表达3D环境时,随着环境复杂度的上升,这个工作的难度也会随之上升。出于这个原因,我们必须将数据归类,使其具有更多的可操作性风格。在程序清单头部出现了sector(区段)的定义。每个3D世界基本上可以看作是sector(区段)的集合。一个sector(区段)可以是一个房间、一个立方体、或者任意一个闭合的区间。 1.自定义数据结构 typedef struct... 阅读全文
posted @ 2006-02-22 18:05 SweetDream 阅读(381) 评论(0) 推荐(0)
NeHe_Lesson 9 视点变换和模型变换
摘要:在 OpenGL 中视点(Viewing)和模型(Modeling)变换是互相关联的。想一想,在用相机拍摄物体时,我们可以保持物体的位置不动,而将相机移离物体,这就相当于视点变换;另外,我们也可以保持相机的固定位置,将物体移离相机,这就相当于模型转换。这样,在OpenGL中,以逆时针旋转物体就相当于以顺时针旋转相机。因此,我们必须把视点转换和模型转换结合在一起考虑,而对这两种转换单独进行考... 阅读全文
posted @ 2006-02-22 10:52 SweetDream 阅读(1078) 评论(0) 推荐(0)
NeHe_Lesson8 Blending
摘要:以前我们使用glColor3f来指定一个顶点颜色,它代表使用GL_RGB 也就是3个颜色分量。现在你可以使用GL_RGBA 来增加一个Alpha值了。我们可以用glColor4f() 函数代替glColor3f() 函数。 Alpha值可以理解为材质(material) 的不透明程度, 0.0代表材质完全透明, 1.0代表材质完全不透明。 混合公式:(Rs As + Rd (1 - As), Gs... 阅读全文
posted @ 2006-02-13 20:52 SweetDream 阅读(309) 评论(0) 推荐(0)
NeHe_Lesson7 纹理过滤,灯光
摘要:纹理过滤有三种方式: 1. GL_NEAREST过滤 (与linear 过滤方式相比速度较快效果较差) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 2. ... 阅读全文
posted @ 2006-02-13 01:09 SweetDream 阅读(460) 评论(0) 推荐(0)
NeHe_Lesson6 纹理贴图
摘要:SETP1:读入位图文件 //读入位图文件AUX_RGBImageRec *LoadBMP(char *Filename) { FILE *File=NULL; if (!Filename) { return NULL; ... 阅读全文
posted @ 2006-02-10 20:18 SweetDream 阅读(429) 评论(0) 推荐(0)
NeHe_Lesson4 视图变换矩阵的设置(旋转)
摘要:glRotatef(Angle,Xvector,Yvector,Zvector) 用于绕轴旋转物体, 这是一条十分有用的函数。 Angle 是一个用于指定旋转角度的数字(通常存储于变量中)。 Xvector, Yvector 和 Zvector 这三个参数用于描述一条向量, 以规定物体的旋转轴。 glLoadIdentity(); 这个函数可以重置Modeview矩阵,即当前场景矩阵,... 阅读全文
posted @ 2006-02-10 02:15 SweetDream 阅读(577) 评论(0) 推荐(0)
NeHe_Lesson3 设置顶点颜色
摘要:设置一个顶点的颜色我们可以通过调用glColor3f函数,传入的参数为指定的颜色,这样以后绘制顶点都将使用这种颜色,除非重新设置颜色。比如我们要绘制一个三个角分别为红,绿,蓝的三角型,我们可以使用以下代码: glBegin(GL_TRIANGLES); // Drawing Using Triangles glColor3f(1.0f,0.0f,0.... 阅读全文
posted @ 2006-02-10 01:17 SweetDream 阅读(262) 评论(0) 推荐(0)
NeHe_Lesson2 平移,绘制图元
摘要:平移函数:glTranslatef(-1.5f,0.0f,-6.0f); 平移当前位置。 重置函数:glLoadIdentity(); 把当前位置置于屏幕中心(0.0f,0.0f,0.0f) OPENGL中画一个三角形的方法如下: glBegin(GL_TRIANGLES); // Drawing Using Triangles glVert... 阅读全文
posted @ 2006-02-08 14:13 SweetDream 阅读(357) 评论(0) 推荐(0)
DirectX 9 学习笔记<一>
摘要:1.创建和使用顶点/索引缓冲的步骤如下: ·创建缓冲 顶点:Direct3DDevice9::CreateVertexBuffer 索引:Direct3DDevice9::CreateVertexBuffer && Direct3DDevice9::CreateIndexBuffer · 锁定缓冲,写入数据再解锁。/**如果不Lock/Unlock 就直接使用会造成使用未定义指针;之所以这样... 阅读全文
posted @ 2006-02-04 11:19 SweetDream 阅读(3239) 评论(1) 推荐(0)