位置: 编程技术 - 正文

Tutorial 6:Translation Transformation

编辑:rootadmin

推荐整理分享Tutorial 6:Translation Transformation,希望有所帮助,仅作参考,欢迎阅读内容。

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

本文源自: TransformationBackground

在这个教程中,我们将把目光投向3D物体各种类型的变换,并让他们在在场景中深度值错误的情况下能够显示。最容易代表每个变换的方法是通过使用矩阵,把这些矩阵一个个相乘然后用最后相乘的结构乘以一个顶点位置。后面相关的每一个教程都被测试特定的变换。 现在我们把目光放在平移变换上面,它代表着根据向量的长度和方向平移一个物体。比如说我们把在图片左边的三角形移动到图片的右边。 完成这种平移,一个做法是提供一个代表偏移量的vector(在这里是-1,1)作为uniform变量,然后在处理每个定点的时候加上这个vector。但是这种做法却与一系列矩阵相乘以得到一个通俗的变换相违背。此外,后面你就会发现我们可能不会先做平移变换,而是与平移变换前的变换矩阵相乘,然后再加上平移位置,并最终与平移后面的矩阵相乘。这种做法相当的笨拙,一个更好的方式是找到代表平移变换的矩阵,让平移矩阵参与所有系列矩阵相乘这个步骤。但是你能不能找到一个与三角形左下角点(0,0)相乘可以得到结果为(1,1)的矩阵呢?事实上你并能不能使用一个2D矩阵(也不能用3D矩阵来处理(0,0,0)点)。通常情况下我们需要一个矩阵M,然后给定一个点P(x,y,z)和一个向量V(v1,v2,v3),M*P=P1(x+v1,y+v2,z+v3)。简而言之矩阵M能够代表把P变换到P+V。在向量P1,他的每一个分量都是P和V分量的和。每一个求和公式都由单位矩阵提供。 I*P=P(x,y,z)。所以所以我们需要从单位矩阵着手,并发现P1每个分量中(…+V1,…+v2,…+v3)等式左边与右边相加的规则。来看一下单位矩阵的形式: 我们希望通过修改单位矩阵以得到下面的结果: X+V1Y+V2Z+V3 如果一直盯着3x3矩阵不放的话,很难实现平移变换,但是如果换到一个4x4矩阵的话就可以做下面的事情了:

用四维向量代替三维向量类似于齐次坐标系的方式,这种方式在3D图形中非常流行也非常的使用。其中第四个分量称之为’W’。事实上,先前教程着色器内部符号gl_Position是一个四维向量,w分量在3D向2D投影的过程中扮演了重要的角色。你可以改变向量的方向和大小,但是 长度/方向这种比值相同的向量都被认作大小相同,跟他们的”起始位置”并无关系。所以你可对每个向量套用这种定义。让w=0然后与平移矩阵相乘结果与原向量是一样的。

Source walkthru

添加定义在math_3d.h头文件中定义的4x4矩阵。从想在开始这种矩阵会被用在的绝大部分的变换中。

用这个变量作为访问着色器中uniform变量world 矩阵。我们把他命名为‘world’的原因是,我们希望物体位置的移动的坐标系系统就是是我们虚拟的世界”world”。

Tutorial 6:Translation Transformation

在渲染函数,我们准备了一个4x4的矩阵然后根据上面的展开式来填充。我们把v2和v3设置为0这样X和Y方向轴都不会发生变化,然后把v1设定为Scale的正弦值。这个矩阵会在X轴平移物体,平移的偏移量在-1和1中循环。现在我们需要向着色器载入矩阵了。

这个就是另一个使用glUniform*函数向着色器的uniform 变量穿值的例子。这个特定的函数能够载入4x4矩阵,当然也有2x2,3x3,3x2,2x4,4x2,3x4和4x3的版本。他的第一个参数是unform变量的位置(在着色器中编译后由glGetUniformLocation()来获取)。第二个参数用来表示我们正在更新的军阵的数量。我们用1来表示只用了1个矩阵,当然我们也可以直接用这个函数在一个调用中更新多个矩阵。第三个参数对于新手来说相当令人困惑,它代表着矩阵是row-major还是column-major次序。Row-major意思是矩阵的数据由从第一行开始一行一行的提供,column-major则是一列一列的组成。C/C++是row-major式的语言,也就是当你传入一个二维数组,这个数组把由最顶端行数据存放于低地址的内存。就像下面的例子一样。

显而易见,这个数组代表的形式如同下边的矩阵

内存的布局:1 2 3 4 5 6 (1在低地址) 因为我们想为矩阵设定row-major顺序,所以glUniformMatrix4fv()的第三个参数被设定为GL_TRUE。当然也可以把这个参数设置GL_FALSE,但是需要我们吧矩阵的数据转置一下(C/C++内存布局保持不变,但是OpenGL会把我们输入的前四个值作为一个矩阵一列,后面的数据也是如此)。 后面的代码就是着色器部分的了。

这是个4x4 uniform变量,mat2和mat3也能使用。

