Project Icon

3d-force-graph-vr

3D力导向图在虚拟现实中的应用与展示

3d-force-graph-vr是一个基于Web的3D力导向图组件,专为虚拟现实环境设计。项目利用A-Frame实现VR渲染,采用d3-force-3d作为布局物理引擎。其特点包括支持异步加载大规模图数据、自定义节点和连接样式、实时数据更新等。该工具通过3D可视化技术,有效呈现复杂网络关系,为数据分析和探索提供新的可能性。

VR中的3D力导向图

NPM包 构建大小 NPM下载量

一个用于在虚拟现实中使用力导向迭代布局表示图数据结构的Web组件。 使用A-Frame进行VR渲染,使用d3-force-3d作为布局物理引擎。

另请参阅AR版本WebGL 3D版本A-Frame组件版本(aframe-forcegraph-component)

查看React绑定

示例

快速开始

import ForceGraphVR from '3d-force-graph-vr';

或使用script标签

<script src="//unpkg.com/3d-force-graph-vr"></script>

然后

const myGraph = ForceGraphVR();
myGraph(myDOMElement)
  .graphData(myData);

API参考

数据输入

方法描述默认值
graphData([data])图数据结构的获取器/设置器(语法详情见下文)。{ nodes: [], links: [] }
jsonUrl([url])直接加载图数据的JSON文件URL,作为直接指定graphData的替代方案。
nodeId([str])节点对象访问器属性,用于唯一节点ID(在链接对象的源/目标中使用)。id
linkSource([str])链接对象访问器属性,指向源节点的ID。source
linkTarget([str])链接对象访问器属性,指向目标节点的ID。target

容器布局

方法描述默认值
width([px])画布宽度的获取器/设置器。<窗口宽度>
height([px])画布高度的获取器/设置器。<窗口高度>
backgroundColor([str])图表背景颜色的获取器/设置器。#000011
showNavInfo([boolean])是否显示导航控制页脚信息的获取器/设置器。true

节点样式

方法描述默认值
nodeRelSize([num])每单位值的节点球体体积(立方像素)比率的获取器/设置器。4
nodeVal([num, strfn])节点对象访问器函数、属性或数值常量,用于节点数值(影响球体体积)。val
nodeLabel([strfn])节点对象访问器函数或属性,用于名称(显示在标签中)。name
nodeDesc([strfn])节点对象访问器函数或属性,用于描述(显示在标签下方)。desc
nodeVisibility([boolean, strfn])节点对象访问器函数、属性或布尔常量,用于决定是否显示节点。true
nodeColor([strfn])节点对象访问器函数或属性,用于节点颜色(影响球体颜色)。color
nodeAutoColorBy([strfn])节点对象访问器函数(fn(node))或属性(如'type'),用于自动按组分配颜色。仅影响没有颜色属性的节点。
nodeOpacity([num])节点球体不透明度的获取器/设置器,范围在[0,1]之间。0.75
nodeResolution([num])每个节点几何分辨率的获取器/设置器,表示为将圆周分割成多少个切片段。值越高,球体越平滑。8
nodeThreeObject([Object3d, strfn])节点对象访问器函数或属性,用于生成自定义3D对象作为图形节点渲染。应返回ThreeJS Object3d的实例。如果返回假值,将为该节点使用默认3D对象类型。默认节点对象是一个球体,大小根据val确定,样式根据color确定。
nodeThreeObjectExtend([bool, strfn])节点对象访问器函数、属性或布尔值,用于决定在使用自定义nodeThreeObject时是替换默认节点(false)还是扩展它(true)。false

链接样式

