http://doc.servasoft.com/twaver-document-center/twaver-make/about/#parametersmake是一个平台,除了拥有丰富的内置模型外,用户也可以扩展自己的模型库。
完全自定义的模型
利用自方法,用户可以完全更加自己的需求定制自己的模型,没有任何限制;缺点是无法利用已经有的模型库进行扩展;对于3D模型开发者,此种方法适用底层开发能力强的用户. 如下:
1 2 3 4 5 6 7 8 9 10 |
make.Default.register('myRack',function(){ var rack = new mono.Cube(60,220,60); rack.s({ 'm.image':'../rack.png' 'm.front.image' : '../front_rack.png', }); },{ category : "机柜模型" type : "mono.Element", }); |
扩展obj模型
TWaver Make里面支持obj模型,make包里面就提供了很多内置的obj模型,用户也可以扩展自己的obj模型,通过3d max或者其他3d模型的设计器设计自己的3d模型,然后导出obj格式的文件,obj模型一般包含obj,mtl和贴图资源文件。obj文件里面存放的是模型的各个点和面的数据信息,mtl文件中存放的是各种材质的描述。图片资源可有可无,取决于3d模型本身。
有了obj模型,就可以在make中注册一个自己的模型,首先我们需要把obj模型(包括obj,mtl和所有的图片文件)copy到项目的某个目录下,例如现在有一个hk的obj模型,copy到obj的目录下,注册到make的代码如下:
1 2 3 4 5 6 7 |
make.Default.registerObj('com.hk', 'hk', '../../obj/'); // 'com.hk': 模型的id,模型id是make中的唯一标识,自定义的模型不要和twaver内部的模型冲突,twaver内部的模型都是以twaver开头的 //'hk': 模型名称,也就是模型文件的名称(obj和mtl文件),obj和mtl文件名需要保持一致 //'../../obj/':模型的路径,模型的路径是相对于Make中的路径 |
需要注意的是模型的路径,’../../obj/’的路径是相对于make.Default.path的路径,因为这里path的路径为’./js/make’,而obj的目录是工程的根目录下,所有需要先回到上上级目录。
注册obj的API为:make.Default.registerObj(id,name,path, parameters)。parameters是注册是传入的参数,比如name,icon,description,可以为null,关于parameters参数可以参考这里的介绍。
注册好了obj模型就可以通过load方法加载这个模型,代码如下:
1 2 3 |
make.Default.load('com.hk', function(object3d){ databox.addByDescendant(object3d); }); |
obj模型属于异步加载的模型,因此需要在load方法的callback中获取加载的obj模型对象。
基于已有模型扩展
利用此方法,用户可以在原有的模型的基础上,定制出自己常用的模型,如下代码,在原本的“twaver.idc.rack”的模型基础上,通过修改参数width,扩展出自己的模型,此种方法定义模型简单,不需要精通太多的底层技术,缺陷是局限于已有的模型库,不过随着make的模型库不断丰富,这种局限性会变得越来越小.
1 2 3 4 5 |
make.Default.register('myRack',function(json){ json.id = 'twaver.idc.rack'; json.width = 700; return make.Default.load(json); }); |
基于twaver.combo模型扩展
利用此方法,用户可以在原来模型库的基础上,通过组合的方式,形成一个新的组合体(注意,只是针对3D模型),比如一个楼层模型,其实是用过外墙,内墙,门,窗等组成的,所以一个楼层就可以通过twaver.combo来定义,此方法的参数是一个数组,而数组第一个元素定义的对象将作为组合体的主对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
make.Default.register('room01',function(json){ var jsonObject =[ { "id": "twaver.idc.wall", "data": [ 20, 20, 6444, 20, 6444, 4488, 20, 4488, 20, 20 ] }, { "id": "twaver.idc.floor", "data": [ 20, 20, 6444, 20, 6444, 4488, 20, 4488, 20, 20 ] }, { "id": "twaver.idc.innerWall", "data": [ 616, 1668, 6086, 1668, 6086, 2518, 616, 2518, 616, 1668 ], "children": [ { "id": "twaver.idc.door", "position": [ 1117.9671397000086, 0, 1668 ] }, { "id": "twaver.idc.door", "position": [ 2430.809584499989, 0, 1668 ] }, { "id": "twaver.idc.door", "position": [ 3359.5254803999796, 0, 1668 ] }, { "id": "twaver.idc.door", "position": [ 5370.024524499989, 0, 1668 ] }, { "id": "twaver.idc.door", "position": [ 3031.0254803999796, 0, 2518 ] }, { "id": "twaver.idc.door", "position": [ 3233.0254803999796, 0, 2518 ] }, { "id": "twaver.idc.door", "position": [ 5337.502449399978, 0, 2518 ] } ] }, { "id": "twaver.idc.innerWall", "data": [ 20, 346, 6444, 346 ], "children": [ { "id": "twaver.idc.door", "position": [ 135.33818239998072, 0, 346 ] }, { "id": "twaver.idc.door", "position": [ 3038.4210748000073, 0, 346 ] }, { "id": "twaver.idc.door", "position": [ 3225.6298859999984, 0, 346 ] }, { "id": "twaver.idc.door", "position": [ 6330.094649299979, 0, 346 ] } ] }, { "id": "twaver.idc.innerWall", "data": [ 20, 1456, 6444, 1456 ], "children": [ { "id": "twaver.idc.door", "position": [ 164.58301169998015, 0, 1456 ] }, { "id": "twaver.idc.door", "position": [ 2770.5900632999837, 0, 1456 ] }, { "id": "twaver.idc.door", "position": [ 3359.5254803999796, 0, 1456 ] }, { "id": "twaver.idc.door", "position": [ 6294.529282099987, 100, 1456 ] } ] }, { "id": "twaver.idc.innerWall", "data": [ 3132.0254803999796, 20, 3132.0254803999796, 1456 ] } ]; var object3d = make.Default.load({id: "twaver.combo", data:jsonObject},); return object3d; }); |