这一章说一下场景编辑器的主页editor\index.html,包含了各个组件的初始化,以及设置组件之间的关联。

<!DOCTYPE html>
<html lang="en"><head><title>three.js / editor</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><!-- Origin Trial Token, feature = WebXR Device API (For Chrome M69+), origin = https://threejs.org, expires = 2019-03-06 --><meta http-equiv="origin-trial" data-feature="WebXR Device API (For Chrome M69+)" data-expires="2019-03-06" content="AvDjbxYpoTgOL1PS0JEra7KFCehfTlKnXpU/ORSwNdCQ35cX70cTUkXOnQ26A5XJi3eXHSKpBPchdt5lbcxDuAIAAABTeyJvcmlnaW4iOiJodHRwczovL3RocmVlanMub3JnOjQ0MyIsImZlYXR1cmUiOiJXZWJYUkRldmljZU02OSIsImV4cGlyeSI6MTU1MTgzMDM5OX0="></head><body ontouchstart=""><link href="css/main.css" rel="stylesheet" /><link id="theme" href="css/light.css" rel="stylesheet" /><script src="../build/three.js"></script><script src="../examples/js/libs/system.min.js"></script><script src="../examples/js/controls/EditorControls.js"></script><script src="../examples/js/controls/TransformControls.js"></script> <!-- 转换函数 --><script src="../examples/js/libs/jszip.min.js"></script>    <!-- 压缩函数 --><script src="../examples/js/libs/inflate.min.js"></script>  <!-- FBX --><script src="../examples/js/loaders/AMFLoader.js"></script><script src="../examples/js/loaders/AWDLoader.js"></script><script src="../examples/js/loaders/BabylonLoader.js"></script> <!-- ?? --><script src="../examples/js/loaders/ColladaLoader.js"></script><script src="../examples/js/loaders/DRACOLoader.js"></script><script src="../examples/js/loaders/FBXLoader.js"></script><script src="../examples/js/loaders/GLTFLoader.js"></script><script src="../examples/js/loaders/deprecated/LegacyGLTFLoader.js"></script><script src="../examples/js/loaders/KMZLoader.js"></script><script src="../examples/js/loaders/MD2Loader.js"></script><script src="../examples/js/loaders/OBJLoader.js"></script><script src="../examples/js/loaders/MTLLoader.js"></script><script src="../examples/js/loaders/PlayCanvasLoader.js"></script><script src="../examples/js/loaders/PLYLoader.js"></script><script src="../examples/js/loaders/STLLoader.js"></script><script src="../examples/js/loaders/SVGLoader.js"></script><script src="../examples/js/loaders/TGALoader.js"></script><script src="../examples/js/loaders/TDSLoader.js"></script><script src="../examples/js/loaders/VRMLLoader.js"></script><script src="../examples/js/loaders/VTKLoader.js"></script><script src="../examples/js/loaders/ctm/lzma.js"></script><script src="../examples/js/loaders/ctm/ctm.js"></script><script src="../examples/js/loaders/ctm/CTMLoader.js"></script><script src="../examples/js/exporters/ColladaExporter.js"></script><script src="../examples/js/exporters/GLTFExporter.js"></script><script src="../examples/js/exporters/OBJExporter.js"></script><script src="../examples/js/exporters/STLExporter.js"></script><script src="../examples/js/renderers/Projector.js"></script><script src="../examples/js/renderers/RaytracingRenderer.js"></script><script src="../examples/js/renderers/SoftwareRenderer.js"></script><script src="../examples/js/renderers/SVGRenderer.js"></script><link rel="stylesheet" href="js/libs/codemirror/codemirror.css"><link rel="stylesheet" href="js/libs/codemirror/theme/monokai.css"><script src="js/libs/codemirror/codemirror.js"></script><script src="js/libs/codemirror/mode/javascript.js"></script><script src="js/libs/codemirror/mode/glsl.js"></script><script src="js/libs/esprima.js"></script><script src="js/libs/jsonlint.js"></script><script src="js/libs/glslprep.min.js"></script><link rel="stylesheet" href="js/libs/codemirror/addon/dialog.css"><link rel="stylesheet" href="js/libs/codemirror/addon/show-hint.css"><link rel="stylesheet" href="js/libs/codemirror/addon/tern.css"><script src="js/libs/codemirror/addon/dialog.js"></script><script src="js/libs/codemirror/addon/show-hint.js"></script><script src="js/libs/codemirror/addon/tern.js"></script><script src="js/libs/acorn/acorn.js"></script><script src="js/libs/acorn/acorn_loose.js"></script><script src="js/libs/acorn/walk.js"></script><script src="js/libs/ternjs/polyfill.js"></script><script src="js/libs/ternjs/signal.js"></script><script src="js/libs/ternjs/tern.js"></script><script src="js/libs/ternjs/def.js"></script><script src="js/libs/ternjs/comment.js"></script><script src="js/libs/ternjs/infer.js"></script><script src="js/libs/ternjs/doc_comment.js"></script><script src="js/libs/tern-threejs/threejs.js"></script><script src="js/libs/signals.min.js"></script><script src="js/libs/ui.js"></script><script src="js/libs/ui.three.js"></script><script src="js/libs/app.js"></script><script src="js/Player.js"></script><script src="js/Script.js"></script><script src="../examples/js/vr/WebVR.js"></script><script src="js/Storage.js"></script><script src="js/Editor.js"></script><script src="js/Config.js"></script><script src="js/History.js"></script><script src="js/Loader.js"></script><script src="js/Menubar.js"></script><script src="js/Menubar.File.js"></script><script src="js/Menubar.Edit.js"></script><script src="js/Menubar.Add.js"></script><script src="js/Menubar.Play.js"></script><!-- <script src="js/Menubar.View.js"></script> --><script src="js/Menubar.Examples.js"></script><script src="js/Menubar.Help.js"></script><script src="js/Menubar.Status.js"></script><script src="js/Sidebar.js"></script><script src="js/Sidebar.Scene.js"></script><script src="js/Sidebar.Project.js"></script><script src="js/Sidebar.Settings.js"></script><script src="js/Sidebar.Settings.Shortcuts.js"></script><script src="js/Sidebar.Settings.Viewport.js"></script><script src="js/Sidebar.Properties.js"></script><script src="js/Sidebar.Object.js"></script><script src="js/Sidebar.Geometry.js"></script><script src="js/Sidebar.Geometry.Geometry.js"></script><script src="js/Sidebar.Geometry.BufferGeometry.js"></script><script src="js/Sidebar.Geometry.Modifiers.js"></script><script src="js/Sidebar.Geometry.BoxGeometry.js"></script><script src="js/Sidebar.Geometry.CircleGeometry.js"></script><script src="js/Sidebar.Geometry.CylinderGeometry.js"></script><script src="js/Sidebar.Geometry.IcosahedronGeometry.js"></script><script src="js/Sidebar.Geometry.PlaneGeometry.js"></script><script src="js/Sidebar.Geometry.SphereGeometry.js"></script><script src="js/Sidebar.Geometry.TorusGeometry.js"></script><script src="js/Sidebar.Geometry.TorusKnotGeometry.js"></script><script src="js/Sidebar.Geometry.TubeGeometry.js"></script><script src="../examples/js/geometries/TeapotBufferGeometry.js"></script><script src="js/Sidebar.Geometry.TeapotBufferGeometry.js"></script><script src="js/Sidebar.Geometry.LatheGeometry.js"></script><script src="js/Sidebar.Material.js"></script><script src="js/Sidebar.Animation.js"></script><script src="js/Sidebar.Script.js"></script><script src="js/Sidebar.History.js"></script><script src="js/Strings.js"></script><script src="js/Toolbar.js"></script><script src="js/Viewport.js"></script><script src="js/Viewport.Info.js"></script><script src="js/Command.js"></script><script src="js/commands/AddObjectCommand.js"></script><script src="js/commands/RemoveObjectCommand.js"></script><script src="js/commands/MoveObjectCommand.js"></script><script src="js/commands/SetPositionCommand.js"></script><script src="js/commands/SetRotationCommand.js"></script><script src="js/commands/SetScaleCommand.js"></script><script src="js/commands/SetValueCommand.js"></script><script src="js/commands/SetUuidCommand.js"></script><script src="js/commands/SetColorCommand.js"></script><script src="js/commands/SetGeometryCommand.js"></script><script src="js/commands/SetGeometryValueCommand.js"></script><script src="js/commands/MultiCmdsCommand.js"></script><script src="js/commands/AddScriptCommand.js"></script><script src="js/commands/RemoveScriptCommand.js"></script><script src="js/commands/SetScriptValueCommand.js"></script><script src="js/commands/SetMaterialCommand.js"></script><script src="js/commands/SetMaterialValueCommand.js"></script><script src="js/commands/SetMaterialColorCommand.js"></script><script src="js/commands/SetMaterialMapCommand.js"></script><script src="js/commands/SetSceneCommand.js"></script><script src="js/libs/html2canvas.js"></script><script src="js/libs/three.html.js"></script><script>//检查浏览器的类型window.URL = window.URL || window.webkitURL;window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;Number.prototype.format = function (){return this.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");};////编辑器的上下文var editor = new Editor();//窗口var viewport = new Viewport( editor );document.body.appendChild( viewport.dom );//工具条(平移、旋转、缩放、本地世界空间)var toolbar = new Toolbar( editor );document.body.appendChild( toolbar.dom );//脚本窗口var script = new Script( editor );document.body.appendChild( script.dom );//播放菜单项var player = new Player( editor );document.body.appendChild( player.dom );//菜单条var menubar = new Menubar( editor );document.body.appendChild( menubar.dom );//侧边栏(工程、场景、设置等)var sidebar = new Sidebar( editor );document.body.appendChild( sidebar.dom );//??var modal = new UI.Modal();document.body.appendChild( modal.dom );////主题editor.setTheme( editor.config.getKey( 'theme' ) );//序列化、反序列化editor.storage.init( function () {//存储中设置获取函数editor.storage.get( function ( state ) {//如果是来自文件就返回if ( isLoadingFromHash ) return;//if ( state !== undefined ) {//editor.fromJSON( state );}//是否保存选择状态var selected = editor.config.getKey( 'selected' );//保存选择状态if ( selected !== undefined ) {//设置选择对象的uuideditor.selectByUuid( selected );}} );//var timeout;//保存function saveState( scene ) {//如果是不是自动保存,就返回if ( editor.config.getKey( 'autosave' ) === false ) {return;}//清除超时clearTimeout( timeout );//重新设定超时timeout = setTimeout( function () {//派发消息后,等上100s进行保存editor.signals.savingStarted.dispatch();timeout = setTimeout( function () {//保存处理editor.storage.set( editor.toJSON() );//保存完成,后派发消息editor.signals.savingFinished.dispatch();}, 100 );    //}, 1000 );};//编辑器的信号var signals = editor.signals;//几何信息改变处理方法signals.geometryChanged.add( saveState );//对象添加处理方法signals.objectAdded.add( saveState );//对象改变处理方法signals.objectChanged.add( saveState );//对象移除处理方法signals.objectRemoved.add( saveState );//材质改变处理方法signals.materialChanged.add( saveState );//场景背景改变的处理方法signals.sceneBackgroundChanged.add( saveState );//场景雾改变的处理方法signals.sceneFogChanged.add( saveState );//场景图改变的处理方法signals.sceneGraphChanged.add( saveState );//脚本改变的处理方法signals.scriptChanged.add( saveState );//历史改变的处理方法signals.historyChanged.add( saveState );//显示模型的处理方法??signals.showModal.add( function ( content ) {modal.show( content );} );} );////按住拖拽document.addEventListener( 'dragover', function ( event ) {event.preventDefault();event.dataTransfer.dropEffect = 'copy';}, false );//拖拽抬起document.addEventListener( 'drop', function ( event ) {event.preventDefault();editor.loader.loadFiles( event.dataTransfer.files );}, false );//窗口大小变化function onWindowResize( event ) {editor.signals.windowResize.dispatch();}//注册窗口放大消息window.addEventListener( 'resize', onWindowResize, false );//首先调用一次重置大小onWindowResize();//来自文件var isLoadingFromHash = false;var hash = window.location.hash;//如果是从文件加载if ( hash.substr( 1, 5 ) === 'file=' ) {//获取文件的目录var file = hash.substr( 6 );//提示,没有保存的文件将会丢失if ( confirm( 'Any unsaved data will be lost. Are you sure?' ) ) {//文件加载器var loader = new THREE.FileLoader();//不跨域loader.crossOrigin = '';//加载文件loader.load( file, function ( text ) {//清除编辑器中的所有的东西?editor.clear();//展示场景文件editor.fromJSON( JSON.parse( text ) );} );//从已有的文件加载isLoadingFromHash = true;}}/*window.addEventListener( 'message', function ( event ) {editor.clear();editor.fromJSON( event.data );}, false );*/</script></body>
</html>

