三维坐标轴html实现,CSS3三维变形,其实很简单!

原标题:CSS3三维变形,其实很简单!

本文主要内容一、前言二、坐标轴系统三、透视与变形风格四、3D变形函数五、实例展示六、总结一、前言

所谓的三维变形,无外乎就是在二维平面的基础上进而实现三维立体空间的形变。上两周我们详细的讲解了二维变形的相关操作,本文将详细的介绍关于transform3D变形的内容,但是仍然以2D变形为基础。期中3D变形还涉及到的属性有transform、transform-style、perspective。

二、坐标轴系统

在了解其他相关的操作之前,首先要了解的是三维坐标系统。3D变形与2D变形的最大不同就在于其参考的坐标轴不同,2D变形的坐标轴是平面的,只存在X轴和Y轴,而3D变形的坐标轴则是X、Y、Z三条轴组成的立体空间,X轴正向是朝右,Y周正向是朝下,Z轴正向是朝屏幕外。如下图:

b4000f9fea79fd8ec8aab6b5884180a9.png

三、透视与变形风格

1、透视perspective

透视是transform变形3D中最重要的内容。如果不设置透视,元素的3D变形效果将无法实现。为此需要使用到这样的一个属性——perspective。

perspective属性对于3D变形来说至关重要。该属性会设置查看者的位置,并将可视内容映射到一个视面上,继而投到一个2D视平面上。如果不指定透视,则Z轴空间中的所有点将平铺到同一个2D视平面中,并且变换结果中将不存在景深概念。

上面的描述可能让人难以理解一些,其实对于perspective属性,可以简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻;反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。

其取值的情况如下:

透视perspective不可为0和负数,因为观察者与屏幕距离为0时或者在屏幕背面时是不可以观察到被透视元素的正面的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Cesium 绘制路线并实现三维漫游的示例代码,你可以根据自己的需求进行修改和扩展。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Cesium 绘制路线</title> <script src="https://cesium.com/downloads/cesiumjs/releases/1.84/Build/Cesium/Cesium.js"></script> <link href="https://cesium.com/downloads/cesiumjs/releases/1.84/Build/Cesium/Widgets/widgets.css" rel="stylesheet"> <style> #cesiumContainer { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; position: absolute; } #toolbar { position: absolute; top: 10px; left: 10px; background-color: rgba(255,255,255,0.8); padding: 10px; border-radius: 5px; box-shadow: 1px 1px 3px rgba(0,0,0,0.5); z-index: 1; } </style> </head> <body> <div id="cesiumContainer"></div> <div id="toolbar"> <button onclick="drawRoute()">绘制路线</button> <button onclick="startTour()">开始漫游</button> <button onclick="stopTour()">停止漫游</button> </div> <script> var viewer = new Cesium.Viewer('cesiumContainer', { animation: false, baseLayerPicker: false, fullscreenButton: false, geocoder: false, homeButton: false, infoBox: false, sceneModePicker: false, selectionIndicator: false, timeline: false, navigationHelpButton: false, navigationInstructionsInitiallyVisible: false, scene3DOnly: true, shouldAnimate: true }); var route = null; var tour = null; var tourIndex = 0; var tourInterval = null; function drawRoute() { var startPoint = Cesium.Cartesian3.fromDegrees(-122.0195, 37.3318); var endPoint = Cesium.Cartesian3.fromDegrees(-122.0308, 37.3318); var positions = [startPoint, endPoint]; route = viewer.entities.add({ name: 'Route', polyline: { positions: positions, width: 5, material: Cesium.Color.RED } }); viewer.zoomTo(route); } function startTour() { if (route) { tour = route.polyline.positions.getValue(); tourInterval = setInterval(function () { if (tourIndex >= tour.length) { tourIndex = 0; } viewer.camera.lookAt(tour[tourIndex]); viewer.camera.rotate(Cesium.Cartesian3.UNIT_Z, 0.01); tourIndex++; }, 50); } } function stopTour() { clearInterval(tourInterval); } </script> </body> </html> ``` 在这个示例代码中,我们首先创建了一个 Cesium.Viewer 对象,并将其作为参数传递给 `Cesium.Viewer` 构造函数。然后,我们定义了一些变量来存储绘制的路线和漫游的路径,以及一些函数来绘制路线和实现漫游。在 `drawRoute` 函数中,我们通过 `Cesium.Cartesian3.fromDegrees` 方法创建了起点和终点的坐标,并将它们存储在一个数组中。然后,我们使用 `viewer.entities.add` 方法创建了一个名为 `Route` 的实体,并将其设置为一个红色的多段线。在 `startTour` 函数中,我们获取了路线上的所有点,并使用 `setInterval` 方法来定时更新相机位置和方向,实现三维漫游效果。最后,在 `stopTour` 函数中,我们清除了定时器,停止了漫游。 这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值