方法描述默认值
linkLabel([字符串函数])链接对象的访问器函数或属性,用于名称(显示在标签中)。name
linkDesc([字符串函数])链接对象的访问器函数或属性,用于描述(显示在标签下方)。desc
linkVisibility([布尔值字符串函数])链接对象的访问器函数、属性或布尔常量,用于确定是否显示链接线。值为 false 时保持链接力而不渲染它。true
linkColor([字符串函数])链接对象的访问器函数或属性,用于线条颜色。color
linkAutoColorBy([字符串函数])链接对象的访问器函数(fn(link))或属性(如 'type'),用于自动按组分配颜色。仅影响没有颜色属性的链接。
linkOpacity([数字])链接线条不透明度的获取/设置器,取值范围 [0,1]。0.2
linkWidth([数字字符串函数])链接对象的访问器函数、属性或数字常量,用于链接线宽。值为零时将渲染一个 ThreeJS Line,其宽度恒定(1px)且不随距离变化。值会四舍五入到最接近的小数以用于索引。0
linkResolution([数字])每个链接几何分辨率的获取/设置器,表示将圆柱体分成多少个径向段。较高的值会产生更平滑的圆柱体。仅适用于宽度为正值的链接。6
linkCurvature([数字字符串函数])链接对象的访问器函数、属性或数字常量,用于链接线的曲率半径。曲线表示为 3D 贝塞尔曲线,接受任何数值。值为 0 时渲染直线。1 表示半径等于线长的一半,使曲线近似半圆。对于自引用链接(source 等于 target),曲线表示为围绕节点的环,长度与曲率值成正比。正值时线条顺时针弯曲,负值时逆时针弯曲。请注意,渲染曲线仅是视觉效果,不影响底层力的行为。0
linkCurveRotation([数字字符串函数])链接对象的访问器函数、属性或数字常量,用于沿线轴应用于曲线的旋转。对直线没有影响。旋转为 0 时,曲线朝向与 XY 平面相交的方向。旋转角度(弧度)将使曲线从这个参考方向围绕"起点到终点"轴顺时针旋转。0
linkMaterial([Material字符串函数])链接对象的访问器函数或属性,用于指定自定义材质来样式化图形链接。应返回 ThreeJS Material 的实例。如果返回假值,将为该链接使用默认材质。默认链接材质是根据 coloropacity 样式化的 MeshLambertMaterial
linkThreeObject([Object3d字符串函数])链接对象的访问器函数或属性,用于生成自定义 3D 对象来渲染图形链接。应返回 ThreeJS Object3d 的实例。如果返回假值,将为该链接使用默认 3D 对象类型。默认链接对象是线条或圆柱体,大小根据 width 确定,样式根据 material 确定。
linkThreeObjectExtend([布尔值字符串函数])链接对象的访问器函数、属性或布尔值,用于确定在使用自定义 linkThreeObject 时是替换默认链接(false)还是扩展它(true)。false
linkPositionUpdate([fn(linkObject, { start, end }, link)])获取/设置在每次渲染迭代时用于更新链接位置的自定义函数。该函数接收相应的链接 ThreeJS Object3d、链接的起点和终点坐标(每个都是 {x,y,z}),以及链接的 data。如果函数返回真值,则不会为该链接运行常规位置更新函数。
linkDirectionalArrowLength([num, strfn])链接对象访问器函数、属性或数值常量,用于指示链接方向性的箭头头部长度。箭头直接显示在链接线上,指向 source > target 方向。值为 0 时隐藏箭头。0
linkDirectionalArrowColor([strfn])链接对象访问器函数或属性,用于设置箭头头部的颜色。color
linkDirectionalArrowRelPos([num, strfn])链接对象访问器函数、属性或数值常量,用于设置箭头头部沿链接线的纵向位置,表示为 01 之间的比率,其中 0 表示紧邻 source 节点,1 表示紧邻 target 节点,0.5 表示正中间。0.5
linkDirectionalArrowResolution([num])获取/设置箭头头部的几何分辨率,表示为将圆锥底部周长分成多少段。值越高,箭头越平滑。8
linkDirectionalParticles([num, strfn])链接对象访问器函数、属性或数值常量,用于设置在链接线上显示的粒子(小球体)数量。粒子沿线均匀分布,按 source > target 方向移动,可用于指示链接方向性。0
linkDirectionalParticleSpeed([num, strfn])链接对象访问器函数、属性或数值常量,用于设置方向粒子的速度,表示为每帧移动的链接长度比率。不建议使用高于 0.5 的值。0.01
linkDirectionalParticleWidth([num, strfn])链接对象访问器函数、属性或数值常量,用于设置方向粒子的宽度。值会四舍五入到最接近的小数,以用于索引目的。0.5
linkDirectionalParticleColor([strfn])链接对象访问器函数或属性,用于设置方向粒子的颜色。color
linkDirectionalParticleResolution([num])获取/设置每个方向粒子的几何分辨率,表示为将周长分成多少段。值越高,粒子越平滑。4
emitParticle(link)一种生成粒子的替代机制,此方法在特定链接内发射一个非循环的单个粒子。发射的粒子共享常规粒子属性的样式(速度、宽度、颜色)。应传递一个包含在 graphData 中的有效 link 对象作为单个参数。

