位置: 编程技术 - 正文

opengl 一些api(opengl)

编辑:rootadmin
(OpenGL中的物体坐标一律采用齐次坐标,即(x, y, z, w),故所有变换矩阵都采用4X4矩阵)所谓齐次坐标就是将一个原本是n维的向量用一个n&#;1维向量来表示。例如,二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一个向量的齐次表示是不唯一的,齐次坐标的h取不同的&#;都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。给出点的齐次表达式[X Y H],就可求得其二维笛卡尔坐标,即[X Y H]→= [x y 1], 这个过程称为正常化处理。在几何意义上,相当于把发生在三维空间的变换限制在H=1的平面内。那么引进齐次坐标有什么必要,它有什么优点呢?许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为p' = p *m1&#; m2(m1旋转缩放矩阵, m2为平移矩阵, p为原向量 ,p'为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' = p*M的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。glPushMatrix() glPopMatrix()当你做了一些移动或旋转等变换后,使用glPushMatrix();OpenGL 会把这个变换后的位置和角度保存起来。然后你再随便做第二次移动或旋转变换,再用glPopMatrix();OpenGL 就把刚刚保存的那个位置和角度恢复。比如:glLoadIdentity();glTranslatef(1,0,0);//向右移动(1,0,0)glPushMatrix();//保存当前位置glTranslatef(0,1,0);//现在是(1,1,0)了glPopMatrix();//这样,现在又回到(1,0,0)了

推荐整理分享opengl 一些api(opengl),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl api error 1285,opengl,opengl api error 1285,opengl1,opengl api version,opengl,opengl api version,opengl angle,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL中的各种转换是通过矩阵运算实现的,具体的说,就是当发出一个转换命令时,该命令会生成一个4X4阶的转换矩阵(OpenGL中的物体坐标一律采用齐次坐标,即(x, y, z, w),故所有变换矩阵都采用4X4矩阵),当前矩阵与这个转换矩阵相乘,从而生成新的当前矩阵。例如,对于顶点坐标v ,转换命令通常在顶点坐标命令之前发出,若当前矩阵为C,转换命令构成的矩阵为M,则发出转换命令后,生成的新的当前矩阵为CM,这个矩阵再乘以顶点坐标v,从而构成新的顶点坐标CMv。上述过程说明,程序中绘制顶点前的最后一个变换命令最先作用于顶点之上。这同时也说明,OpenGL编程中,实际的变换顺序与指定的顺序是相反的。

一、视点变换

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble upx,GLdouble upy,GLdouble upz);

  该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex,eyey,eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。

视点变换是在视点坐标系中进行的.视点变换确定了场景中物体的视点位置和方向.它像是在场景中放置了一架照相机,让照相机对准要拍摄的物体.默认时,相机(即视点)定位在坐标系的原点和物体模型的默认位置是一致的.执行视点变换的命令和执行模型转换的命令是相同的.视点转换和模型转换必须接合在一起来考虑.除了用模型转换命令执行视点转换之外,OpenGL还提供了gluLookAt()函数来设置视点.通常视点转换在模型转换操作之前发出,以便模型转换先对物体发生作用.场景中物体的顶点经过模型转换之后移动到所希望的位置,然后在对场景进行视点定位等操作.模型转换和视点转换一起构成了模型视景矩阵.

二、模型变换

  1、模型平移

glTranslate{fd}(TYPE x,TYPE y,TYPE z);

  该函数用指定的x,y,z&#;沿着x轴、y轴、z轴平移物体(或按照相同的量&#;移动局部坐标系)。  2、模型旋转

glRotate{fd}(TYPE angle,TYPE x,TYPE,y,TYPE z);

  该函数中第一个变量angle制定模型旋转的角度,单位为度,后三个变量表示以原点(0,0,0)到点(x,y,z)的连线为轴线逆时针旋转物体。例如,glRotatef(.0,0.0,0.0,1.0)的结果是绕z轴旋转度。  3、模型缩放

glScale{fd}(TYPE x,TYPE y,TYPE z);

  该函数可以对物体沿着x,y,z轴分别进行放大缩小。函数中的三个参数分别是x、y、z轴方向的比例变换因子(x,y,z 三个参数表示在 x, y ,z 轴放大或者缩小的比例)。缺省时都为1.0,即物体没变化。(小于1表示缩小,大于1表示放大)程序中物体Y轴比例为2.0,其余都为1.0,就是说将立方体变成长方体。

opengl 一些api(opengl)

三、投影变换

投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终进入图像的只是视景体内的有关部分。投影包括透视投影(Perspective Projection)和正视投影(Orthographic Projection)两种。

OpenGL透视投影函数有两个,其中函数glFrustum()的原型为:

void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);

  它创建一个透视视景体。其操作是创建一个透视投影矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far是远裁剪平面的Z负&#;,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far表示离视点的远近,它们总为正&#;。

另一函数是:

void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)

  它是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省&#;分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为(right,top)的矩形

四、视口变换

视口变换就是将视景体内投影的物体显示在二维的视口平面上。

glViewport(GLint x,GLint y,GLsizei width, GLsizei height);

  这个函数定义一个视口。函数参数(x, y)是视口在屏幕窗口坐标系中的左下角点坐标,参数width和height分别是视口的宽度和高度。缺省时,参数&#;即(0, 0, winWidth, winHeight) 指的是屏幕窗口的实际尺寸大小。所有这些&#;都是以象素为单位,全为整型数。

六、矩阵栈的操作

