算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
astral3d【设计与创意】Use when building industrial 3D visualization and editing applications — large model rendering, STEP/B-Rep viewing, measurement, markup. Astral3D: industrial 3D visualization and editing framework.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: astral3d description: "Use when building industrial 3D visualization and editing applications — large model rendering, STEP/B-Rep viewing, measurement, markup. Astral3D: industrial 3D visualization and editing framework." tags:
项目地址: https://github.com/mlt131220/Astral3D(Vue3 + THREE.JS 的 WebGL 3D 引擎,npm 包名
astral3d)许可证: Apache-2.0
Astral3D 主要特性:
不同发行版(开源版 / 商业版 / 企业版)功能差异较大,本 SKILL 聚焦开源版与通用 SDK 用法。
# Web SDK(npm)
# 编辑器(如有桌面版):从官网下载
CDN:
<script src="https://cdn.jsdelivr.net/npm/astral3d/dist/astral3d.umd.js"></script>
<div id="scene" style="width:100%;height:100vh"></div>
<script type="module">
import { Viewer } from 'astral3d';
const viewer = new Viewer({
container: document.getElementById('scene'),
scene: '/scenes/factory.json', // 由编辑器导出
background: 'env/sky.hdr'
});
await viewer.load();
// 监听点击事件
viewer.on('pick', (obj) => console.log('clicked', obj.name));
</script>
| 概念 | 说明 |
|---|---|
Scene | 场景容器(场景树、灯光、相机) |
Asset | 资源(模型、纹理、HDR) |
Entity | 场景节点 |
Component | 实体组件(Transform、Mesh、Light、Animator、Script) |
Plugin | 编辑器/运行时插件 |
import { ModelLoader } from 'astral3d';
const car = await ModelLoader.load('/models/car.glb');
viewer.scene.add(car);
// 设置位置 / 旋转
car.position.set(10, 0, 0);
car.rotation.y = Math.PI / 4;
支持格式:glTF/GLB(首选)、OBJ、FBX、STL、IFC、STEP(通过 OCCT.js)。
Astral3D 通常配套桌面/Web 编辑器:
.json 场景文件 → 由 Viewer 加载import { MqttBridge } from 'astral3d';
const bridge = new MqttBridge('wss://broker:8083/mqtt');
bridge.subscribe('factory/device/+/temp', (topic, payload) => {
const id = topic.split('/')[2];
const dev = viewer.scene.findById(id);
dev.userData.temp = +payload;
dev.material.color.setHSL(0.6 - payload/100, 1, 0.5);
});
或 WebSocket:
const ws = new WebSocket('wss://server/iot');
ws.onmessage = ({ data }) => {
const { id, status } = JSON.parse(data);
viewer.scene.findById(id).visible = status === 'on';
};
viewer.on('hover', (e) => {
const obj = e.intersect?.object;
if (obj) viewer.outline(obj);
});
viewer.on('pick', (e) => {
const obj = e.intersect?.object;
viewer.popup({
target: obj,
html: `<div class="card">${obj.name} 状态:${obj.userData.status}</div>`
});
});
viewer.camera.flyTo({
position: [50, 30, 80],
target: [0, 0, 0],
duration: 2000
});
viewer.camera.firstPerson(true); // 第一人称漫游
viewer.camera.followPath('path1'); // 路径漫游
const animator = viewer.scene.findById('door').getComponent('Animator');
animator.play('open'); // 编辑器内定义的动画片段
// 时间轴 API
viewer.timeline
.add('door.position.x', { from: 0, to: 5, duration: 1000 })
.add('door.rotation.y', { to: Math.PI/2, duration: 1500 })
.play();
sensor_A1),配置交互弹窗模板factory.json 场景文件Viewer,加载场景文件MqttBridge 连接 MQTT Broker,订阅设备遥测主题ModelLoader.load() 加载模型(底层调用 OCCT.js 解析)mergeStaticunlit 材质| 问题 | 解决 |
|---|---|
| 模型加载失败 | 检查 CORS;统一用 glTF 2.0 |
| 中文按钮乱码 | 字体子集中包含 CJK |
| 实时推送延迟 | MQTT QoS 0;服务器 → 浏览器 WebSocket 直连 |
| 移动端发热 | 关闭实时阴影、降低分辨率 viewer.setPixelRatio(1) |
| 相机穿透 | 启用碰撞或限制 minDistance |
.json 场景文件作为基础,再通过 API 动态注入数据和交互——避免在代码中手动构造复杂场景树。pixelRatio 与关闭阴影。viewer.scene.findById() 定位节点 → 更新节点属性(颜色/位置/可见性)。对于新模型,优先使用 ModelLoader.load() 而非底层 Three.js API。如官方文档/仓库地址有调整,请以 znlgis.github.io 中的最新链接为准。