Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HT for Web自定义3D模型的WebGL应用

HT for Web自定义3D模型的WebGL应用

作者头像
HT for Web
发布于 2018-01-03 03:12:26
发布于 2018-01-03 03:12:26
73200
代码可运行
举报
文章被收录于专栏:HTHT
运行总次数:0
代码可运行

有不少朋友询问《HTML5 Web 客户端五种离线存储方式汇总》文章例子的3D表计模型是如何生成的,这个例子是通过导入3dmax设计好的表计模型,然后通过obj格式导入到HT for Web系统中进行控制,这种方式特别适合复杂模型的应用场景,但对于监控系统的很多应用其实并不需要专业的美工使用专业的3D编辑工具,完全通过HT for Web预定义的和内置自定义3D模型API就能满足很多应用,这里介绍几种场景的自定义3D模型应用。

上图是采用HT提供的createRingModel函数,通过编辑2D的多边形生成对应的环状的3D模型,对于花瓶碗杯等环形对称的物体很适合采用该函数构建。除了createRingModel外,HT的建模手册中的custommodel自定义模型例子,还采用了createExtrusionModel等更多的自定义模型API构建了一个餐桌椅和墙面的场景,其效果如下:

HT内置的基础模型也有很多参数可调节设置出多种模型效果,参见HT建模手册的如下例子:

自定义模型还可用于构建如机房、机框、板卡和端口的常见电信网管监控模型:

该EMS设备管理系统例子3D模型和Tree组件通过HT强大灵活的模型与图形的数据绑定功能,从而实现树上自定义图标和3D自定义模型的数据共享,实时一致刷新效果,以下为该EMS例子的全部JavaScript代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function init(){                                 
    dm = new ht.DataModel();                
    treeView = new ht.widget.TreeView(dm);                                                                                                 
    g3d = new ht.graph3d.Graph3dView(dm);                          
    mainSplit = new ht.widget.SplitView(treeView, g3d, 'h', 0.2);   
    
    view = mainSplit.getView();  
    view.className = 'main';
    document.body.appendChild(view);    
    window.addEventListener('resize', function (e) {
        mainSplit.invalidate();
    }, false);                         

    register2DImage();
    register3DModel();
    addModel(); 
                    
    g3d.setGridVisible(true); 
    g3d.setGridSize(30);
    g3d.setGridGap(50);
    g3d.setEye([200, 200, 600]);
    g3d.setCenter([0, 200, 0]);
    g3d.getView().style.background = '#F9F9F9';                 
    g3d.getLabel = function(data){
        return data.s('label');
    };
    dm.sm().setFilterFunc(function(data){
        return data !== wall;
    });
    treeView.setVisibleFunc(function(data){
        return data !== wall;
    });                
    treeView.expandAll();
}

function register2DImage(){
    ht.Default.setImage('ems-frame', {
        width: 18,
        height: 18,
        comps: [
            {
                type: 'rect',
                rect: [5, 4, 8, 11],
                borderWidth: 2,
                borderColor: '#34495E'
            }                         
    ]});        

    ht.Default.setImage('ems-pane', {
        width: 18,
        height: 18,
        comps: [
            {
                type: 'rect',
                rect: [0, 4, 18, 10],
                background: {func: 'style@shape3d.color'}
            }                         
    ]});     

    ht.Default.setImage('ems-block', {
        width: 18,
        height: 18,
        comps: [
            {
                type: 'circle',
                rect: [0, 2, 18, 10],
                background: {
                    func: 'attr@circleColor',
                    value: '#3498DB'                               
                }
            }, 
            {
                type: 'rect',
                rect: [4, 14, 10, 3],
                background: {
                    func: 'attr@rectColor',
                    value: '#3498DB'                               
                }
            }                           
    ]});                 
}

function register3DModel(){
    ht.Default.setShape3dModel('ems-frame', ht.Default.createFrameModel(0.1, 0, 0.1, {top: true, bottom: true, back: true}));       

    ht.Default.setShape3dModel('ems-block', [
        {
            shape3d: ht.Default.createCylinderModel(32, 0, 32, false, false, true, true),   
            r3: [Math.PI/2, 0, 0],   
            color: {
                func: 'attr@circleColor',
                value: '#3498DB'
            }     
        },
        {
            shape3d: 'box',
            s3: [1, 0.2, 1], 
            t3: [0, -0.7, 0],
            color: {
                func: 'attr@rectColor',
                value: '#3498DB'
            }
        }
    ]);                  
}

