opengl 旋转矩阵和纹理坐标相乘_乱弹OpenGL中的矩阵变换(下)

1522a6cddcadc3790c9110954944156e.png

本篇文章承接上文:乱弹OpenGL中的矩阵变换(上) 。上篇中,我尝试从一种不太成熟的OpenGL世界观(注意,或许也是3D渲染世界的世界观)来认识这个OpenGL世界,向自己澄清了一些概念(尽管不够高清)。这里我想继续从矩阵数学的角度想一想:究竟模型位置怎么在世界中各个空间的坐标系统中“转换”?——ZwqXin.com

本文来源于 ZwqXin (http://www.zwqxin.com/), 转载请注明
原文地址:http://www.zwqxin.com/archives/opengl/opengl-matrix-what-2.html

OpenGL中的坐标系是右手坐标系,矩阵按列优先存储。这很让人混乱,因为线代里接触的都是行优先存储,突然就这么column-major了.....最初还窃认为该不该从向量角度让头脑清晰,后来看别人文章说这跟向量没啥关系,完全是一种规范:如同右手坐标系,只是一种规范。好吧,列就列啦:

mt0 mt4 mt8 mt12

mt1 mt5 mt9 mt13

mt2 mt6 mt10 mt14

mt3 mt7 mt11 mt15

有点怪是不?当然啦,连C语言学2维数组时都是row-major的,OpenGL却是先一竖下来,再来下一竖(column-major)...(考虑一块内存,第一个格子存mt0,第二存mt1.....)这就是OpenGL矩阵存储方式。上篇提到,模型变换(Mode-Translation),视图变换(View-Translation)乃至投影变换,这些决定了各个空间之不同的"针对坐标系的变换",实质产生出来的是一个左乘矩阵,这些矩阵就是这样存储的。如果你看过任何一本3D图形学的入门书前两章,那你应该知道模型变换(在OpenGL中反映为glTranslate,glScale,glRotate)所使用的矩阵。譬如我这里先让苹果绕z轴逆转个角度Θ,再让它变成原大小的A倍,再右移10单位:(P.S.翻译成OpenGL世界的语言:在模型空间坐标系确定的位置基础上,让世界空间坐标系绕z轴顺转角度Θ,坍缩成原来一半大小,并左移10单位,注意是坍缩后1单位表示的长度跟之前的不一样了。)

A*cosΘ-A*sinΘ0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值