
OpenGL
文章平均质量分 75
wongstar
这个作者很懒,什么都没留下…
展开
-
OpenGL中的glLoadIdentity、glTranslatef、glRotatef原理
关于这几个函数的文章比比皆是,这是OpenGL的入门函数,但我想我讲的将不同于目前网上的文章。OpenGL中的坐标用齐次坐标表示,即(x,y,z)表示成(x',y',z',h),其中x=x'/h; y=y'/h; z=z'/h. 通常h取1. 比如空间中的点(2,3,4),在OpenGL中将表示成(2,3,4,1). 齐次坐标表示方式适合于矩阵运算,也很方便地表示了无穷远的点,比如(1,0,0,0)就表示x轴上无穷远的点,因为1/0是无穷大,这里约定0/0=0.接着要说点矩阵(线性代数)的知识。OpenGL转载 2011-03-25 14:51:00 · 1343 阅读 · 0 评论 -
OpenGL基本概念入门4——颜色、光照和材质2
3 设置光源3.1 光源的种类环境光 环境光是一种无处不在的光。环境光源放出的光线被认为来自任何方向。因此,当你仅为场景指定环境光时,所有的物体无论法向量如何,都将表现为同样的明暗程度。点光源 由这种光源放出的光线来自同一点,且方向辐射自四面八方,如图5.3-1所示。平行光 平行光又称镜面光,这种光线是互相平行的。从手电筒、太阳等物体射出的光线都属于平行光。聚光灯 这种光源的光线从一个锥体中射出,在被照射的物体上产生聚光的效果。使用这种光源需要指定光的射出方向以及锥体的顶角α。3转载 2011-04-08 14:50:00 · 2829 阅读 · 0 评论 -
OpenGL基本概念入门3——矩阵变换
<br /><br />1 平移<br />glTranslatef(x,y,z); 其中,x,y,z分别表示在X、Y、Z轴上平移的量<br />2 旋转<br />与平移类似,OpenGL也为我们提供了一个高级函数用于旋转物体:<br />glRotatef(Angle,x,y,z);<br />这个函数将生成并应用一个将坐标系以向量(x,y,z)为轴,旋转angle个角度的矩阵。<br />3 缩放<br />缩放变换其实是将坐标系的x、y、z轴按不同的缩放因子展宽,从而实现缩放效果。函数<br转载 2011-04-08 14:06:00 · 2186 阅读 · 0 评论 -
OpenGL基本概念入门5——纹理贴图1
<br /><br /> <br /> 1. 创建纹理图像<br /> <br />OpenGL要求纹理的高度和宽度都必须是2的n次方大小,只有满足这个条件,这个纹理图片才是有效的。 一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenGL生成一个纹理贴图:<br /> glGenTextures(1,@Texture);<br /> glBindTexture(GL_TEXTURE_2D,Texture);<br /> glTexImage2D(GL_TEXTURE转载 2011-04-08 15:18:00 · 3998 阅读 · 0 评论 -
OpenGL基本概念入门4——颜色、光照和材质3
4 为图元指定法向量 OpenGL必须通过图元的法线向量来确定图元的明暗程度。只有场景中的物体有了明暗的不同,场景才有立体感。 确定一个平面的法向量是一件相当简单的事情。在一个平面上,随意寻找两个互不平行的向量,它们的外积(叉积)就是这个平面的法线。 计算两向量的外积可以使用公式:Sx = UyVz - UzVySy = UzVx - UxVzSz = UxVy - UyVx 上述公式中,U、V为两不平行向量,S为U、V的外积(即U×V)。原创 2011-04-08 15:01:00 · 13495 阅读 · 0 评论 -
3D游戏场景数据的组织
<br /><br />3D游戏最重要的部分就是场景数据的组织,他决定了这个3D游戏的速度,同时也决定一个3D游戏的质量(因为速度越快我们就能加入更多的特效)。场景数据的组织形式决定了内存的动态平衡,可视剪裁,LOD计算,碰撞检测,通信等一序列对于游戏来说最重要和最根本的东西,所以我们需要开发一个有效的数据结构来保存我们的3D场景,下面我们来简单的看看这些技术。<br /><br /> 3D场景分为室内场景和室外场景,两者在数据组织和优化上是完全不同的,这是由他们的特性决定的,下面来比较一下他们转载 2011-04-08 16:17:00 · 1774 阅读 · 0 评论 -
OpenGL基本概念入门4——颜色、光照和材质1
1. OpenGL中的颜色 在未使用光照系统的前提下,我们可以直接为图元指定颜色。在传入顶点之前调用glColor函数,就可以为即将指定的顶点设置颜色。例如: glBegin(GL_TRIANGLES); glColor3ub(255,0,0); glVertex3f(0,1,0); glVertex3f(1,0,1); glVertex3f(1,1,0); glEnd(); 将绘制一个红色的转载 2011-04-08 14:48:00 · 2261 阅读 · 0 评论 -
OpenGL基本概念入门2——使用OpenGL绘图
<br /><br />1 绘制之前的必要工作<br />1.1 设置窗体的视见区域 (View Port)<br />glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);<br /> 其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。<br /><br /><br />Windows转载 2011-04-08 13:38:00 · 1937 阅读 · 0 评论 -
OpenGL基本概念入门1——OpenGL 工作机制
<br /><br />1 OpenGL中3D物体的表示<br /> 在3D空间中,场景是物体或模型的集合。在3D图形渲染中,所有的物体都是由三角形构成的。这是因为一个三角形可以表示一个平面,而3D物体就是由一个或多个平面构成的。比如下图表示了一个非常复杂的3D地形,它门也不过是由许许多多三角形表示的。<br /><br /><br />渲染后的地形面貌<br />复杂的地形也是由三角形构成的<br />(图片来自 本站 Terrian Editor)<br /> 因此,在OpenGL中,我们只要指转载 2011-04-08 13:37:00 · 2456 阅读 · 0 评论 -
gluPerspective(解释得很好)
函数原型gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)首先得设置gluPerspective,来看看它的参数都表示什么意思fovy,这个最难理解,我的理解是,眼睛睁开的角度,即,视角的大小,如果设置为0,相当你闭上眼睛了,所以什么也看不到,如果为180,那么可以认为你的视界很广阔,aspect,这个好理解,就是实际窗口的纵横比,即x/yzNear,这个呢,表示你近处,的裁面,zFar表示远处的裁面,如果还没转载 2011-04-08 13:29:00 · 1207 阅读 · 0 评论 -
glPushMatrix();glPopMatrix();以及glMatrixMode的用法
<br /><br />所有的这几个函数的本质都是对坐标系的操作。<br />前提知识:<br />1。每一种矩阵对应着一种坐标系。见图一<br />2。每一次对矩阵的操作都是对当前矩阵进行的。确切的说,作为一种状态机,每一时刻在矩阵方面只能有一种状态。<br />3。每一次压栈和出栈都对应着一种对坐标系的操作。<br />4。我们所有对矩阵的操作都是对矩阵栈的栈顶矩阵进行的。<br /> <br />图一<br />如图:全局坐标系中有一个局部坐标系,这个坐标系的状态对应着一种矩阵。假如当前矩阵为该矩阵,转载 2011-03-29 16:41:00 · 3020 阅读 · 0 评论 -
透视投影的原理和实现
<br />透视投影的原理和实现<br />by Goncely<br /> <br />摘 要 :透视投影是3D渲染的基本概念,也是3D程序设计的基础。掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用。本文详细介绍了透视投影的原理和算法实现,包括透视投影的标准模型、一般模型和屏幕坐标变换等,并通过VC实现了一个演示程序。1 概述<br />在计算机三维图像中,投影可以看作是一种将三维坐标变换为二维坐标的方法,常用到的有正交投影和透视投影。正交投影多用于三维健模,透视投影则由于和人的视觉系统相似转载 2011-03-28 11:10:00 · 53509 阅读 · 9 评论 -
OpenGL库函数列表OpenGl核心函数库
glAccum 操作累加缓冲区glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形glAlphaFunc允许设置alpha检测功能glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中glArrayElement 定义一个被用于顶点渲染的数组成分glBegin,glEnd 定义一个或一组原始的顶点glBindTe转载 2011-12-16 11:40:39 · 1088 阅读 · 0 评论