3d怎么把两个面拼接在一起_CSS3 transform打造3D立方体动态效果

点击右上方红色按钮关注“web秀”,让你真正秀起来

前言

前段时间写过一篇《CSS3实现美美哒的图片倒影效果》,里面最后一步,“我们使倒影倾斜一个角度,让整个倒影效果更具有立体效果”,不知道大家有没有联想到用倾斜,我们可以制作一个立方体呢???

今天我们就来用纯css制作一个立方体,主要用到的知识就是transform: rotate,没有了解的可以点击下方文章了解: 《CSS3中transition、transform傻傻分不清楚》

效果预览图:

4f361505044b931aac490b62c133a880.gif

CSS3实现3D水晶立方体效果

解析

立方体,是由6个面组成的,所以我们主要是操作6个面,组合成一个立方体就可以实现。

e1325e4187e9832dec0f8870c187a1d0.png

观察者方向的为z轴的正值方向

观察者方向的为z轴的正值方向

rotateX 3D空间旋转指定的角度,沿着垂直于X轴的方向顺时针旋转。 rotateY 3D空间旋转指定的角度,沿着垂直于Y轴的方向顺时针旋转。 rotateZ 3D空间旋转指定的角度,沿着垂直于Z轴的方向顺时针旋转。

第一步 - 画出前后2个面

72d1a25c0a6ae6aa78b3b4b8442b990b.png

CSS3实现3D水晶立方体效果

下面的样式,我们对整个盒子沿着垂直于X轴的方向逆时针旋转30°,Y轴逆时针旋转80°,前面元素Z轴位移100px, 后面元素Z轴位移-100px,并Y轴顺时针旋转180°。让效果看起来更明晰,有错位立体感。

/*最外层容器样式*/ .wrap{  width: 200px;  height: 200px;  margin: 150px auto;  position: relative;  } /*包裹所有容器样式*/ .cube{  width: 200px;  height: 200px;  margin: 0 auto;  /*preserve-3d 使其子元素具有3D效果*/  transform-style: preserve-3d;  transform: rotateX(-30deg) rotateY(-80deg); }  .cube div{  position: absolute;  width: 200px;  height: 200px;  opacity: 0.8; } .cube .before{  transform: rotateY(0deg) translateZ(100px);  background: red; } .cube .after{  transform: translateZ(-100px) rotateY(180deg);  background: blue; }

第二步 - 画出左右2个面

和第一步类似,同样旋转和位移这两个面,使其能够完美拼接

ccc9a512fcfc430f5bd202ddbe37ef32.png

CSS3实现3D水晶立方体效果

添加样式

.cube .left{  transform: rotateY(90deg) translateZ(100px);  background: green; } .cube .right{  transform: rotateY(-90deg) translateZ(100px);  background: yellow; }

第三步 - 画出上下2个面

依次类推,完成上下2个面。

0cd977189216bacc02f2a0c2dfccf369.png

CSS3实现3D水晶立方体效果

添加样式

.cube .top{  transform: rotateX(90deg) translateZ(100px);  background: purple; } .cube .bottom{  transform: rotateX(-90deg) translateZ(100px);  background: pink; }

第四步 - 美化

我们给每个面添加一个背景图片,然后让整个盒子旋转起来,使我们可以看到每个面的内容。

添加样式

.pic{  width: 200px;  height: 200px; } @-webkit-keyframes rotate{  from{  transform: rotateX(0deg) rotateY(0deg);  }  to{  transform: rotateX(360deg) rotateY(360deg);  } } .cube{  width: 200px;  height: 200px;  margin: 0 auto;  transform-style: preserve-3d;  transform: rotateX(-30deg) rotateY(-80deg);  -webkit-animation: rotate 20s infinite;  animation-timing-function: linear; }

最终效果图:

4f361505044b931aac490b62c133a880.gif

CSS3实现3D水晶立方体效果

公告

喜欢小编的点击关注,了解更多知识!

源码地址请点击下方“了解更多”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 导入必要的库和文件 ``` import open3d as o3d #加载点云文件 pcd1 = o3d.io.read_point_cloud("pcd1.pcd") pcd2 = o3d.io.read_point_cloud("pcd2.pcd") ``` 2.可视化初始点云 ``` o3d.visualization.draw_geometries([pcd1, pcd2]) ``` 3. 为每个点云创建变换矩阵以进行配准 ``` import numpy as np #第一个点云与参考中心的变换矩阵 p1_cent = pcd1.get_center() p1_M = np.identity(4) p1_M[:3, 3] = -p1_cent #将变换应用于第一个点云 pcd1.transform(p1_M) #第二个点云与参考中心的变换矩阵 p2_cent = pcd2.get_center() p2_M = np.identity(4) p2_M[:3, 3] = -p2_cent #将变换应用于第二个点云 pcd2.transform(p2_M) #可视化更新后的点云,以检查它们的变换是否正确。 o3d.visualization.draw_geometries([pcd1, pcd2]) ``` 4.使用ICP算法使用变换点云 ``` # 运用ICP算法进行配准 #创建ICP对象 icp_reg = o3d.pipelines.registration.registration_icp(pcd1, pcd2, 0.5, np.identity(4), o3d.pipelines.registration.TransformationEstimationPointToPoint(), o3d.pipelines.registration.ICPConvergenceCriteria(relative_fitness=1e-6,relative_rmse=1e-6, max_iteration=100)) #取决于应用程序的要求和结果,处理和定义配准结果的各种参数 reg1 = icp_reg.transformation #将第一个点云变换回中心对齐 pcd1.transform(np.linalg.inv(p1_M)) #将第二个点云变换回中心对齐 pcd2.transform(np.linalg.inv(p2_M)) #将第二个点云与第一个点云变换矩阵相乘并得出总变换矩阵 final_transform = np.matmul(np.matmul(p2_M, reg1), np.linalg.inv(p1_M)) #使用总变换矩阵变换第二个点云 pcd2_final = pcd2.transform(final_transform) #合并两个点云 joined_pcd = pcd1 + pcd2_final #可视化最终点云,以检查它们是否成功拼接 o3d.visualization.draw_geometries([joined_pcd]) ``` 这样就可以成功地使用Open3D库将两个点云拼接一起
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值