在顶点缓冲区的三角形顶点的位置由一个三维向量组成,但是我们前面告诉我们需要第四个分量,它的值为1。这样一来就有两个选择:在缓冲中吧顶点数据换成四维向量形式的或者直接在顶点着色器中加入第四个分量,显然第一个是不合适的。每一个顶点位置多加一个1.0分量需要多耗费四个字节。我们在顶点缓冲区保持三维向量然后在着色器中扩展w分量,显然是更高效的。在GLSL中可以用’vec4(Position,1.0)’这行代码。然后用矩阵来乘以这个向量,并把向量放入gl_Position中。总而言之,我们在每一帧生成了一个平移矩阵可以在X轴方向上移动某个特定取值的距离,并添加了介于-1.0和1.0之间的第四个分量。着色器把每一个顶点的位置乘以可以让物体左移或右移的矩阵。大部分情况下,在顶点着色器处理后,三角形的其中一个边会溢出normalized box之外,随后裁剪器会直接把normalized box之外的区域裁减掉。我们将只能看到在normalized box范围之内的部分。

Tutorial 7 Rotation Transformation 本文源自:

Android OpenGL ES(一)----必备知识 1.手机的坐标空间我们都知道要想在手机上随心所欲的绘制图形,就必须了解手机的坐标体系。下图就是将坐标映射到手机屏幕的坐标。图1手机屏幕基

Android OpenGL ES(二)----平滑着色 直线或者三角形上的每个片段混合后的颜色可以用一个varying生成。我们不仅能混合颜色,还可以给varying传递任何,OpenGL会选择属于那条直线的两个,或

标签: Tutorial 6:Translation Transformation

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

上一篇:OpenGL导入三维模型(opengl绘制三维图形代码)

下一篇:Tutorial 7 Rotation Transformation

  • 一般纳税人预缴税款几个点
  • 公司股东变更需要本人到场吗
  • 新注册公司没有员工怎么报个税
  • 注册资本金入账需要缴税么
  • 个人所得税申报方式选哪个比较好
  • 应交增值税销项税额借贷方向
  • 咨询服务费预收率怎么算
  • 自产农产品增值税申报表填10行吗
  • 会计凭证装订放哪些报表
  • 建筑工地加油计入什么科目
  • 非盈利组织收到投资款如何做账
  • 房地产企业净利润为负的原因
  • 应交税费和所得税费用会计分录
  • 增值税专用发票的税率是多少啊
  • 红字发票信息开错该怎么撤回与相关会计处理
  • 库存生产用钢材属于什么会计科目类别
  • 银行汇票的概念
  • 个人所得税手续费
  • 航天开票系统清单流程
  • 不经常发生应税行为的企业可以选择按小规模纳税人纳税
  • 小规模纳税人零申报什么意思
  • 有单位购买我公司开发的房产作为“投资性房地产”,该单位需要缴纳房产税吗?
  • 资金筹集业务核算实训心得体会
  • 企业的主营业务收入
  • 纳税申报需要去税务局吗
  • 0元收购股份
  • 出口退税的计算题
  • 收到财政奖励扶持资金账务处理?
  • 暂时关闭朋友圈
  • 电脑中毒蓝屏了怎么办修复
  • 监事会职权范围是什么
  • Mac如何开启无痕浏览
  • bios 和 uefi
  • 售后回购怎么做账务处理
  • eslint vue配置
  • 甲方如何规避合同责任
  • 代扣费用会计分录
  • 开多少票就要进多少钱吗
  • discuz论坛无法登录
  • 对附属单位补助的资金性质是财政预算资金
  • 固定资产清理需要交企业所得税吗
  • 什么情况下开劳务费发票
  • 小规模纳税人通行费电子普票能抵扣吗
  • 个人以不动产投资成立一人有限公司
  • 免征企业所得税的有哪些行业
  • 异地交税怎么交
  • 资产减值损失应计入什么科目
  • 增值税纳税申报类型有哪些
  • 律师事务所收到专票能抵扣吗合法吗
  • 品种法分批法分步法的区别
  • 以前年度费用未入账,现可以入账吗?
  • 子公司计提的盈余公积合并抵消
  • 在建工程账务处理会计分录
  • 出口退税转免税怎么写个说明
  • 营业外支出如何做账
  • 直租业务可以抵房租吗
  • 会计凭证传递的基本要求
  • mysql第四章
  • internetfeatures.exe是什么文件
  • wave editor教程
  • 直通车和百度竞价的区别
  • 经典璧纸
  • 硬盘安装ubuntu18
  • Linux磁盘分区的作用
  • linux无法运行yum
  • win8怎么装驱动
  • mac修改文件名
  • yum下载已安装的包
  • linux单个文件夹文件数量
  • OpenGL ES2.0-iPhone开发-part1
  • chromexcel
  • 进程 python
  • perl use vars pragma使用技巧
  • python 二叉树
  • androidapplication
  • android电池优化设置
  • jquery通过id赋值
  • python 入门
  • 深圳各区海拔
  • 代理记账费用可以全额抵扣吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设