位置: 编程技术 - 正文

opengl的变换和矩阵(opengl transform)

编辑:rootadmin

推荐整理分享opengl的变换和矩阵(opengl transform),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl图形变换颜色,opengl模型变换矩阵,opengl矩形,opengl的三种变换,opengl transform,opengl的三种变换,opengl模型变换矩阵,opengl矩形,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL的变换和矩阵

1)指定矩阵类型OpenGL中使用glMatrixMode指定当前要设置的矩阵类型,常用的参数是GL_PROJECTION和GL_MODELVIEW,还有GL_TEXTURE。OpenGL将视点变换(即摄像机变换)和模型变换(即物体变换和世界变换)合二为一了。glMatrixMode指定的模式一但指定就不会变除非再次调用glMatrixMode,所以一般在reshpae里设定GL_PROJECTION之后再使用glMatrixMode指定当前矩阵类型为GL_MODELVIEW,那么以后设置的变换矩阵就都是模型视点矩阵。2)模型视点矩阵设定顺序在设定模型视点矩阵时,如果使用gluLookAt设定视点矩阵,必须先调用gluLookAt,然后再设定各个模型变换矩阵。而且由于每帧重新刷新,矩阵不会自动清除(矩阵设定都是右乘到栈顶),所以每帧一开始要使用glLoadIdentity将模型视点矩阵设成单位阵,然后用gluLookAt设定视点矩阵,然后是各模型变换矩阵。3)变换矩阵设定和执行顺序由于OpenGL使用的是向量右乘矩阵(向量是列向量,矩阵是列主矩阵),V'=M X V,而每次使用glTranslate*,glScale* ,glRotate*等的时候是将所指定的矩阵右乘到当前矩阵栈栈顶的矩阵上,比如原栈顶矩阵为I,使用glTranslate*指定矩阵T,那么当前变换矩阵就是IxT,如果再用glScale*指定一个缩放矩阵S,那么当前矩阵就是IxTxS,用来变换向量就变成 V' = IxTxSxV,效果就是先缩放再平移,可见指定矩阵的顺序是和矩阵变换向量的执行顺序相反的。如果这儿在代码中先调用glScale*,再调用glTranslate*,就会变成先平移再缩放,结果是很不一样的,因为缩放是针对中心点的坐标&#;变化,如果先平移,等于这些点离中心点远了,再放大就会更加偏离中心点。示例代码: glPushMatrix(); glTranslatef(.0f,0.0f,0.0f); glScalef(2.0f,2.0f,2.0f); glutWireCube(1.0); glPopMatrix(); glPushMatrix(); glScalef(2.0f,2.0f,2.0f); glTranslatef(.0f,0.0f,0.0f); glutWireCube(1.0); glPopMatrix();

同样对于视点变换和模型变换,由于是先指定视点变换(调用gluLookAt)后指定模型变换,所以实际效果是先模型变换再视点变换,这与一般图形学上的流水线顺序一致。

4)glLoadIdentity,glPushMatrix/glPopMatrix的使用在使用glMatrixMode(GL_PROJECTION)后要立刻调用glLoadIdentity,glMatrixMode本身不会将栈顶矩阵清成单位阵。在每帧开始要调用glLoadIdentity将模型视点矩阵设成单位阵(否则会累积上一帧矩阵变换的最终效果)。在设定模型变换矩阵时,也可以使用glLoadIdentity,这会清除之前所有变换矩阵的累积效果重新开始矩阵设定,当然最方便的还是glPushMatrix/glPopMatrix组合,首先他的效率比glLoadIdentity高,执行glPushMatrix时复制当前的矩阵并入栈(新矩阵位于栈顶,原矩阵被压入栈中),这样之后所做的变换就可以累积原来的变换效果,之后调用glPopMatrix会将原变换矩阵弹出,这样就恢复了原来的变换矩阵,不受push/pop之间矩阵变换的影响。这种矩阵栈的结构特别适合层次关系,一般至少支持层。(投影矩阵支持2层,但一般没用)

opengl的变换和矩阵(opengl transform)

5)模型变换矩阵函数即glTranslate*,glScale* ,glRotate*,使用这些函数速度比自己设置矩阵并调用glMultMatrix*快。使用glScale*会对光照产生影响,必须再次归一化法线。(因为OpenGL会将模型变换应用到法线上)连续旋转时应该是记录旋转角度并以之调用glRotate*,因为多次进行微小旋转会导致误差

6)视点变换矩阵可以用gluLookAt指定,也可以自己封装函数实现功能

7)投影变换投影矩阵一般是在reshape(屏幕尺寸设定或变化的时候)里调用,必须首先调用:glMatrixMode(GL_PROJECTION);glLoadIdentity();投影变换定义视景体,OpenGL会根据视景体进行裁剪(应该是会生成一个齐次空间透视裁剪矩阵并进行裁剪)使用glFrustum指定透视投影的视景体,他会生成一个透视矩阵并将其与当前矩阵相乘也可以使用gluPerspective指定,注意他使用的是fovy和w/h还可以自己封装类&#;函数(要使用glMultMatrix*)

