首页
学习
活动
专区
圈层
工具
发布

实验4 二维几何变换

(1) 使用glTranslatef()函数,实现图形平移,并结合glTranslatef()函数的不同参数输入,实现x,y和z方向的平移,将测试结果存为图1-3,与对应修改的平移函数代码一起保存至word...实验文档中(20分钟); (2) 使用glRotatef()函数,实现图形旋转,并结合glRotatef()函数的不同参数输入,实现x,y和z方向的旋转,将测试结果存为图4-6,与对应修改的旋转函数代码一起保存至...假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵v。那么,经过变换得到的顶点坐标就是((RT)v)。...即:实际变换的顺序与代码中写的顺序是相反的。由于“先移动后旋转”和“先旋转后移动”得到的结果很可能不同,初学的时候需要特别注意这一点。...OpenGL规定堆栈至少可以容纳32个矩阵,某些OpenGL实现中,堆栈的容量实际上超过了32个。因此不必过于担心矩阵的容量问题。 通常,用这种先保存后恢复的措施,比先变换再逆变换要更方便、更快速。

1.4K20

实验3 OpenGL几何变换

tx, ty,tz指定这个移动物体的矩阵,它们可以是任意的实数值,后缀为f(单精度浮点float)或d(双精度浮点double),对于二维应用来说,tz=0.0。...假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵v。那么,经过变换得到的顶点坐标就是((RT)v)。...即:实际变换的顺序与代码中写的顺序是相反的。由于“先移动后旋转”和“先旋转后移动”得到的结果很可能不同,初学的时候需要特别注意这一点。...从“相对移动”的观点来看,改变观察点的位置与方向和改变物体本身的位置与方向具有等效性。在OpenGL中,实现这两种功能甚至使用的是同样的函数。...通常,用这种先保存后恢复的措施,比先变换再逆变换要更方便,更快速。 注意:模型视图矩阵和投影矩阵都有相应的堆栈。使用glMatrixMode来指定当前操作的究竟是模型视图矩阵还是投影矩阵。

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实验5 OpenGL二维几何变换

    tx、ty、tz指定这个移动物体的矩阵,它们可以是任意的实数值,后缀为f(单精度浮点float)或d(双精度浮点double),对于二维应用来说,tz=0.0。...假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵v。那么,经过变换得到的顶点坐标就是((RT)v)。...即:实际变换的顺序与代码中写的顺序是相反的。由于“先移动后旋转”和“先旋转后移动”得到的结果很可能不同,初学的时候需要特别注意这一点。...从“相对移动”的观点来看,改变观察点的位置与方向和改变物体本身的位置与方向具有等效性。在OpenGL中,实现这两种功能甚至使用的是同样的函数。...OpenGL规定堆栈至少可以容纳32个矩阵,某些OpenGL实现中,堆栈的容量实际上超过了32个。因此不必过于担心矩阵的容量问题。 通常,用这种先保存后恢复的措施,比先变换再逆变换要更方便、更快速。

    2.9K11

    glLoadIdentity()与glTranslatef()和glRotatef()--坐标变换

    初学OpenGL,对它的矩阵变换不甚了解,尤其是glTranslatef和glRotatef联合使用,立即迷得不知道东西南北。在代码中改变数据多次,终于得到了相关变换概念。...glLoadIdentity(); // 重置当前的模型观察矩阵 glTranslatef(2.5f,0.0f,-20.0f); glRotatef(rtri,1.0f,0.0f,0.0f...,左边的矩阵称为平移变换矩阵,若把2、3、4换成x、y、z,则用它乘以一个齐次坐标表示的向量,就可以将该向量平移(x,y,z). 旋转变换和缩放变换都像平移变换一样可用一个矩阵来表示。...明确了作用顺序后,还有一个让人困惑的就是坐标轴是否改变。因为glTranslatef的变换是以当前位置来变换的,也就是说用的是相对坐标而不是绝对坐标。...之后,坐标轴回到OpenGL窗口的中心,通过两次glTranslatef(-1.5f,0.0f,-6.0f),坐标轴到了(-3.0f,0.0f,-12.0f); 所以三角形首先按向量(0.0f,1.0f

    1.8K40

    OpenGL基本框架与三维对象绘制

    上次我们介绍了OpenGL的环境构建和二维对象的绘制,这次我们来讲讲三维对象的绘制:  绘制代码如下: // opengltest2.cpp : Defines the entry point for...(0.0f,0.0f,-5.0f); //旋转变换命令——后绘制的所有对象将沿Y 轴正向旋转rtri 个角度单位 glRotatef(rtri,0.0f,1.0f,0.0f);...//以下绘制的对象沿X 轴转动10 度 //glRotatef(10, 1, 0, 0); //查看当前的4X4 矩阵变量 Mat44 mat; //取得模型-视图变换矩阵...——在原有变换基础上,又增加了新的变换; //为了不影响后续对象的变换,采用压栈的方式,保存当前变换矩阵 glPushMatrix(); { glTranslatef...60 度,视景体的宽度和高度比,视距(焦距) //(near)和视径(far)参数 //near = 1, far = 100, Z 轴负向顺着视线方向指向屏幕内 //X 轴正向向右

    1.1K20

    OpenGL ES

    OpenGL ES的坐标系是三维的,其中坐标系原点是手机的中心。...其中x指明平移向量的x坐标,y指明平移向量的y坐标,z指明平移向量的z坐标,z必须得在zNear和zFar之间,否则我们看不到图形的效果。...其中size用于描述顶点的尺寸,当使用xyz坐标系时,值取3;type顶点的类型,GL10.GL_FIXED表示固定的顶点;stride表示步长;pointer表示顶点缓存。...表3-1-4:mode取值及含义 ​mode的取值​ ​说明​ GL_MODELVIEW 应用视图矩阵堆的后续矩阵操作 GL_PROJECTION 应用投射矩阵堆的后续矩阵操作 GL_TEXTURE 应用纹理矩阵堆的后续矩阵操作...(); gl.glTranslatef(0.0f, 0.0f, -5.0f); //设置3个方向的旋转 gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f); gl.glRotatef

    1.6K10

    OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转

    Mesh由顶点、边、面Faces组成的,它包含绘制所需的数据,例如顶点位置、纹理坐标、法向量,材质属性等内容,它是OpenGL用来绘制的最小实体。...o 引入一个新的object     v 表示顶点位置     vt 表示顶点纹理坐标     vn 表示顶点法向量     f 表示一个面,面使用1/2/8这样格式,表示顶点位置/纹理坐标/法向量的索引...,后面的参数是旋转的法向量 glRotatef(yRotate, 0.0f, 1.0f, 0.0f); //glTranslatef(0.0f, 0.0f, ty); glTranslatef...非常简单,水平方向上,只要在鼠标移动时将移动后的坐标减去移动前的坐标然后除以实际移动的差值(自己误差测试) ,就得到了移动的法向量。...这个我们就比较简单了,我们只需要将移动后的坐标减去移动前的坐标这个差值作为一个法向量,然后传给旋转绘制的变量,后面调用重绘即可实现。

    3.6K30

    OpenGL ES _ 入门练习_002

    控制器(在里面实现方法) 第二步: 创建EAGContext 跟踪所有状态,命令和资源 第三步: 清除命令 第四步: 创建投影坐标系 第五步: 创建对象坐标 第六步: 导入顶点数据 第七步: 导入颜色数据...(0.0, (GLfloat)(sinf(transY)/2.0), z); glRotatef(spinY, 0.0, 1.0, 0.0); glRotatef(spinX, 1.0, 0.0, 0.0...); transY += 0.075f; spinY+=.25; spinX+=.25; } /** *  导出顶点坐标 *  glVertexPointer 第一个参数:每个顶点数据的个数,第二个参数...,顶点数据的数据类型,第三个偏移量,第四个顶点数组地址 */ - (void)loadVertexData{ glVertexPointer(3, GL_FLOAT, 0, cubeVertices);...和 坐标系统 glFrustumf(-size, size, -size /aspectRatio, size /aspectRatio, zNear, zFar); glViewport(0, 0,

    49720

    OpenGL ES _ 入门_练习001

    控制器(在里面实现方法) 第二步: 创建EAGContext 跟踪所有状态,命令和资源 第三步: 生成球体的顶点坐标和颜色数据 第三步: 清除命令 第四步: 创建投影坐标系 第五步: 创建对象坐标 第六步...: 导入顶点数据 第七步: 导入颜色数据 第八步: 绘制 ---- 代码部分 /** *  创建EAGContext 跟踪所有状态,命令和资源 */ - (void)createEagContext{...(0.0, (GLfloat)(sinf(transY)/2.0), z); glRotatef(spinY, 0.0, 1.0, 0.0); glRotatef(spinX, 1.0, 0.0, 0.0...第一个参数:每个顶点数据的个数,第二个参数,顶点数据的数据类型,第三个偏移量,第四个顶点数组地址 */ - (void)loadVertexData{ glVertexPointer(3, GL_FLOAT...GL_TRIANGLE_STRIP, 0, (m_Slices +1)*2*(m_Stacks-1)+2); // free(_vertexArray); // free(_colorsArray); } /** *  生成球体的顶点坐标和颜色数据

    57810

    OpenGl 实现鼠标分别移动多个物体

    一.鼠标控制函数准备 我们需要对鼠标信息的获取,那么必然需要一个鼠标事件的响应函数来控制,很好opengl已经有内部的鼠标控制函数了,我们直接拿来使用就行了。...下面这个是处理鼠标移动时候的调用函数 glutMotionFunc(&func(int x,inty)); // 鼠标移动的时候的函数 x,y当前鼠标坐标 反正调用起来非常的简单只要自己写好一个鼠标点击类事件处理函数和一个鼠标移动事件处理函数...那么问题就来了,选取了物体后,如何实现物体跟随我们鼠标移动呢?   非常简单,水平方向上,只要在鼠标移动时将移动后的坐标减去移动前的坐标然后除以物体的宽度或者长度 ,就得到了移动的法向量。...移动后: ? 这个就是我们本文实现的内容,后面就可以用于读取多个3d模型分别进行移动。 项目完整代码,配置好Opengl环境可以直接运行,更多项目分享以及学习教程,请关注在下!!!!...glPopMatrix(); glTranslatef(2, 0, 0); // 平移 glRotatef(rotate, 0, 1, 0); glRotatef(rotate

    3.1K21

    实验6 OpenGL模型视图变换

    (3)请分别调整观察变换矩阵、模型变换矩阵和投影变换矩阵的参数,观察变换结果;   (4)掌握三维观察流程、观察坐标系的确定、世界坐标系与观察坐标系之间的转换、平行投影和透视投影的特点,观察空间与规范化观察空间的概念...无论是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。OpenGL可以在最底层直接操作变换矩阵。...下面是这些变换函数使用时需要注意内容:   (1)在OpenGL程序中,视图变换必须出现在模型变换之前,但可以在绘图之前的任何时候执行投影变换和视口变换。   ...总结起来,OpenGL中矩阵坐标之间的关系为:模型世界坐标→模型视图矩阵→投影矩阵→透视除法→规范化设备坐标→窗口坐标。   ...(place[0], place[1], place[2]);//平移,放在桌面上的高度 glRotatef(90, 1, 0, 0); //茶壶绕x轴旋转的角度 glRotatef(tRotate

    2.8K30

    第6章代码-三维造型

    6.3.4编程实例-简单实体构建 本实例参考了著名的Nehe OpenGL示例构建了四棱锥和立方体的实体模型,这两个模型的顶点位置如图6.13所示。...可见,四棱锥的四个侧面的顶点序列分别为v0v1v2、v0v2v3、v0v3v4、v0v4v1,底面为v1v2v3v4。...传递顶点信息时使用了glVertex3fv函数,以顶点首地址作为参数,比glVertex3f函数直接用顶点坐标作为参数的方式更为方便、直观。在坐标系原点建好的实体可以通过几何变换放置在任意不同的位置。...4][3]={{0,1,2},{0,2,3},{0,3,4},{0,4,1}}; //四棱锥的顶点号序列 //下行是立方体的顶点号序列 int vertice1[6][4]={{0,1,2,3},{4,5,6,7...glLoadIdentity(); //将矩阵归一化回原样 glTranslatef(1.5f,0.0f,-6.0f); //平移到右侧 glRotatef(rquad

    75321

    【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

    文章目录 一、不同类型矩阵变换先后顺序 二、渲染前不设置单位阵 三、矩阵的压栈和出栈原理分析 四、矩阵的压栈和出栈代码示例 五、相关资源 一、不同类型矩阵变换先后顺序 ---- 对 OpenGL 中的...设置单位矩阵 glLoadIdentity(); // 矩阵缩放 // 缩放的是下面设置的点的坐标 // 每个参数都影响 x , y , z 分量 //glScalef(2.0f..., 1.0f); // 平移变换 // 设置 xyz 三个方向平移的值 glTranslatef(0.0f, -2.0f, 0.0f); 效果 : 先移动后旋转代码 : // 设置单位矩阵...1.0f); // 平移变换 // 设置 xyz 三个方向平移的值 glTranslatef(0.0f, -2.0f, 0.0f); // 矩阵旋转 // glRotatef...和 出栈 , 这是 OpenGL 固定管线中的重要操作 ; 显卡栈 : 矩阵在显卡中有一个栈 , 该显卡中的栈可以存储 n 个矩阵 ; 栈顶矩阵 : 栈顶的矩阵是 模型视图 ( ModelView

    2.3K01
    领券