交互

方法描述默认值
onNodeHover([fn])节点悬停事件的回调函数。第一个参数是节点对象(如果指针视线下没有直接节点,则为null),第二个参数是前一个节点对象(或null)。-
onLinkHover([fn])链接悬停事件的回调函数。第一个参数是链接对象(如果指针视线下没有直接链接,则为null),第二个参数是前一个链接对象(或null)。-
onNodeClick([fn])节点点击事件的回调函数。唯一参数是节点对象。-
onLinkClick([fn])链接点击事件的回调函数。唯一参数是链接对象。-

力导向引擎配置

方法描述默认值
forceEngine([str])获取/设置使用的力模拟引擎(d3ngraph)。d3
numDimensions([int])获取/设置力模拟运行的维度数(1、2 或 3)。3
dagMode([str])根据图的方向性应用布局约束。仅适用于 DAG 图结构(无循环)。可选 td(自上而下)、bu(自下而上)、lr(从左到右)、rl(从右到左)、zout(从近到远)、zin(从远到近)、radialout(向外辐射)或 radialin(向内辐射)。
dagLevelDistance([num])当启用 dagMode 时,指定不同图层深度之间的距离。根据节点数量自动推导
dagNodeFilter([fn])节点访问函数,用于指定在 DAG 布局处理过程中要忽略的节点。此访问方法接收一个节点对象,应返回一个 boolean 值,表示是否包含该节点。被排除的节点将不受约束,可自由移动到任何方向。node => true
onDagError([fn])在处理 DAG 布局的数据结构时遇到循环时调用的回调函数。图的循环部分作为节点 ID 数组包含在内,以供参考。默认情况下,遇到循环时会抛出异常。您可以重写此方法以在外部处理这种情况,并允许图继续进行 DAG 处理。如果遇到循环,则无法保证严格的图方向性,结果是尽最大努力建立层次结构。抛出异常
d3AlphaMin([num])获取/设置模拟 alpha 最小值参数,仅适用于使用 d3 模拟引擎时。0
d3AlphaDecay([num])获取/设置模拟强度衰减参数,仅适用于使用 d3 模拟引擎时。0.0228
d3VelocityDecay([num])获取/设置节点的速度衰减,用于模拟介质阻力,仅适用于使用 d3 模拟引擎时。0.4
d3Force(str, [fn])获取/设置控制 d3 模拟引擎的内部力。遵循与 d3-force-3dsimulation.force 相同的接口。默认包含三种力:'link'(基于 forceLink)、'charge'(基于 forceManyBody)和 'center'(基于 forceCenter)。可以重新配置这些力,或向系统添加新的力。此方法仅适用于使用 d3 模拟引擎时。
d3ReheatSimulation()通过将 alpha 值设置为 1 来重新激活力模拟引擎。仅适用于使用 d3 模拟引擎时。
ngraphPhysics([object])根据 ngraph 的配置对象语法指定自定义物理配置。此方法仅适用于使用 ngraph 模拟引擎时。ngraph 默认值
warmupTicks([int])获取/设置在开始渲染之前进行预热的布局引擎周期数。0
cooldownTicks([int])获取/设置在停止和冻结布局引擎之前渲染的内置帧数。无穷大
cooldownTime([num])获取/设置在停止和冻结布局引擎之前渲染的时间(毫秒)。15000
onEngineTick(fn)在模拟引擎的每个周期调用的回调函数。-
onEngineStop(fn)当模拟引擎停止且布局冻结时调用的回调函数。-
refresh()重新绘制所有节点/链接。

工具函数

| getGraphBbox() | 返回图中所有节点的当前边界框,格式为 { x: [<num>, <num>], y: [<num>, <num>], z: [<num>, <num>] }。 ||

输入 JSON 语法

{
    "nodes": [ 
        { 
          "id": "id1",
          "name": "name1",
          "val": 1 
        },
        { 
          "id": "id2",
          "name": "name2",
          "val": 10 
        },
        ...
    ],
    "links": [
        {
            "source": "id1",
            "target": "id2"
        },
        ...
    ]
}

回馈

paypal 如果这个项目对你有帮助,你想回馈一下,你随时可以给我买杯☕

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号