WebGL常用数学公式
1.三角函数
坐标轴采用右手法则,沿Z轴的逆时针方向为正角度,假设原始点为p(x,y,z),a是X轴旋转到点p的角度,r是从原始点到p点的距离。用这两个变量计算出点p的坐标,等式如下:
x = rcos a;
y = rsin a;
类似的可以使用r,a,b(p旋转的角度)来表示p'的坐标:
x' = r cos(a + b);
y' = r sin(a + b);
利用三角函数两角和公式:
sin(a +/- b) = sin a cos b +/- cos a sin b
cos(a +/- b) = cos a cos b -/+ sin a sin b
可得:
x' = r(cos a cos b - sin a sin b)
y' = r(sin a cos b + cos a sin b)
最后将x,y等式带入,消除r 和 a 可得等式:
x' = x cos b - y sin b
y' = x sin b + y cos b
z' = z
另外计算中也会用到弧度计算功能:
radian = a * (PI / 180)
2.变换矩阵:旋转
矩阵和矢量的方式可以用如下等式表示:
等式的右边由x、y、z组成的矢量被称为三维矢量。计算方式如下:
x' = ax + by + cz
y' = dx + ey + fz
z' = gx + hy + iz
在看看三角函数的等式,并与其比较:
x' = ax + by + cz
x' = x cosb - y sinb
如果 a = cosb, b = -sinb,c = 0,那么两个等式完全相同。在看y':
y' = dx + ey + fz
y' = x sinb + y cosb
如果 d = sinb, e = cobb, f = 0,那么两个等式完全相同。将这些结果代入到等式3.4中,得到等式:
这个矩阵被称为变换矩阵(transformation matrix),也被称为旋转矩阵(rotation matrix)。
3.变换矩阵:平移
平移公式:x' = x + Tx。
如下所示是4*4矩阵:
该矩阵的乘法结果如下所示:
根据最后一个式子 1 = mx + ny + oz + p,很容易求得系数m = 0, n = 0, o = 0, p = 1;比较x',可知 a = 1, b = 0, c = 0, d = Tx;类似地,比较y',可知e = 0, f = 1,g = 0, h = Ty;比较z',可知i = 0, j = 0, k = 1, l = Tz。这样,就可以写出表示平移的矩阵,又称为平移矩阵(translation matrix)。如下所示:
4. 4*4的旋转矩阵
将旋转矩阵从一个3*3矩阵转变为一个4*4矩阵,只需要将旋转公式和4*4矩阵公式比较下:
x' = xcosb - ysinb
y' = xsinb + ycosb
z' = z
x' = ax + by + cz + d
y' = ex + fy + gz + h
z' = ix + jy + kz + l
l = mx + ny + oz + p
例如,当你通过比较x' = xcosb - ysinb与x' = ax + by +cz +d时,可知a = cosb, b = -sinb, c= 0, d = 0。以此类推,求得y'和z'等式中的系数,最终得到4*4的旋转矩阵。如下所示:
5.变换矩阵:缩放
假设在三个方向X轴,Y轴,Z轴的缩放因子Sx, Sy, Sz不相关,那么有:
x' = Sx * x
y' = Sy * y
z' = Sz * z
和矩阵的乘法结果比较,可知缩放操作的变换矩阵:
6.distance(position1, position2)
顶点着色器内置函数,计算出两个坐标之间的距离。参数:
position1:第一个坐标
position2:第二个坐标
返回距离,值为float类型
7.mix(x, y, z)函数(数学函数x*(1-z) + y*z)
GL_ES内置函数,该函数会计算x*(1-z) + y*z,其中x、y、z分别为第1、2和3个参数。
WebGL常用数学公式的更多相关文章
- MarkDown 编辑数学公式
1. 参考博客:http://blog.csdn.net/smstong/article/details/44340637 1 数学公式的web解决方案 在网页上显示漂亮的数学公式,是多年来数学工作者 ...
- LaLeX数学公式
启用数学公式: 需要插入公式时,用 $ 将公式包围.若需要输入多行,则用一对 $$ 包围. 例如: $$ \rho = \sqrt{(\Delta x)^{2}+(\Delta y)^{2}} \\ ...
- iOS开发中常用的数学函数
iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...
- AS3动画效果常用公式
缓动公式: sprite.x += (targetX – sprite.x) * easing;//easing为缓动系数变量 sprite.y += (targetY – sprite.y) * e ...
- Latex常用公式整理
目录 常用 常用数学公式 常用希腊字母 说明:博客园中的Latex编辑是以$ latex公式 $,为边界. 1.常用 描述 Latex公式 表达式 下标 x_2 x2 上标 x^2 x2 分数 \f ...
- 【转载】markdown数学常用公式箭头符号
来源1:https://www.jianshu.com/p/3f01c5658356 来源2:https://blog.csdn.net/smstong/article/details/4434063 ...
- ACM竞赛 Java编程小结
1.字符串的长度 String str = new String(" abcd"); int length = str.length(); 2.数组的长度.排序 2.1对于 a[] ...
- 使用css3画饼图
CSS3 Gradient介绍参考地址: http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html http: ...
- as3 公式
AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * ...
随机推荐
- java jar包与配置文件的写法
一个普通的java project,里面引用了config.properties配置文件,将项目打成Runnable jar,然后将config.properties放到打包后的jar路径下,执行该j ...
- C++中cin的用法汇总
cin可以用于接收输入,最常见的是从控制台接收.在刚学习C++的时候经常会用cin来接收数据,这里想要系统的总结一下cin的用法,保证不灌水. C++中的cin是一个 istream对象,从标准输入中 ...
- Linux 使用tty0 显示10分钟自动关闭功能
如果用屏幕显示控制台,10分钟左右会自动关闭,有如下方法可以解决 在应用层调用如下代码: #include <fcntl.h> #include <stdio.h> #incl ...
- PCL关键点(1)
关键点也称为兴趣点,它是2D图像或是3D点云或者曲面模型上,可以通过定义检测标准来获取的具有稳定性,区别性的点集,从技术上来说,关键点的数量相比于原始点云或图像的数据量减小很多,与局部特征描述子结合在 ...
- CNDS账号密码
您购买的CSDN 100下载积分 发货如下:CSDN账号:masunwei0961CSDN密码:sangsang3邮箱:lao42981894zh@163.com邮箱密码:songsong3
- 【转】MYSQL数据库四种索引类型的简单使用--MYSQL组合索引“最左前缀”原则
MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...
- PHP递归算法的简单实例
递归函数为自调用函数,在函数体内直接或直接自个调用自个,但需求设置自调用的条件,若满意条件,则调用函数自身,若不满意则停止本函数的自调用,然后把目前流程的主控权交回给上一层函数来履行,也许这么给我们解 ...
- Ogre RTSS组件解析
我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些AP ...
- 【6】JVM-内存分配与回收策略
JAVA技术体系中的自动内存管理实际上就是自动化的解决了给对象分配内存以及回收给对象分配的内存这两个问题.回收部分通过之前的<GC设计思路分析>和<垃圾收集器>这两篇博 ...
- JDBC快速入门教程
JDBC是什么? JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API通常与数据库使用于: 连 ...