魔方java3d,CSS3 制作魔方 - 相关立体样式

最好的实践,就是给定一个实践的目标去实践。

目标:利用 CSS3 的一些特性,绘制一个魔方,要可以玩转的那种,即上下左右每一层都可以独立旋转。效果如下:

1c545744c9f8d54be4bc6f125de73c9e.png

为了完成此效果,将使用到以下相关概念和样式:坐标、3D呈现、平移、旋转。

(1)坐标

屏幕的起点坐标是(0,0,0),往右递增为 x 方向,使用 left 属性表示,往下走,递增为 y 方向,使用 top 属性表示。而 3D 场景中 z 正方向(递增)为走出屏幕到你面前的方向。

strip

第二种方式

使用属性 transition 指定一个属性和一个时长,只要这个属性值发生变化,它就按规定的时长进行渐变形成动画。

我们回到平移的那个 square,为其添加 transition 属性,指明 transform,时长设置为 5s,即5秒。

.square {

position:absolute;

width:100px; height:100px;

background:green;

top:0; left:0;

transform:translateZ(-200px);

/* 指定渐变属性,时长 */

transition: transform 5s;

}

此时,我们来改变它的 transform 平移值:

setTimeout(

function(){

document.querySelector(".square").style.transform = "translateZ(200px)";

},

1000

);

效果如下,多么优雅的一个变化过程,软着陆。

0644ea30028d6102a27d8df090c9e936.png

(6)小结

熟悉以上了这些概念与特性,就有了达成魔方目标的工具。更多特性若有兴趣,可进一步加深了解,想象空间很大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//存为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、付费专栏及课程。

余额充值