android 3d魔方 代码,css实现3d立体魔方的示例代码

今天来做一个简单的3d魔方

先看效果图吧!把这个看会了,一些网上的3d的相册你就都会了

06d1dd82b633ea9867efc67966b59877.gif

一、我们先准备好们的html代码

3d立体魔方

好了我们html代码就准备完成了,首先我们要有一个3d的思维,在大脑中现象一下魔方是什么样子的,不就是用六个面组成的吗。

二、添加css样式

*{

margin:0; /* 默认样式去掉边距 */

padding:0;

}

div{ /* div通用样式 设置高宽*/

width: 300px;

height: 300px;

opacity:0.5;/*透明度 半透明*/

}

.top{ /* 通过类名设置颜色下面都是设置颜色*/

background-color:brown;

}

.bottom{

background-color:blueviolet;

}

.left{

background-color:blanchedalmond;

}

.right{

background-color:cadetblue;

}

.after{

background-color:chocolate;

}

.before{

background-color:cyan;

}

好了到了这一步就相当与把地基打好了,我们开始盖楼了

aa5dff0332a95eda3c6f7c5640d14452.png

你看到的必须是这个效果注意我这里是缩小了,你应该也是和我一样方块都是挨着的,像柱子一样堆着的。这下我们就要开始像纸片一样把他们拼凑起来了。

2、让div重合

div{

width: 300px;

height: 300px;

position: absolute;/*在div的通用样式中加上绝对定位*/

}

body{/*下面这一步是居中让所有的div在屏幕上居中*/

height: 100vh;

width: 100vw;

display: flex;

justify-content: center;

align-items: center;

}

619b8129553d07148a8c465b22accd86.png

现在你们看到的是这个效果,明明6个方块怎么只有一个,其实并不是,只是其他的div在这个div的后面,前面这个div挡住我们的视线了所以看不见。

三、开启3d空间

body{

transform-style: preserve-3d; /*只需要这一条代码开启3d空间*/

height: 100vh;

width: 100vw;

display: flex;

justify-content: center;

align-items: center;

}

在把div拼凑起来

.top{

background-color:brown;

transform:rotateX(90deg) translateZ(150px); /*先旋转在偏移*/

}

.bottom{

background-color:blueviolet;

transform:rotateX(-90deg) translateZ(150px);

}

.left{

background-color:blanchedalmond;

transform:rotateY(-90deg) translateZ(150px);

}

.right{

background-color:cadetblue;

transform:rotateY(90deg) translateZ(150px);

}

.after{

background-color:chocolate;

transform:rotateY(180deg) translateZ(150px);

}

.before{

background-color:cyan;

transform:rotateY(0deg) translateZ(150px);

}

b26f64ab381a362e650e65ed726268cb.png

你们看到的应该还是这个样子,其实我们已经完成了魔方的拼接,只是魔方是平放着的我们看不出来,所以做一个动画旋转一下就ok了。你给div加上一点文字更容易观察

四、动画旋转

3d立体魔方

*{

margin:0;

/* 默认样式去掉边距 */

padding:0;

}

div{

width: 300px;

height: 300px;

position: absolute;

opacity: 0.5;

text-align: center;

line-height: 300px;

}

body{

transform-style: preserve-3d;

height: 100vh;

animation: fram1 10s ease; /*引用动画*/

width: 100vw;

display: flex;

justify-content: center;

align-items: center;

}

.top{

background-color:brown;

transform:rotateX(90deg) translateZ(150px);

}

.bottom{

background-color:blueviolet;

transform:rotateX(-90deg) translateZ(150px);

}

.left{

background-color:blanchedalmond;

transform:rotateY(-90deg) translateZ(150px);

}

.right{

background-color:cadetblue;

transform:rotateY(90deg) translateZ(150px);

}

.after{

background-color:chocolate;

transform:rotateY(180deg) translateZ(150px);

}

.before{

background-color:cyan;

transform:rotateY(0deg) translateZ(150px);

}

@keyframes fram1{/*动画旋转X轴与Y轴*/

0%,100%{

transform: rotateY(0deg) rotateX(0deg);

}

50%{

transform: rotateY(180deg) rotateX(180deg);

}

}

1
2
3
4
5
6

好了全部代码都在这了,我已经带着你做完了,如果你想做一个3d相册的话,直接给div加上背景图就好background-color替换为background-image

a28d4cc46d01bb74edca3b3a0c86f772.png

五、总结

让我们讲讲细节吧!当让这也是最终要的,希望你看到。拼接的过程你们只看到了代码,首先我们制作了六个width:300px与height:300px的div,我们通过position:absolute让他们叠加在了一起,你只需要记住绝对定位会让层级重叠就好了z-inde:可以控制他的层级,好了到最重要的地方了,transform:rotateX(90deg) translateZ(150px);这里为什么我是先旋转在偏移呢?

77236336efcb88d0b9736c9d6eb808d5.png

总之一句话就是,你右转在向前进 和 你前进在右转你到达的位置是不一样的

就是这个原理。如果你明白了就算是入门了3d还有很多好玩的。等待你慢慢的摸索。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

//存为MoFang.java import java.applet.Applet ; import java.awt.*; import com.sun.j3d.utils.applet.MainFrame ; import java.awt.BorderLayout ; import com.sun.j3d.utils.universe.SimpleUniverse ; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.behaviors.mouse.*; import com.sun.j3d.utils.behaviors.keyboard.*; import com.sun.j3d.utils.picking.behaviors.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.image.TextureLoader ; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame.*; import javax.swing.*; class mySimpleUniverse extends Applet { BranchGroup createSceneGraph(Canvas3D canvas) { //System.out.print("**1**"); //创建变换组,无用的t3D Transform3D t3d=new Transform3D(); TransformGroup trans=new TransformGroup(t3d); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //创建分枝组 BranchGroup objRoot=new BranchGroup(); //测试 //SomeShape3D.book3D( this, trans); SomeShape3D.addText3DDonghua(trans,"魔方",new Point3f(-7.0f,6.0f,6.0f),0.1f,new Color3f(1.0f,0.0f,0.0f),1); //初始化数据结构 System.out.println("\n\n载入方块,并向变换组中加入每个方块的坐标系和方块..."); for(int i=0;i<=2;i++) for(int j=0;j<=2;j++) for(int k=0;k<=2;k++) { int[] p; p=Position.getPxyzFromPositionAy(i,j,k,MoFang.positionArray); MoFang.blockArray[i][j][k]=new Block(i,j,k,p[0],p[1],p[2],trans,t3d,objRoot,this); } System.out.println("加入每个方块的坐标系和方块,完成.\n"); //创建大坐标轴,自动加到主坐标系 SomeShape3D.zuoBiaoZhuBigXShape3D(trans); SomeShape3D.zuoBiaoZhuBigYShape3D(trans); SomeShape3D.zuoBiaoZhuBigZShape3D(trans); //创建边界对象 BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100); //创建鼠标pick行为,加到分支组objRoot PickRotateBehavior pickRotate=new PickRotateBehavio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值