1、void glLoadMatrix{fd}(const TYPE *m)  设置当前矩阵中的元素&#;。函数参数*m是一个指向个元素(m0, m1, ..., m)的指针,这个元素就是当前矩阵M中的元素,其排列方式如下:M = | m0 m4 m8 m |  | m1 m5 m9 m |  | m2 m6 m m |  | m3 m7 m M |  2、void glMultMatrix{fd}(const TYPE *m)  用当前矩阵去乘*m所指定的矩阵,并将结果存放于*m中。当前矩阵可以是用glLoadMatrix() 指定的矩阵,也可以是其它矩阵变换函数的综合结果。OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型。矩阵堆栈对复杂模型运动过程中的多个变换操作之间的联系与独立十分有利。因为所有矩阵操作函数如glLoadMatrix()、glMultMatrix()、glLoadIdentity()等只处理当前矩阵或堆栈顶部矩阵,这样堆栈中下面的其它矩阵就不受影响。堆栈操作函数有以下两个:  ·void glPushMatrix(void);  该函数表示将所有矩阵依次压入堆栈中,顶部矩阵是第二个矩阵的备份;压入的矩阵数不能太多,否则出错。  ·void glPopMatrix(void);  该函数表示弹出堆栈顶部的矩阵,令原第二个矩阵成为顶部矩阵,接受当前操作,故原顶部矩阵被破坏;当堆栈中仅存一个矩阵时

OpenCV2学习笔记(十七):VS中运行支持OpenGL的OpenCV工程 之前一直用Qt+OpenCV开发项目,而在VS中直接偷懒使用预编译的OpenCV进行开发,结果在使用OpenGL时提示NoOpenGLsupport:上网查了一下,原因很明显,是因为预

OpenGL画蜗型线、心形线、三叶曲线、四叶曲线、螺旋线 这里讲的是一些有趣而美丽的曲线,蜗型线、心形线、三叶曲线、四叶曲线、螺旋线等,都是由圆公式的一些特殊的变化带来的,我们使用了参数极坐

OpenGL教程翻译 第十三课 相机空间 OpenGL教程翻译第十三课相机空间原文地址:

标签: opengl

本文链接地址:https://www.jiuchutong.com/biancheng/369628.html 转载请保留说明!

上一篇:学习Nehe Lesson 16(学习英语)

下一篇:OpenCV2学习笔记(十七):VS2013中运行支持OpenGL的OpenCV工程(opencv轻松入门)

  • 税盘连接服务器失败130008
  • 成本核算需要哪些基础工作
  • 视同销售填在申报表哪一栏
  • 怎么查对方一个月去了什么地方
  • 分公司与总公司的法律关系
  • 企业所得税完税证明怎么打印
  • 已经报销的发票还会查吗
  • 净残值可以随意更改吗
  • 新企业会计准则什么时候实施的
  • 小型微利企业免于填报
  • 公司给员工发的工资要交税吗
  • 非居民企业所得税源泉扣缴管理暂行办法
  • 无票收入记账多的进项发票怎么处理?
  • 电解铜进口可以卖吗
  • 现金流量表中所指的现金是指( )
  • 企业的不征税收入用于支出所形成
  • 其他出库单如何记账
  • 进口增值税可以抵扣销项税额吗
  • 飞机票可以直接去机场买吗
  • avsched32.exe是什么进程 avsched32进程有什么作用
  • win7命令提示符怎么打开
  • 医院的重要
  • 怎么检查当年的核酸结果
  • 最小的电视棒是多少寸
  • 融资购入的固定资产如何记账
  • react reducer详解
  • 深度学习中正样本、负样本、简单样本、困难样本的区别 (简单易懂)
  • thinkphp6多语言
  • PHP+Apache+Mysql环境搭建教程
  • python字符串字面量有哪4种
  • 简单设置w11
  • 资产的账面价值大于计税基础
  • 旅行社专票开票内容的规定
  • phpcms文档
  • 深入讲解党的创新理论
  • 增值税专用发票的税率是多少啊
  • 股票股利怎么理解
  • 交强险必须要买驾乘险才能投保
  • sql 判断字符串中是否包含数字
  • 补贴收入是否缴纳个税
  • 开票有误重新开票怎么做分录
  • 子公司注销母公司投资损失企业所得税
  • 政府补贴需要缴纳印花税吗
  • 盈余公积年初和年末没有变化
  • 残保金申报方式改变时间
  • 财务费用包含了利息费用吗
  • 水费差额缴税如何计算
  • 免税农产品怎么开发票
  • 事业单位实收资本如何做账
  • 会计科目用错如何改正
  • 房产税计入管理费还是税金及附加
  • 生产成本的主要构成要素
  • 发票已开后 对方公司名称变更怎么处理?
  • 职工薪酬的范围及内容
  • 发票专用章刻制
  • 实收资本包括哪些项目
  • mysql安装时出现的问题
  • ubuntu安装指南
  • virtualbox虚拟机旋转屏幕
  • windows缓存写入失败,数据怎么找回
  • WIN7系统共享文件夹 您没有权限访问
  • kavsvc.exe - kavsvc是什么进程 有什么作用
  • Win7系统如何清除流氓屏保
  • libmysqlclient.so.10无法找到
  • win10移动版能运行电脑软件吗
  • win10系统应用更新
  • 基于重大误解实施的民事法律行为
  • js抓取网页内容
  • css做一个好看的网页
  • 用球体模拟天空的游戏
  • linux启动的过程
  • linux命令提示符
  • jquery实现移动端
  • js处理时间格式
  • Python 'takes exactly 1 argument (2 given)' Python error
  • js接收excel文件流
  • 河北电子税务局新版登录
  • 延安市地方税务局电话
  • 广东电子税务局官网登录入口
  • 江西省医保卡缴费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设