Html CSS transform matrix3d 3D转场特效

透视矩阵

       2n/(r-l)    0      (r+l)/(r-l)    0
0 2n/(t-b) (t+b)/(t-b) 0
0 0 (n+f)/(n-f) 2fn/(n-f)
0 0 -1 0

t、b、l、r 分别代表camera投影面的上下左右,camera指向-z方向(指向屏幕内),n为近景距离,f为远景距离。

Y轴旋转矩阵

            cos(θ)  0  sin(θ)  0
0 1 0 0
-sin(θ) 0 cos(θ) 0
0 0 0 1

转场效果



主要步骤:

    let w = 1024;
let h = 576;
// 1/2宽作为近景在 X-O-Z 平面上,可以刚好使图像左右两边到camera的夹角为直角,
// 且3个点组成的三角形为等腰直角三角形,便于后面计算。
let n = -w / 2;
let f = -w * 1000; let r = 1;
let l = -1;
let t = 1;
let b = -1; let m00 = 2 * n / (r - l);
let m02 = (r + l) / (r - l); //0
let m11 = 2 * n / (t - b);
let m12 = (t + b) / (t - b); //0
let m22 = (n + f) / (n - f);
let m23 = 2 * f * n / (n - f);
let m32 = -1; const aperspect = math.matrix([
[m00, 0, m02, 0],
[0, m11, m12, 0],
[0, 0, m22, m23],
[0, 0, m32, 0]
])
const aperspectT = math.transpose(aperspect); var change3d = (rfactor, dfactor, mSlide) => {
//thet θ,图像距离近景越近,图像完全移出画布的角度越逼近于90度,越远越接近45度。
let thet = 1 / 2 * rfactor * Math.PI;
const rotationYT = math.matrix([
[Math.cos(thet), 0, -Math.sin(thet), 0],
[0, 1, 0, 0],
[Math.sin(thet), 0, Math.cos(thet), 0],
[0, 0, 0, 1]
])
let result = math.identity(4);
//把图像移动至原点(0, 0),方便计算绕Y轴旋转
//若拉远至近景距离的2倍,视觉上为图像缩小1倍
const transOT = math.matrix([
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[-w / 2, -h / 2, -w / 2 * dfactor, 1]
]);
result = transOT;
//y旋转
result = math.multiply(result, rotationYT);
//透视
result = math.multiply(result, aperspectT);
//还原至画布中央
const transCenterT = math.matrix([
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[w / 2, h / 2, 0, 1]
]);
result = math.multiply(result, transCenterT);
let mStr = math.flatten(result)._data.join(',');
mSlide.style.transform = `matrix3d(${mStr})`
}

另外 CSS transform matrix3d 的值为列向量计算矩阵的转置,上面全部使用转置矩阵来计算。

   matrix3d(
a1, b1, c1, d1,
a2, b2, c2, d2,
a3, b3, c3, d3,
a4, b4, c4, d4)

还需要引入math.js文件。

DEMO 地址

参考文献:

  1. 3D游戏与计算机图形学中的数学方法-视截体
  2. 透视投影矩阵推导
  3. 三维旋转矩阵
  4. 旋转矩阵

Html CSS transform matrix3d 3D转场特效的更多相关文章

  1. jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...

  2. CSS Transform / Transition / Animation 属性的区别

    back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...

  3. css transform旋转属性

    将以下代码复制到本地就可以看到效果: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  4. CSS Transform完全指南(第二版) #flight.Archives007

    Title/ CSS Transform完全指南(第二版) #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: ...

  5. EDIUS设置3D转场的教程

    当你们学习完了EDIUS 2D转场自定义后,一定也想了解3D是如何自定义的吧!其实用法都差不多,下面就和小编我一起来学习下EDIUS 3D转场自定义设置吧! 1.首先我们还是做好自定义转场的准备工作. ...

  6. 关于transform的3D变形函数

    继续transform的3D用法: translate3d(x,y,z)定义3D转换 transformX(x)只用x轴的值进行转换: transformY(y)只用y轴的值进行转换: transfo ...

  7. 基于jQuery和CSS3炫酷图片3D旋转幻灯片特效

    在线预览   源码下载 iPresenter是一款效果非常炫酷的jQuery和CSS3 3D旋转幻灯片特效插件.你可以使用它来制作产品展示.图片画廊或者各种幻灯片和轮播图特效.这款幻灯片插件的特点有: ...

  8. 2.纯 CSS 创作一个矩形旋转 loader 特效

    原文地址:2.纯 CSS 创作一个矩形旋转 loader 特效 扩展后地址:https://scrimba.com/c/cNJVWUR  扩展地址:https://codepen.io/pen/ HT ...

  9. 1.纯 CSS 创作一个按钮文字滑动特效 + 弹幕(残缺)

    原文地址:1# 视频演示如何用纯 CSS 创作一个按钮文字滑动特效 扩展后地址:https://scrimba.com/c/cJkzMfd HTML代码: <html> <head& ...

随机推荐

  1. 如何发布自己的APP到Google Play上

    如何发布自己的APP到Google Play上 参考链接: https://justforuse.github.io/blog/zh-cn/2019/08/publish-your-own-app-t ...

  2. Asynchronous Streaming Request Processing in Spring MVC 4.2 + Spring Boot(SpringBoot中处理异步流请求 SpringMvc4.2以上)

    With the release of Spring 4.2 version, Three new classes have been introduced to handle Requests As ...

  3. Python第一阶段06

    1.面向对象编程: class Dog: def __init__(self, name): self.name = name def bulk(self): print("%s 汪汪汪.. ...

  4. Excel对某一列的数据插入处理,域名得出IP

    早期都是通过Excel做数据统计,对某一列的数据插入处理. 代码功能是从A列纯域名,将域名转换为IP,从域名A列得到IP写到B列. 代码 #!/usr/bin/python #coding:utf-8 ...

  5. JavaScript图形实例:图形的旋转变换

    旋转变换:图形上的各点绕一固定点沿圆周路径作转动称为旋转变换.可用旋转角表示旋转量的大小. 旋转变换通常约定以逆时针方向为正方向.最简单的旋转变换是以坐标原点(0,0)为旋转中心,这时,平面上一点P( ...

  6. Intellij热部署插件JRebel的详细配置及图解

    参考博客地址:https://blog.csdn.net/nyotengu/article/details/80629631 参考博客地址:https://blog.csdn.net/weixin_4 ...

  7. jquery设置滚动条样式

    HTML结构 下面是该滚动条插件工作所必须的HTML结构: <div id="about" class="nano">     <div cl ...

  8. Anaconda是什么?Anconda下载安装教程(1)

    一.如果从事Python开发,配置环境需要安装两个包: 第一个安装开发工具,俗称IDE : 推荐使用 Pycharm 第二个安装开发工具包: Anaconda ps:Windows 下 Pycharm ...

  9. LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)

    21. 合并两个有序链表 21. Merge Two Sorted Lists 题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. LeetCode ...

  10. [转帖]浅谈响应式编程(Reactive Programming)

    浅谈响应式编程(Reactive Programming) https://www.jianshu.com/p/1765f658200a 例子写的非常好呢. 0.9312018.02.14 21:22 ...