当前位置: 首页 > Web前端 > vue.js

原来3D太空行星的轨迹是这样画的

时间:2023-03-31 16:29:33 vue.js

我正在参加中秋创意贡献大赛。详情请见:中秋创意投稿大赛背景欢迎来到“前端胖头鱼”公众号,也许你从未见过面,但很有可能来不及遇见你。点击查看太阳、地球、月球3D自转点击查看3D太阳、地球、月球自转2点击查看3D太阳、地球、月球自转源码moon看着月亮,谈工作,谈理想,想想还是挺惬意的。抬头仰望天空,想知道太阳、地球、月亮的运行轨迹是如何通过css3实现的吗?来吧,本文将和你从零开始学习如何绘制3D球体,如何绘制满天繁星,如何实现行星轨迹3D地图的关键元素。行星轨道3D小球怎么画也可以点这里直接查看,效果更佳先欣赏几张图画球之前先欣赏几张图。隔着屏幕,小松鼠《冰河世纪》似乎都那么敏感。枪穿过监视器的鼻子?摸摸狗的头,画一个大家都知道的圆圈。看完上图,聪明的你一定猜到了。我们只需要在2D平面上加竖线几天,3D的感觉就出来了。html

CSS。球容器{宽度:200px;高度:200px;边界半径:50%;视角:500px;位置:相对;}.ball{变换样式:保留3d;位置:绝对;宽度:100%;高度:100%;}.ball-bg{宽度:100%;100%;位置:绝对;边界半径:50%;background-image:linear-gradient(45deg,#ff9a9e0%,#fad0c499%,#fad0c4100%);}通过上面的代码,我们得到的是一个粉红色的圆圈,接下来试试加几行,可以吗添加4条垂直线以获得3D感觉。球线{宽度:100%;高度:100%;背景颜色:透明;边框:纯色0.5px#fad0c4;边界半径:50%;边距:-0.5px;位置:ab溶质;box-sizing:border-box;}.??ball-line:nth-of-type(1){transform:rotateY(45deg);}.ball-line:nth-of-type(2){transform:rotateY(90deg);}.ball-line:nth-of-type(3){transform:rotateY(135deg);}.ball-line:nth-of-type(4){transform:rotateY(180deg);}让线不要太粗,影响整体的球感。我们添加了0.5px,看起来有点3D。最后让小球旋转,尽量让小球旋转@keyframesrotate{0%{transform:rotateY(0)rotateX(0);}100%{变换:旋转Y(360deg)旋转X(360deg);}}.ball{/*添加动画*/动画:旋转10s无限线性;}旋转的3D球随便画一个,再画一个星空。闭上眼睛,想想记忆中的夜空。闪烁的星星是那么平静安详,像明亮的眼睛和闪闪发光的灯火。银灯dom结构
keycss@keyframesshine{0%{opacity:0.5;}100%{不透明度:1;}}keyjs考虑到星星数量较多,最好有不同的宽高。这里我们使用js动态生成starsconst$=document.querySelector.bind(document);const$body=$("body");constcanvasWidth=$body.offsetWidth;constcanvasHeight=$body.offsetHeight;//使用自定义样式创建一个domconstcreateElement=(styles,tag="div")=>{constele=document.createElement(tag);Object.keys(styles).forEach((attr)=>{ele.style[attr]=styles[attr];});返回元素;};constdrawStars=()=>{//创建文档片段,缓存dom片段,reducedom操作const$starFragment=document.createDocumentFragment();const$stars=$(".stars");/*//创建任意数量的星星1.不同的位置2.不同的大小3.不同的动画延迟*/constcreateStar=(size,num)=>{while(num--){constleft=Math.random()*(canvasWidth-size)+"px";consttop=数学。随机的()*(canvasHeight-尺寸)+"px";constwidth=size+"px";常量延迟=数学。随机()*5;conststyles={width,height:width,left,top,borderRadius:"50%",position:"absolute",background:"#ffffff",animation:`shine2slinear${delay}sinfinite`,};const$star=createElement(样式);$starFragment.appendChild($star);}};//创建不同大小的星星createStar(1,500);创造之星(2,40);创造之星(3,30);创造之星(4,20);$stars.appendChild($starFragment)};绘制星星();太阳、地球、月球运动全景图有了星空背景和3D球体的基础,我们就可以开始绘制真实的轨迹图了!!!先画出自己旋转的太阳。太阳无疑是最亮的幼崽,先把他画出来吧。.ball-container{宽度:70px;高度:70px;显示:flex;align-items:center;justify-content:center;position:absolute;left:50%;margin-left:-35px;top:-35px;animation:rotateContainer20slinearinfinite;}.ball{变换样式:保留-3d;border-radius:50%;width:100%;height:100%;animation:rotateSelf10sinfinitelinear;position:absolute;}.ball-light{width:100%;height:100%;border-radius:50%;position:absolute;}.ball-line{width:100%;height:100%;background-color:transparent;border:solid0.5px#fcd670;border-radius:50%;margin:-1px;position:absolute;}.ball-line:nth-of-type(1){transform:rotateY(45deg);}.ball-line:nth-of-type(2){transform:rotateY(90deg);}.ball-line:nth-of-type(3){transform:rotateY(135deg);}.ball-line:nth-of-type(4){transform:rotateY(180deg);}.sun{变换样式:保留3d;position:absolute;}.sun.ball-container{width:100px;高度:100px;动画:无;}.sun.ball-light{背景图像:线性渐变(向右,#ff81770%,#ff867a0%,#ff8c7f21%,#f9918552%,#cf556c78%,#b12a5b100%);box-shadow:00100px#ff8177;}.sun.ball-line{border-color:#ff8177;}/*球本身的旋转*/@keyframesrotateSelf{0%{transform:rotateY(0)rotateX(0);}100%{变换:旋转Y(360deg)旋转X(360deg);}}地球绕着太阳转地球绕着太阳转需要考虑两个关键点:1椭圆轨道2.地球在椭圆轨道上旋转地球绕轨道运行怎么能画出这样的轨道图呢?其实可以看做是一个额圈沿X轴旋转一定角度,让它看起来更宽敞第一步:先画额圈。搜索{变换样式:保留3d;位置:相对;宽度:50vw;身高:50vw;边框:纯色0.5px#ffffff;边界半径:50%;box-shadow:0022px#fff;}第二步:绕X轴旋转.earch{transform-style:preserve-3d;位置:相对;宽度:60vw;身高:60vw;边框:纯色0.5px#ffffff;边界半径:50%;变换:旋转X(75度);box-shadow:0022px#fff;}画旋转地球的画法和太阳没有太大区别。这里主要想着怎么画一个地球绕着刚才画的轨迹运动,大家在公园里应该都玩过这个设备吧。人站在上面,转动最下面的罗盘,罗盘转,人就跟着转。应用在这里,轨迹可以比作有脚的指南针,人就是地球。让轨迹移动,球仍然相对于轨迹。当轨迹移动时,球自然会呈现出在移动。/*轨道旋转*//*因为需要保持倾斜角度,初始状态和最终状态为rotateX(75deg)*/@keyframesrotateTrack{0%{transform:rotateX(75deg)rotateZ(0);}100%{变换:rotateX(75deg)rotateZ(360deg);}}/*消除轨道旋转对元素*/@keyframesrotateContainer{0%{transform:rotateZ(0)rotateX(-75deg);}100%{变换:旋转Z(-360deg)旋转X(-75deg);}}.earch{transform-style:preserve-3d;位置:相对;宽度:60vw;身高:60vw;边框:纯色0.5px#ffffff;边界半径:50%;变换:旋转X(75度);动画:rotateTrack20s线性无限;box-shadow:0022px#fff;}.earch.ball-light{background-image:linear-gradient(totop,#37ecba0%,#72afd3100%);框阴影:001000px#72afd3;}.earch.ball-line{border-color:#72afd3;}这样旋转的地球也画好了!最后只剩下绕着地球转的月亮了。月球绕太阳转的整体思路和地球绕月球转的想法类似,但需要注意的是,月球绕地球转的速度要大于地球绕地球转的速度。太阳。注意消除地球轨道自转对月球整体的影响/*该层是为了消除父元素earth和旋转动画的影响*/.moon-container{width:400px;高度:400px;位置:绝对;左:50%;左边距:-200px;顶部:-200px;边界半径:50%;animation:moonTrack20slinearinfinite;}/*绘制轨道并旋转*/.moon{width:100%;高度:100%;边框:纯色0.5px#ffffff;框阴影:0022px#fff;边界半径:50%;位置:绝对;左:0;顶部:0;动画:rotateTrack4s线性无限;更快的旋转速度*/.moon.ball-container{width:50px;高度:50px;顶部:-25px;左边距:-25px;animation:rotateContainer4slinearinfinite;}/*加速旋转动画*/.moon.ball{width:50px;高度:50px;动画:rotateSelf5s无限线性;}.moon.ball-light{背景图像:线性渐变(-20deg,#ddd6f30%,#faaca8100%,#faaca8100%);box-shadow:001000px#ddd6f3;}.moon.ball-line{border-color:#ddd6f3;}早点睡吧,祝大家中秋节快乐,晚安,我打算写另一篇关于玉兔飞月3D实现的文章。3D与css3!