DataGear開(kāi)發(fā)基于three.js的3D數(shù)據(jù)可視化看板的詳細(xì)代碼
DataGear專(zhuān)業(yè)版 1.0.0 已發(fā)布,歡迎試用! http://datagear.tech/pro/
DataGear 支持采用原生的HTML、JavaScript、CSS制作數(shù)據(jù)可視化看板,也支持導(dǎo)入由npm、vite等前端工具構(gòu)建的前端程序包。得益于這一特性,可以很容易制作基于three.js的3D數(shù)據(jù)可視化看板。
首先,參考three.js的官方教程 https://threejs.org/docs/index.html#manual/en/introduction/Installation 編寫(xiě)3D前端源碼包。
源碼包中包含兩個(gè)文件:index.html、main.js,如下所示:
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="module" src="/main.js"></script>
<script type="module">
import { ThreeRenderer } from "/main.js";
window.ThreeRenderer = ThreeRenderer;
</script>
<div style="padding:1rem;">
<button onclick="threeRender()">渲染</button>
<button onclick="threeUpdate()">更新</button>
<p></p>
<div id="threeChart" style="width:300px;height:300px;"></div>
</div>
<script>
var renderer;
function threeRender(){
renderer = new ThreeRenderer(document.getElementById("threeChart"));
renderer.render();
}
function threeUpdate(){
renderer.update(0xff0000);
}
</script>
</body>
</html>
index.html是下述main.js中定義3D組件的調(diào)試頁(yè)面,點(diǎn)擊【渲染】、【更新】按鈕可調(diào)試3D組件效果。
main.js
import * as THREE from 'three';
export function ThreeRenderer(dom)
{
this.dom = dom;
this.render = function()
{
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 75, this.dom.clientWidth / this.dom.clientHeight, 0.1, 1000 );
const renderer = new THREE.WebGLRenderer();
renderer.setSize( this.dom.clientWidth, this.dom.clientHeight );
this.dom.appendChild( renderer.domElement );
const geometry = new THREE.BoxGeometry( 1, 1, 1 );
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );
camera.position.z = 5;
function animate() {
requestAnimationFrame( animate );
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render( scene, camera );
}
animate();
this.cube = cube;
};
this.update = function(hexColor)
{
const cube = this.cube;
const material = cube.material;
const color = material.color;
color.setHex(hexColor);
};
}
main.js定義了一個(gè)ThreeRenderer3D組件類(lèi),大部分代碼由three.js官方教程拷貝,它的render函數(shù)繪制一個(gè)簡(jiǎn)單的3D立方體,update函數(shù)可以更新這個(gè)3D立方體的顏色。
調(diào)試:
npm install --save three npm install --save-dev vite npx vite
執(zhí)行npx vite build將它們構(gòu)建為前端程序包:
index.html assets/index-*.js
先將上述前端程序包壓縮為ZIP包后導(dǎo)入為DataGear看板,然后將index.html中的
<script type="module" crossorigin src="/assets/index-*.js"></script>
修改為采用相對(duì)路徑引入方式:
<script type="module" crossorigin src="assets/index-*.js"></script>
此時(shí),點(diǎn)擊【保存并展示】看板后,打開(kāi)展示頁(yè)面,點(diǎn)擊【渲染】、【更新】按鈕,將可以看到3D效果,如下所示:

下面,我們將上述3D組件制作為DataGear自定義圖表,可以根據(jù)數(shù)據(jù)集返回的數(shù)值,更新其顏色。
首先,新建SQL數(shù)據(jù)集:
名稱:最新指標(biāo)值
SQL:
SELECT D_VALUE AS VALUE FROM t_date_value ORDER BY d_date DESC LIMIT 0, 1
上述SQL從
t_date_value表中查詢最新日期的指標(biāo)值
然后,新建一個(gè)關(guān)聯(lián)上述數(shù)據(jù)集的自定義類(lèi)型的圖表;
名稱:最新指標(biāo)值
圖表類(lèi)型:自定義
數(shù)據(jù)集:最新指標(biāo)值
更新間隔:2000毫秒
上述圖表每隔2秒更新一次數(shù)據(jù)
最后,修改剛才導(dǎo)入看板的index.html,添加自定義圖表渲染器,當(dāng)t_date_value表中最新指標(biāo)值大于等于80時(shí),將3D模型渲染為紅色,否則,渲染為綠色。
修改后的index.html如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="assets/index-*.js"></script>
<script>
//自定義圖表渲染器
var chartRenderer =
{
render: function(chart)
{
var internal = new ThreeRenderer(chart.element());
internal.render();
chart.internal(internal);
},
update: function(chart, results)
{
var chartDataSet = chart.chartDataSetMain();
var result = chart.resultOf(results, chartDataSet);
var value = chart.resultCell(result, "VALUE", 0);
var color = (value >= 80 ? 0xff0000 : 0x00ff00);
var internal = chart.internal();
internal.update(color);
}
};
</script>
</head>
<body>
<div style="padding:1rem;text-align:center;">
<h1>DataGear制作3D圖表</h1>
<h5>http://www.datagear.tech</h5>
<div style="display:inline-block;width:300px;height:300px;margin:1rem;"
dg-chart-renderer="chartRenderer" dg-chart-widget="【圖表ID】"></div>
<div style="display:inline-block;width:300px;height:300px;margin:1rem;"
dg-chart-renderer="chartRenderer" dg-chart-widget="【圖表ID】"></div>
</div>
</body>
</html>上述
assets/index-*.js應(yīng)替換為實(shí)際的JS文件名,【圖表ID】應(yīng)替換為實(shí)際的最新指標(biāo)值圖表的ID
點(diǎn)擊【保存并展示】,即可看到3D圖表效果,如下圖所示:

官網(wǎng)地址:http://www.datagear.tech
源碼地址:
Gitee:https://gitee.com/datagear/datagear
Github:https://github.com/datageartech/datagear
到此這篇關(guān)于DataGear開(kāi)發(fā)基于three.js的3D數(shù)據(jù)可視化看板的詳細(xì)代碼的文章就介紹到這了,更多相關(guān)DataGear數(shù)據(jù)可視化看板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
極力推薦10個(gè)短小實(shí)用的JavaScript代碼段
這篇文章主要為大家極力推薦10個(gè)短小實(shí)用的JavaScript代碼段,幫助大家節(jié)省大量開(kāi)發(fā)時(shí)間,感興趣的小伙伴們可以參考一下2016-08-08
JS使用Prim算法和Kruskal算法實(shí)現(xiàn)最小生成樹(shù)
這篇文章主要為大家詳細(xì)介紹了JS使用Prim算法和Kruskal算法實(shí)現(xiàn)最小生成樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
JavaScript+html5 canvas繪制繽紛多彩的三角形效果完整實(shí)例
這篇文章主要介紹了JavaScript+html5 canvas繪制繽紛多彩的三角形效果,以完整實(shí)例形式分析了html5的canvas繪制圖形的相關(guān)技巧,需要的朋友可以參考下2016-01-01
jsp js鼠標(biāo)移動(dòng)到指定區(qū)域顯示選項(xiàng)卡離開(kāi)時(shí)隱藏示例
jsp js 鼠標(biāo)移動(dòng)到指定區(qū)域顯示選項(xiàng)卡示例,離開(kāi)時(shí)隱藏,具體實(shí)現(xiàn)代碼如下,感興趣的朋友可以了解下哈,希望對(duì)你有所幫助2013-06-06

