百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> 基于HTML5Canvas的3D渲染引擎界面以及吸附等结果的使用-
分享文章到:

基于HTML5Canvas的3D渲染引擎界面以及吸附等结果的使用-

发布时间:09/01 来源:未知 浏览: 关键词:
?本文给大家介绍基于HTML5Canvas的3D渲染引擎界面以及吸附等结果的使用,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你们有所帮忙。 本文给大家介绍基于 HTML5 Canvas 的 3D 渲染引擎界面以及吸附等结果的使用 ,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你们有所帮忙。

结果图

代码实现

HT 供给了基于 WebGL 的 3D 技术的图形组件 ht.graph3d.Graph3dView,WebGL 基于 OpenGL ES 2.0 图形接口,因而 WebGL 属于底层的图形 API 接口,二次开发还是有很高的门槛,HT 的 Graph3dView 组件通过对 WebGL 底层技术的封装,与 HT 其他组件同样,基于 HT 同一的 DataModel 数据模型来驱动图形显示,极大落低了 3D 图形技术开发的门槛。同时 HT 供给了强大的完全基于 HTML5 技术 3D 图形建模设计器,会员无需编码即可迅速可视化搭建各种 3D 场景,可以说 HT 的 3D 开发模式完全打破了传统 3D 开发模式,绝大局部利用不再需要依赖精通 3ds Max 或 Maya 的专业 3D 设计师来建模,也不需要整合 Unity3d 等引擎做图形渲染,HT 一站式的供给了从建模到渲染,包含和 2D 组件呈现和数据融合的一站式解决方案。

本次解说的就是这个 3D 的界面,所以我们第一要新建 3D 渲染引擎组件,可视化呈现数据模型的三维环境场景。

dataModel = new ht.DataModel();
g3d = new ht.graph3d.Graph3dView(dataModel);
g3d.addToDOM();
window.addEventListener('resize', function (e) {
  g3d.invalidate();
}, false);

我们还要设定眼睛(或Camera)所在位置,默许值为 [0, 300, 1000] ,格局为 [x, y, z] 。

g3d.setEye([0, 300, 600]);

然后我们再给它加上一些选择结果。Graph3dView 中被选择的图元会显示为较暗的状态,变暗系数是由图元 style 的 brightness 和 select.brightness 属性决议,select.brightness 属性默许值为 0.7,终究返回值大于 1 变亮,小于 1 变暗,等于 1 或为空则不变化。Graph3dView#getBrightness 函数控制终究图元亮度,因而也可以通过重载遮盖该函数自定义选择图元亮度。

g3d.getBrightness = function (data) {
  if (data.s('isFocused')) {
     return 0.7;
   }
  return null;
};
lastFocusData = null;g3d.getView().addEventListener('mousemove', function (e) {
  // 传入逻辑坐标点或者交互 event 事件参数,返回目前点下的图元
   var data = g3d.getDataAt(e);   if (data !== lastFocusData) {
     if (lastFocusData) {
        astFocusData.s('isFocused', false);
      }      if (data) {
         data.s('isFocused', true);
      }
      astFocusData = data;
  }
});

接下来我们写个函数来利便绘制每个局部的模型:

function createNode (p3, s3, host) {
  // 拓扑图元类型  var node = new ht.Node();  // 猎取或设定图元核心点的三维坐标 有三个参数时相当于 setPosition3d 没有相当于 get  node.p3(p3);  // 猎取或设定图元的尺寸 有三个参数时相当于 setSize3d 没有相当于 get  node.s3(s3);  // 设定宿主图元,当图元吸附上宿主图元(host)时,宿主挪移或扭转时会带动所有吸附者  node.setHost(host);
  dataModel.add(node);  return node;
}

讲到了这,我们来说说吸附,吸附功能关于设计有条理关系的模型非常利便,例如设施面板吸附上设施机框,设施端口吸附上设施面板,这样从机框 - 面板 - 端口的条理关系吸附,使得会员拖动整体机框时所有这个条理下的图元都会追随挪移。关于 3D 的场景下,吸附的概念更进一步延长,当机框在三维空间进行任意位置偏移以及任意角度扭转时,所有吸附的相干图元都会准确的追随平移,并做出响应位置对应的扭转,以达到整体设施各个图形局部维持物理相对位置一致。

下面我们来一起新建模型吧!离别是地板 floor,桌面 table,四个桌腿以及盒子:

// 地板
floor = createNode([0, 0, 0], [600, 5, 400]).s({
  'all.color': '#A0A0A0',// 六面色彩
  'label': '地板',// 图元文字内容
  'label.face': 'top',// 文字在3d下的朝向,可取值(left|right|top|bottom|front|back|center)
  'label.background': 'yellow',// 图元文字配景
  'label.position': 22,// 图元文字位置
  'label.t3': [10, 0, -10],// 文字在3d下的偏移,格局为 [x,y,z]
  'label.font': '28px arial, sans-serif'// 图元文字字体
});
// 桌面
table = createNode([0, 120, 0], [400, 10, 280], floor).s({
  'shape3d': 'cylinder',// 为空时显示为六面立方体,cylinder 圆柱
  'shape3d.side': 60,// 决议 3d 图形显示为几边型,为 0 时显示为平滑的曲面结果
  'shape3d.color': '#E5BB77',// 3d 图形整体色彩
  'label': '桌子',
  'label.face': 'top',
  'label.background': 'yellow',
  'label.position': 23,
  'label.t3': [0, 0, -10],
  'label.font': '20px arial, sans-serif'
});
// 四个桌腿
foot1 = createNode([100, 60, 80], [20, 110, 20], table).s({
  'shape3d': 'cylinder',
  'shape3d.color': '#E5BB77',
});
foot2 = createNode([-100, 60, 80], [20, 110, 20], table).s({
  'shape3d': 'cylinder',
  'shape3d.color': '#E5BB77',
});
foot3 = createNode([100, 60, -80], [20, 110, 20], table).s({
  'shape3d': 'cylinder',
  'shape3d.color': '#E5BB77',
});
foot4 = createNode([-100, 60, -80], [20, 110, 20], table).s({
  'shape3d': 'cylinder',
  'shape3d.color': '#E5BB77',
});
// 盒子
box = createNode([0, 150, 0], [100, 50, 60], table).s({
  'all.color': '#2e2f32',
  'front.color': '#BDC3C7',// 前面色彩
  'note': '盯着你看', // 图元冒泡标注
  'note.face': 'top',
  'note.position': 7,
  'note.t3': [0, 0, 10],
  'note.autorotate': true// 图标在 3D 下可否主动朝向眼睛的标的目的
});

代码中有一些属性,我已经帮大家写好了细致的注释。在此献上各种对于 'shape3d' 的图形的值,利便大家游玩:

总结:以上就是本篇文的全部内容,但愿能对大家的学习有所帮忙。更多相干教程请拜访Html5视频教程!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板