ThreeJS之3D柱形图

这篇具有很好参考价值的文章主要介绍了ThreeJS之3D柱形图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        学习threejs第二篇,3D柱形图练习,本文参考了网上的实现方式,用html方式进行了实现。先上效果图:

threejs 图表,ThreeJs,学习笔记,javascript,html,前端

关键代码:

 数据准备

let data = [[65, 20],[60, 10],[70, 10],[20, 20],[50, 30],[10, 40],];

柱形图分为上下两部分,因此使用了二维数组,表示上半部分和下半部分。

生成柱形图

通过对数据源的循环,以此生成矩形图,图表使用顶点颜色,同时设置材料的vertexColors属性。

			let barWidth = Math.floor(WIDTH / data.length * 0.691 * 0.70721);
			data.forEach((d, i) => {
				let group = new THREE.Group()
				let box1 = new THREE.BoxBufferGeometry(barWidth, HEIGHT / maxY * d[0], barWidth, 1, 1, 1)
				let box2 = new THREE.BoxBufferGeometry(barWidth, HEIGHT / maxY * d[1], barWidth, 1, 1, 1)
				box1.computeBoundingBox();
				box2.computeBoundingBox();
				let count = box1.attributes.position.count;
				let color1 = new THREE.Color()
				let color2 = new THREE.Color()
				box1.addAttribute('color', new THREE.BufferAttribute(new Float32Array(count * 3), 3));
				box2.addAttribute('color', new THREE.BufferAttribute(new Float32Array(count * 3), 3));
				let colors1 = box1.attributes.color;
				let colors2 = box2.attributes.color;
				for (let i = 0; i < count; i++) {
					let x = box1.attributes.position.getX(i);
					let y = box1.attributes.position.getY(i);
					let z = box1.attributes.position.getZ(i);
					//console.log(i, x, y, z)
					if (y > 0) {
						color1.setHex(0x1C8CFF)
						color2.setHex(0x00FFC2)
					} else {
						color1.setHex(0x093783)
						color2.setHex(0x117B5C)
					}
					colors1.setXYZ(i, color1.r, color1.g, color1.b)
					colors2.setXYZ(i, color2.r, color2.g, color2.b)
				}

此处box1.addAttribute,与threejs的版本有关,新版本中移除了该方法。

最后渲染,完工。

学习threejs的第二天,做个简单的记录。

代码地址:

 threejs实现的3D柱形图-Javascript文档类资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-617059.html

到了这里,关于ThreeJS之3D柱形图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于ThreeJS的3D地球

    第一次接触threeJS,说实话,挺脑瓜子疼的! 功能:3D地球(纹理贴图),地球上添加标记点(经纬度),点击标记点弹出对应的信息框,地球入场动画,相机移动动画等。 先开效果图吧 一:添加必要的依赖 二:组件代码 三:父组件中的代码 四:项目gitee地址 mythree: 基于

    2024年02月12日
    浏览(36)
  • Threejs 3D模型居中

    项目开发中难免会遇到客户导出的3D模型中心点并不在坐标中心,这时候直接渲染这个模型会发现模型位置会有所偏移 引用:Three.js模型居中

    2024年02月13日
    浏览(48)
  • ThreeJS-3D教学七-交互

    在threejs中想要选中一个物体,点击或者鼠标悬浮,又或者移动端的touch事件,核心都是通过new THREE.Raycaster完成的。这里用到了一个概念,即我们点击时的 屏幕坐标 转换为 three中的3D坐标。 先看效果图: 代码是: 具体思路代码中都有注释,实在不懂也没关系,函数一封装先

    2024年02月08日
    浏览(41)
  • ThreeJS-3D教学五-材质

    我们在ThreeJS-3D教学二:基础形状展示中有简单介绍过一些常用的材质,这次我们举例来具体看下效果: 代码是这样的: 图片我依次放进来,方便大家本地看效果 stone.jpg stone-bump.jpg normal2.jpg normal1.jpg earth.jpg earthSpec.png 具体的注释也都放代码里了!感觉不错的点个赞,光白嫖

    2024年02月07日
    浏览(44)
  • Threejs实现3d地球记录(4)

    Three.js基础曲线函数有三种: 样条曲线:在三维空间中设置5个顶点,输入三维样条曲线CatmullRomCurve3函数作为参数,然后返回更多个顶点,通过返回的顶点数据,构建一个几何体,然后绘制出来一条沿着5个顶点的光滑样条曲线。 三维三次贝赛尔曲线: 由起点、终点、及两个

    2024年02月02日
    浏览(43)
  • 如何使用 ThreeJs 以 glTF、FBX 和 OBJ 文件格式加载 3D 模型,使用 ThreeJS 加载和显示带有纹理的 3D 模型

    在本文中,我展示了如何使用 ThreeJS 在 Web 视图中加载 3D 模型。Three.js 是一个跨浏览器的 JavaScript 库和应用程序编程接口,用于使用 WebGL 在 Web 浏览器中创建和显示动画 3D 计算机图形。加载不完整的原因有很多,例如纹理和材质渲染不正确。 创建场景 渲染场景 动画立方体

    2023年04月08日
    浏览(50)
  • ThreeJS-3D教学六-物体位移旋转

    之前文章其实也有涉及到这方面的内容,比如在ThreeJS-3D教学三:平移缩放+物体沿轨迹运动这篇中,通过获取轨迹点物体动起来,其它几篇文章也有旋转的效果,本篇我们来详细看下,另外加了tween.js知识点,tween可以很好的协助 three 做动画,与之相似的还有 gsap.js方法类似。

    2024年02月04日
    浏览(45)
  • ThreeJS-3D教学一:基础场景创建

    Three.js 是一个开源的 JS 3D 图形库,用于创建和展示高性能、交互式的 3D 图形场景。它建立在 WebGL 技术之上,并提供了丰富的功能和工具,使开发者可以轻松地构建令人惊叹的 3D 可视化效果。 Three.js 提供了一套完整的工具和 API,用于创建和管理 3D 场景、几何体、纹理、光照

    2024年02月07日
    浏览(54)
  • 使用 Threejs 从基础开始构建 3D 地球

    演示效果 git源码地址 场景创建 相机 坐标辅助器 状态检测器 渲染器 轨道控制器 粒子星空 地球和大气层创建 创建星轨环 创建卫星移动轨迹 创建卫星 二维经纬度坐标转三维球坐标 创建标点 绘制飞线 在地球上绘制标点和飞线 一般在执行完上述方法后能看到如下图的效果:

    2024年01月25日
    浏览(59)
  • 数字孪生平台3d模型制作-threejs

    threejs简化和封装了wegGL开发过程。 那么,js呢,它能写高效的3D程序吗?几年前写3D最好的世c++,js的计算能力随谷歌vs引擎得到增强。浏览器对threejs的支持,谷歌最佳。 thingjs threejs unity3D 物联网可视化平台 轻量级软件库 游戏引擎 支撑数十栋建筑园应用级,可支撑从地球到城

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包