Html CSS transform matrix3d 3D转场特效
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文件。
参考文献:
Html CSS transform matrix3d 3D转场特效的更多相关文章
- jQuery可拖拽3D万花筒旋转特效
这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...
- CSS Transform / Transition / Animation 属性的区别
back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...
- css transform旋转属性
将以下代码复制到本地就可以看到效果: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- CSS Transform完全指南(第二版) #flight.Archives007
Title/ CSS Transform完全指南(第二版) #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: ...
- EDIUS设置3D转场的教程
当你们学习完了EDIUS 2D转场自定义后,一定也想了解3D是如何自定义的吧!其实用法都差不多,下面就和小编我一起来学习下EDIUS 3D转场自定义设置吧! 1.首先我们还是做好自定义转场的准备工作. ...
- 关于transform的3D变形函数
继续transform的3D用法: translate3d(x,y,z)定义3D转换 transformX(x)只用x轴的值进行转换: transformY(y)只用y轴的值进行转换: transfo ...
- 基于jQuery和CSS3炫酷图片3D旋转幻灯片特效
在线预览 源码下载 iPresenter是一款效果非常炫酷的jQuery和CSS3 3D旋转幻灯片特效插件.你可以使用它来制作产品展示.图片画廊或者各种幻灯片和轮播图特效.这款幻灯片插件的特点有: ...
- 2.纯 CSS 创作一个矩形旋转 loader 特效
原文地址:2.纯 CSS 创作一个矩形旋转 loader 特效 扩展后地址:https://scrimba.com/c/cNJVWUR 扩展地址:https://codepen.io/pen/ HT ...
- 1.纯 CSS 创作一个按钮文字滑动特效 + 弹幕(残缺)
原文地址:1# 视频演示如何用纯 CSS 创作一个按钮文字滑动特效 扩展后地址:https://scrimba.com/c/cJkzMfd HTML代码: <html> <head& ...
随机推荐
- OpenGL ES3使用MSAA(多重采样抗锯齿)的方法
昨晚花费了我2个多小时的时间终于把OpenGL ES3.0中的MSAA给搞定了.在OpenGL ES2.0中,Khronos官方没有引入标准的MSAA全屏抗锯齿的方法,而Apple则采用了自己的GL_ ...
- js 跳转到 百度指定地址定位点
js 跳转到 百度指定地址定位点 http://api.map.baidu.com/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦&output=html&s ...
- sqllite 学习-1
C# SQLite 数据库操作学习: https://www.cnblogs.com/leemano/p/6578050.html SQLite 之 C#版 System.Data.SQLite 使用 ...
- 解决 Win10 系统新建文件夹后需手动刷新才能显示
摘自:https://blog.csdn.net/weixin_44447687/article/details/100702968 1.点击开始菜单,选择“运行”功能,然后在运行打开框中输入 reg ...
- Promise.resolve的作用
Promise.resolve方法有下面三种形式: Promise.resolve(value); Promise.resolve(promise); Promise.resolve(thenable ...
- 【物联网】UI设计
https://designshidai.com/7337.html https://designshidai.com/24908.html http://www.qianqian-ye.com/sm ...
- js 延迟函数
1.对于 setTimeout函数 普通函数: 100ms后执行时,this指向window对象. function foo(){ setTimeout(function(){ console.log ...
- PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'exchange' in vhost '/': received 'direct
最近在搞rabbitmq,把解决问题方法记下 问题1:PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'exchange' in ...
- 雨幕——RainCurtian
今天19年10月14日,也不算是个什么特别的日子.不多能让我的这一天变得特殊的,或许就是在今天我开通了我的第一个博客吧.细想过来每一天都是那么的相似,不过是因为有了某些事情,才变得特殊起来,比如新生命 ...
- Samba访问控制smb.conf
访问控制 Samba的访问控制通过hosts allow(配置允许访问的客户端).hosts deny(配置拒绝访问的客户端)两个参数实现. 在Samba中使用hosts allow.hosts de ...