three.js 场景编辑器 源码解析(六)相关推荐

  1. KRPano JS 场景编辑器源码

    KRPano JS编辑器,可以运行在Node环境中. 源码地址:https://github.com/xxweimei/krpano-editor-js 或者下载zip包:http://pan.bai ...

  2. Celery 源码解析六:Events 的实现

    序列文章: Celery 源码解析一:Worker 启动流程概述 Celery 源码解析二:Worker 的执行引擎 Celery 源码解析三: Task 对象的实现 Celery 源码解析四: 定时 ...

  3. 迷你 JS 框架 Hyperapp 源码解析

    Hyperapp 是最近热度颇高的一款迷你 JS 框架,其源码不到 400 行,压缩 gzip 后只有 1kB,却具有相当高的完成度,拿来实现简单的 web 应用也不在话下.整体实现上,Hyperap ...

  4. loraserver 源码解析 (六) lora-app-server

    目录 下载源码 升级 npm 安装一些必要的依赖库 pq_trgm extension run 调用 handleDataDownPayloads 开启一个Goroutine  G1 run再调用 s ...

  5. 轻量级Rpc框架设计--motan源码解析六:client端服务发现

    一, Client端初始化工作 client端通过RefererConfigBean类实现InitializingBean接口的afterPropertiesSet方法, 进行下面三项检查配置工作: ...

  6. ramda.js的compose源码解析

    前言 上一篇文章介绍了javascript中的compose函数的实现,我是用了递归的思想去让函数依次执行,lodash中是用了迭代的思想依次执行函数,但实现了以后我还是觉得有些别扭,仔细想想,我们实 ...

  7. PureMVC(JS版)源码解析(五):SimpleCommand类

    之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲解Simpl ...

  8. Mybatis 源码解析(六) Mybatis方言支持

    背景 现实中,我们经常会遇到使用oracle.mysql的客户,那么我们一般就需要工程同时支持这两种数据库.所以我们需要mybatis对方言进行支持,可以根据不同的数据源执行不同的sql语句. 实现 ...

  9. Tomcat源码解析六:Tomcat类加载器机制

    要说Tomcat的Classloader机制,我们还得从Bootstrap开始.在BootStrap初始化的时候,调用了org.apache.catalina.startup.Bootstrap#in ...

  10. 熬夜写的解析掘金新版本编辑器源码

    掘金(字节跳动)MD编辑器源码解析 写在开头 今天在朋友圈发现,掘金运营发布了新的掘金编辑器,作为一位曾经的富文本编辑器开发者,我当然充满了好奇,于是就有了这篇文章 首先找到github源码,http ...