function addModel(){
    wall = new ht.Shape();
    wall.setName('Wall');
    wall.setPoints(new ht.List([
        {x: -750, y: 750},
        {x: -750, y: -750},
        {x: 750, y: -750},
        {x: 750, y: 750}
    ]));
    wall.setTall(400);
    wall.setElevation(200);
    wall.s({
        'shape.border.width': 5,
        'shape.border.color': 'rgba(20, 20, 20, 0.8)',
        'shape.background': null,    
        'all.color': 'rgba(102, 192, 218, 0.95)',
        'all.transparent': true,
        'all.reverse.cull': true
    });
    dm.add(wall);                                               

    var frame = new ht.Node();
    frame.setName('Main Frame');
    frame.setIcon('ems-frame');
    frame.s3(120, 300, 120);
    frame.p3(0, 152, 0);
    frame.s({
        'shape3d': 'ems-frame',
        'shape3d.color': '#34495E',
        'label': 'www.hightopo.com',
        'label.color': 'white',
        'label.background': '#3498DB',
        'label.position': 6,
        'label.t3': [-6, -54, 6],
        'label.r3': [0, Math.PI/4, Math.PI/2]
    });
    dm.add(frame);                                
    
    var colors = ['#9C8CE7', '#00C59D', '#A741B6', '#F5C700', '#31485F', '#F81F25', '#00B862', '#3B7DA7'];
    for(var i=0; i<6; i++){
        var pane = new ht.Node();
        pane.setIcon('ems-pane');
        pane.setName('Pane' + (i+1));
        pane.s3(108, 16, 8);                    
        pane.s({
            'shape3d': 'box',
            'shape3d.color': '#ECF0F1'
        });
        pane.setHost(frame);
        pane.setParent(frame);                     
        dm.add(pane);
        
        if(i < 2){
            for(var j=0; j<8; j++){
                var block = new ht.Node();
                block.setName('block ' + i + '*' + j);
                block.s3(8, 8, 12);                
                block.p3(-39+j*11, 1, 0);
                block.setHost(pane);
                block.setParent(pane); 
                block.setIcon('ems-block');
                block.s({
                    'shape3d': 'ems-block'
                });                       
                if(i === 1){
                    block.a({
                        'circleColor': colors[j],
                        'rectColor': '#00F2CF'
                    });
                    
                }
                dm.add(block);                                        
            }                     
        }else{
            pane.setName('Pane' + (i+1) + ' [ Empty ]');
            pane.s({
                'shape3d.color': '#BDC3C7'
            });
        }                   
        pane.p3(0, 265-i*27, 54);
    }                
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
玩转 HTML5 下 WebGL 的 3D 模型交并补
本文介绍了如何在 Houdini 中创建一个简单的程序化生成工具,该工具可以根据输入的参数自动生成相应的模型和材质。通过使用 Houdini 的节点和 Python 脚本,可以创建一个自定义的参数驱动的生成工具,从而大大提高生产效率。
HT for Web
2018/01/03
9770
玩转 HTML5 下 WebGL 的 3D 模型交并补
基于 HTML5 WebGL 的 3D 场景中的灯光效果
构建 3D 的场景除了创建模型,对模型设置颜色和贴图外,还需要有灯光的效果才能更逼真的反映真实世界的场景。这个例子我觉得既美观又代表性很强,所以拿出来给大家分享一下。 本例地址:http://www.
HT_hightopo
2018/07/09
8700
基于HT的CSG功能构建HTML5的3D书架
构造实体几何CSG全称Constructive solid geometry,是3D计算机图形学中构建模型的常用技术,可通过合并Union、相减Subtraction和相交Intersction的三种
HT for Web
2018/01/03
1.5K0
基于HT的CSG功能构建HTML5的3D书架
数百个 HTML5 例子学习 HT 图形组件 – 3D建模篇
http://www.hightopo.com/demo/pipeline/index.html 《数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇》里提到 HT 很多情况下不需
HT for Web
2018/01/03
1.1K0
数百个 HTML5 例子学习 HT 图形组件 – 3D建模篇
基于 HTML5 WebGL 的 3D “弹力”布局
分子力(molecular force),又称分子间作用力、范得瓦耳斯力,是指分子间的相互作用。当二分子相距较远时,主要表现为吸引力,这种力主要来源于一个分子被另一个分子随时间迅速变化的电偶极矩所极化
HT for Web
2018/01/03
1.5K0
基于 HTML5 WebGL 的 3D “弹力”布局
基于 HTML5 的 WebGL 技术构建 3D 场景(一)
今天和大家分享的是 3D 系列之 3D 预定义模型。 HT for Web 提供了多种基础类型供用户建模使用,不同于传统的 3D 建模方式,HT 的建模核心都是基于 API 的接口方式,通过 HT 预
HT for Web
2018/01/03
9430
基于 HTML5 的 WebGL 技术构建 3D 场景(一)
根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
在数学中,矩阵是以行和列排列的数字,符号或表达式的矩形阵列,任何矩阵都可以通过相关字段的标量乘以元素。矩阵的主要应用是表示线性变换,即f(x)= 4 x等线性函数的推广。例如,旋转的载体在三维空间是一
HT for Web
2018/01/03
1.1K0
根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
基于HT for Web的3D呈现A* Search Algorithm
本文介绍了一种基于WebGL的3D路径查找算法,该算法可用于社区、地图、游戏等应用中。该算法使用A*搜索算法,结合WebGL进行实现,具有高性能、可扩展、硬件加速等优点。同时,该算法还支持自定义网格、多种数据源、多种渲染方式等,具有广泛的应用前景。
HT for Web
2018/01/03
7500
基于HT for Web的3D呈现A* Search Algorithm
基于HTML5 Canvas的3D动态Chart图表
本文介绍了一种基于HTML5 Canvas的3D动态图表,包括图表的渲染、数据绑定、交互、动画等,并提供了详细的示例代码。同时,作者还分享了如何设置图表的样式、动画效果、3D效果等,以及如何使用HT for Web来实现这些功能。通过使用HT for Web,可以快速地创建出绚丽、易用的3D动态图表,使得数据可视化更加生动、有趣。
HT for Web
2018/01/03
2K0
基于HTML5 Canvas的3D动态Chart图表
基于 HTML5 的 WebGL 3D 版俄罗斯方块
前言 摘要:2D 的俄罗斯方块已经被人玩烂了,突发奇想就做了个 3D 的游戏机,用来玩俄罗斯方块。。。实现的基本想法是先在 2D 上实现俄罗斯方块小游戏,然后使用 3D 建模功能创建一个 3D 街机模
HT_hightopo
2018/06/04
7460
基于 HTML5 Canvas 的简易 2D 3D 编辑器
不管在任何领域,只要能让非程序员能通过拖拽来实现 2D 和 3D 的设计图就是很牛的,今天我们不需要 3dMaxs 等设计软件,直接用 HT 就能自己写出一个 2D 3D 编辑器,实现这个功能我觉得成
HT for Web
2018/01/03
2.3K0
基于 HTML5 Canvas 的简易 2D 3D 编辑器
基于 HTML5 的 WebGL 3D 智能楼宇监控系统
前言 智能监控的领域已经涉及到了各大领域,工控、电信、电力、轨道交通、航天航空等等,为了减少人员的消耗,监控系统必不可少。之前我写过一篇 2D 的智能地铁监控系统广受好评,突然觉得,既然 2D 的这么
HT_hightopo
2018/07/04
1.2K0
基于HTML5 Canvas WebGL制作分离摩托车
根据用户输入内容,撰写摘要总结。
HT for Web
2018/01/03
1.3K0
基于HTML5 Canvas WebGL制作分离摩托车
WebGL实现HTML5贪吃蛇3D游戏
js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,
HT for Web
2018/01/03
1.2K0
WebGL实现HTML5贪吃蛇3D游戏
基于 HTML5 WebGL 的 3D 网络拓扑图
本文主要介绍了如何利用HT for Web实现一个三维场景绘制和交互。首先介绍了HT for Web的简介及其主要功能,然后通过一个具体实例详细讲解了如何利用HT for Web实现一个三维场景的绘制和交互。通过这个实例,读者可以了解到HT for Web的强大的功能和灵活性,以及如何使用HT for Web来构建各种复杂的三维场景和交互。
HT for Web
2018/01/03
1.5K0
基于 HTML5 WebGL 的 3D 网络拓扑图
基于图扑 HT for Web 实现拓扑关系图
拓扑结构在计算机网络设计和通信领域中非常重要,因为它描述了网络中的设备(即“点”)如何相互连接(即通过“线”)。这种结构不仅涉及物理布局,即物理拓扑,还可以涉及逻辑或虚拟的连接方式,即逻辑拓扑。
HT for Web
2024/06/26
2520
基于 HTML5 Canvas 的 3D WebGL 机房创建
对于 3D 机房来说,监控已经不是什么难事,不同的人有不同的做法,今天试着用 HT 写了一个基于 HTML5 的机房,发现果然 HT 简单好用。本例是将灯光、雾化以及 eye 的最大最小距离等等功能在
HT for Web
2018/01/03
1.6K0
基于 HTML5 Canvas 的 3D WebGL 机房创建
基于HT for Web的3D树的实现
在HT for Web中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到指定的节点比较困难,而3D上的树状结构在
HT for Web
2018/01/03
1.1K0
基于HT for Web的3D树的实现
原 荐 WebGL 3D 电信机架实战之数据
前言 在前端中,视图层和数据层需要进行单向或者双向数据绑定,大家都已经不陌生了,有时候 2D 做的比较顺了之后,就会想要挑战一下 3D,不然总觉得痒痒的。这个 3D 机架的 Demo 我觉得非常有代表
HT_hightopo
2018/06/05
1K0
基于HT for Web矢量实现3D叶轮旋转
在上一篇《基于HT for Web矢量实现2D叶轮旋转》中讲述了叶轮旋转在2D上的应用,今天我们就来讲讲叶轮旋转在3D上的应用。 在3D拓扑上可以创建各种各样的图元,在HT for Web系统中提供了
HT for Web
2018/01/03
9860
基于HT for Web矢量实现3D叶轮旋转
推荐阅读
相关推荐
玩转 HTML5 下 WebGL 的 3D 模型交并补
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验