8)视口变换,深度坐标glViewport指定视口glDepthRange设定深度&#;范围,默认为0.0~1.0(书中说这是在视口变换过程对z坐标编码的方式。这应该是OpenGL设定的齐次透视裁剪空间的z&#;范围吧)

原网址:

opengl 入门学习 随笔七 在图形当中,正常的情况下,一个像素表示一个点,但是有的时候我们想让点跟大一点或者小一点;并且很多情况下我们对于虚线的需要要多于实线。vo

opengl 入门学习 随笔十一 其实动画就是将画面逐个的播放,原理非常简单,一旦一秒钟显示超过幅画面,人就会错认为是连续的。实际的动画是画好了,然后直接在显示出来就

NeHe OpenGL Lesson 9 ////ThiscodewascreatedbyJeffMolofee(portedtoLinux/GLUTby//RichardCampbell)////Ifyouvefoundthiscodeuseful,pleaseletmeknow.////Visitmeatwww.demonews.com/hosted/nehe//(emailRichardCampbellatulmont@be

标签: opengl transform

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

上一篇:OpenGL学习日记-2014.11.26--简单裁剪(opengl怎么学)

下一篇:opengl 入门学习 随笔七(opengl基础知识)

  • 流转税解释
  • 偷税漏税是指什么税种
  • 盘盈固定资产明细账怎么填写?
  • 公司汽车的折旧费可以扺税吗
  • 指定扣缴和法定扣缴区别
  • 跨区经营如何预缴税款
  • 进项税转出申报表能填负数吗
  • 公司员工出差发工资吗
  • 当月勾选认证的原材料与当月领用的原材料区别
  • 应付账款不用付怎么处理
  • 暂估入库产品行程影响所得税汇算清缴吗
  • 金融工具包括哪些及其法律特征
  • 税负率是税率吗
  • 结转增值税的计算公式
  • 劳务派遣差额部分可以开专票吗
  • 受让无形资产是什么意思
  • 如何区分纳税人和小规模纳税人
  • 事业单位研发支出资本化
  • 仓库多入库怎么退
  • 营业成本主要包括
  • 旅游业差额征税怎么计算
  • 投资性房地产公允价值模式账务处理
  • 汽车发票抵扣联需要盖章吗
  • 个人收回转让的股权个税应如何处理?
  • 潽金融资租赁有限公司
  • 应交税金月底可以有余额吗
  • 收到一张增值税红冲发票
  • 经营租赁方式租入分录
  • 现金分红说明什么
  • 除了个税还有什么税
  • 自产产品用于业务招待 如何申报企业所得税
  • PHP:spl_autoload_functions()的用法_spl函数
  • element ui+vue
  • 外购产品会计分录
  • 深入php:面向对象、模式与实践
  • docker部署webdav
  • Laravel4中的Validator验证扩展用法详解
  • php读取文件内容的方法和函数
  • php自动载入文件的函数
  • es6新增了什么
  • 应交税费-应交增值税
  • 账户验证交易
  • 免税农产品怎么抵扣进项税
  • 为什么盈余公积减少,未分配利润增加
  • 印花税核定征收比例取消了吗
  • 合同补充协议印花税怎么交
  • 以前年度损益调整是什么意思
  • 出差补贴要不要交个税呢?
  • linux中备份
  • 企业计提固定资产折旧以什么假设为前提
  • 月销售额10万以下一般纳税人免征增值税
  • 所得税季报中的营业收入包括营业外收入吗
  • 银行承兑汇票和银行汇票的区别
  • 公司对员工的罚款用途
  • 如何在个人所得税app上修改扣缴义务人
  • 供应商折扣一次多少
  • 一般纳税人的资格登记
  • 预收款不开票怎么处理
  • 加班就餐费如何入账
  • 国际快递能发吗
  • 记录一次博客迁移到Docker上的操作
  • 如何使用u盘安装软件
  • linux安装视频教程
  • csrss.exe是什么进程 2个
  • win7guest账户有密码吗
  • mac内存管理在哪里
  • ptssvc.exe - ptssvc是什么进程 有什么用
  • win10应用商店更新比蜗牛还慢
  • Linux编译内核无法启动
  • 计算机中丢失opencv_core249.dll
  • JavaScript 2048 游戏实例代码(简单易懂)
  • Python中time模块中的方法
  • 获取某个div的高度
  • js格式化输出数字
  • Unity3D游戏开发pdf
  • 济宁税务局王燕利
  • linux显示中文
  • 机票票号怎么查航班
  • 卷筒纱窗拆卸
  • 工伤保险怎么补申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设