最新文章

  1. 步入DevExpress的使用(VS)
  2. 复旦大学女教授告诉你:朋友是什么?
  3. [转]Myeclipse9引入easy_ui时,其中的部分js文件报错
  4. 在Java 8中使用Stream API列出ZIP文件的内容
  5. JavaScript的引入方式
  6. MIX 2008与ASP.NET MVC框架的Road-Map
  7. oracle 11g job创建,Oracle 11g 手动创建库完整实施过程
  8. linux2.4.18内核定时器的使用
  9. Tarjan在图论中的应用(二)——用Tarjan来求割点与割边
  10. java连接数据库(sqlserver和mysql)
  11. 外网访问群晖设置ddns教程
  12. Adobe Premiere Pro 如何打开webm格式媒体
  13. 斐波那契数列的java代码
  14. CCCC选拔赛赛后总结
  15. git创建分支,以及提交到远程创库
  16. 数据载入、Pandas基础和探索性数据分析
  17. 权威报告发布:细数OKEx OKChain公链那些“五星级”的骚操作
  18. 解决报错Cannot connect to the Maven process. Try again later. If the problem persists, check the Maven
  19. Android系统字体加载流程
  20. python万年历节气_用Python精确计算100年内二十四节气日期

热门文章

  1. CSS 3之 文本样式(三)
  2. c++中 append()函数用法
  3. 掌握哪些知识,才能被称得上一名合格的前端开发工程师?
  4. 【缓存】缓存更新策略
  5. 模型实践 | Alphafold 蛋白质结构预测
  6. 企业宣传软文怎么写?手把手教大家撰写企业宣传软文
  7. Web.xml 错误或异常页面配置
  8. CentOS7非桌面版关闭休眠和设置关闭盖子不休眠(server)
  9. VOT2016配置 VOT tookit
  10. Your application has presented a UIAlertController (UIAlertController: 0x100b79