diff --git a/__test__/CalUV.ts b/__test__/CalUV.ts new file mode 100644 index 000000000..966f61340 --- /dev/null +++ b/__test__/CalUV.ts @@ -0,0 +1,42 @@ +function updateUV(geometry) +{ + + // 据我所知,没有自动计算UV的方法。 + + // 你必须计算自己。计算一个平面的紫外线是相当容易的,这个网站解释如何:计算纹理坐标 + + // 对于一个复杂的形状,我不知道如何。也许你可以检测平面。 + + // 编辑 + + // 这是一个平面表面的示例代码,(x, y, z)其中z = 0: + + geometry.computeBoundingBox(); + + var max = geometry.boundingBox.max, + min = geometry.boundingBox.min; + var offset = new THREE.Vector2(0 - min.x, 0 - min.y); + var range = new THREE.Vector2(max.x - min.x, max.y - min.y); + var faces = geometry.faces; + + if (!geometry.faceVertexUvs) + { + geometry.faceVertexUvs = [[]]; + } + geometry.faceVertexUvs[0] = []; + + for (var i = 0; i < faces.length; i++) + { + + var v1 = geometry.vertices[faces[i].a], + v2 = geometry.vertices[faces[i].b], + v3 = geometry.vertices[faces[i].c]; + + geometry.faceVertexUvs[0].push([ + new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y), + new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y), + new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y) + ]); + } + geometry.uvsNeedUpdate = true; +} \ No newline at end of file diff --git a/__test__/LightTest.test.ts b/__test__/LightTest.ts similarity index 100% rename from __test__/LightTest.test.ts rename to __test__/LightTest.ts diff --git a/__test__/fbxLoaderTest.test.ts b/__test__/fbxLoaderTest.ts similarity index 91% rename from __test__/fbxLoaderTest.test.ts rename to __test__/fbxLoaderTest.ts index a9fa64ae1..988b6ee51 100644 --- a/__test__/fbxLoaderTest.test.ts +++ b/__test__/fbxLoaderTest.ts @@ -44,4 +44,10 @@ function loadTexture(fileName: string) // var material = new THREE.MeshPhongMaterial({ map: texture }); // front -} \ No newline at end of file +} + + +// let mat2 = new THREE.MeshBasicMaterial({ +// color: 0xffffff, +// side: THREE.DoubleSide +// }) \ No newline at end of file diff --git a/__test__/mst.test.ts b/__test__/mst.ts similarity index 100% rename from __test__/mst.test.ts rename to __test__/mst.ts diff --git a/src/Add-on/DrawLine.ts b/src/Add-on/DrawLine.ts index 8cbbc5a7a..4bbde5b3c 100644 --- a/src/Add-on/DrawLine.ts +++ b/src/Add-on/DrawLine.ts @@ -7,10 +7,6 @@ import { UndoData } from '../DatabaseServices/UndoData'; import { PromptStatus } from '../Editor/PromptResult'; import * as ReactDOM from 'react-dom'; -//最小限度的使用这个模块. 所以提供了一个导出的头文件. -export var FBXLoader = require('three-FBXLoader'); -window["threeZlib"] = require("zlib") - export class DrawLine implements Command { async exec() @@ -58,46 +54,3 @@ export class Redo implements Command undoData.redo(1); } } - -function updateUV(geometry) -{ - - // 据我所知,没有自动计算UV的方法。 - - // 你必须计算自己。计算一个平面的紫外线是相当容易的,这个网站解释如何:计算纹理坐标 - - // 对于一个复杂的形状,我不知道如何。也许你可以检测平面。 - - // 编辑 - - // 这是一个平面表面的示例代码,(x, y, z)其中z = 0: - - geometry.computeBoundingBox(); - - var max = geometry.boundingBox.max, - min = geometry.boundingBox.min; - var offset = new THREE.Vector2(0 - min.x, 0 - min.y); - var range = new THREE.Vector2(max.x - min.x, max.y - min.y); - var faces = geometry.faces; - - if (!geometry.faceVertexUvs) - { - geometry.faceVertexUvs = [[]]; - } - geometry.faceVertexUvs[0] = []; - - for (var i = 0; i < faces.length; i++) - { - - var v1 = geometry.vertices[faces[i].a], - v2 = geometry.vertices[faces[i].b], - v3 = geometry.vertices[faces[i].c]; - - geometry.faceVertexUvs[0].push([ - new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y), - new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y), - new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y) - ]); - } - geometry.uvsNeedUpdate = true; -} \ No newline at end of file diff --git a/src/Common/ColorPalette.ts b/src/Common/ColorPalette.ts new file mode 100644 index 000000000..e389dc896 --- /dev/null +++ b/src/Common/ColorPalette.ts @@ -0,0 +1,288 @@ +import * as THREE from 'three'; +export let ColorPalette = [ + [255, 0, 0, 255], //----- 0 - lets make it red for an example + //[255, 255, 255, 255],//----- 0 - ByBlock - White + [255, 0, 0, 255], //----- 1 - Red + [255, 255, 0, 255], //----- 2 - Yellow + [0, 255, 0, 255], //----- 3 - Green + [0, 255, 255, 255], //----- 4 - Cyan + [0, 0, 255, 255], //----- 5 - Blue + [255, 0, 255, 255], //----- 6 - Magenta + [255, 0, 0, 255], //----- 7 - More red Red + [255, 0, 0, 255], //----- 8 - More red Red + [255, 0, 0, 255], //----- 9 - More red Red + /*[255, 255, 255, 255],//----- 7 - White + [255, 255, 255, 255],//----- 8 + [255, 255, 255, 255],//----- 9*/ + [255, 0, 0, 255], //----- 10 + [255, 127, 127, 255],//----- 11 + [165, 0, 0, 255], //----- 12 + [165, 82, 82, 255], //----- 13 + [127, 0, 0, 255], //----- 14 + [127, 63, 63, 255], //----- 15 + [76, 0, 0, 255], //----- 16 + [76, 38, 38, 255], //----- 17 + [38, 0, 0, 255], //----- 18 + [38, 19, 19, 255], //----- 19 + [255, 63, 0, 255], //----- 20 + [255, 159, 127, 255],//----- 21 + [165, 41, 0, 255], //----- 22 + [165, 103, 82, 255], //----- 23 + [127, 31, 0, 255], //----- 24 + [127, 79, 63, 255], //----- 25 + [76, 19, 0, 255], //----- 26 + [76, 47, 38, 255], //----- 27 + [38, 9, 0, 255], //----- 28 + [38, 23, 19, 255], //----- 29 + [255, 127, 0, 255], //----- 30 + [255, 191, 127, 255],//----- 31 + [165, 82, 0, 255], //----- 32 + [165, 124, 82, 255], //----- 33 + [127, 63, 0, 255], //----- 34 + [127, 95, 63, 255], //----- 35 + [76, 38, 0, 255], //----- 36 + [76, 57, 38, 255], //----- 37 + [38, 19, 0, 255], //----- 38 + [38, 28, 19, 255], //----- 39 + [255, 191, 0, 255], //----- 40 + [255, 223, 127, 255],//----- 41 + [165, 124, 0, 255], //----- 42 + [165, 145, 82, 255], //----- 43 + [127, 95, 0, 255], //----- 44 + [127, 111, 63, 255], //----- 45 + [76, 57, 0, 255], //----- 46 + [76, 66, 38, 255], //----- 47 + [38, 28, 0, 255], //----- 48 + [38, 33, 19, 255], //----- 49 + [255, 255, 0, 255], //----- 50 + [255, 255, 127, 255],//----- 51 + [165, 165, 0, 255], //----- 52 + [165, 165, 82, 255], //----- 53 + [127, 127, 0, 255], //----- 54 + [127, 127, 63, 255], //----- 55 + [76, 76, 0, 255], //----- 56 + [76, 76, 38, 255], //----- 57 + [38, 38, 0, 255], //----- 58 + [38, 38, 19, 255], //----- 59 + [191, 255, 0, 255], //----- 60 + [223, 255, 127, 255],//----- 61 + [124, 165, 0, 255], //----- 62 + [145, 165, 82, 255], //----- 63 + [95, 127, 0, 255], //----- 64 + [111, 127, 63, 255], //----- 65 + [57, 76, 0, 255], //----- 66 + [66, 76, 38, 255], //----- 67 + [28, 38, 0, 255], //----- 68 + [33, 38, 19, 255], //----- 69 + [127, 255, 0, 255], //----- 70 + [191, 255, 127, 255],//----- 71 + [82, 165, 0, 255], //----- 72 + [124, 165, 82, 255], //----- 73 + [63, 127, 0, 255], //----- 74 + [95, 127, 63, 255], //----- 75 + [38, 76, 0, 255], //----- 76 + [57, 76, 38, 255], //----- 77 + [19, 38, 0, 255], //----- 78 + [28, 38, 19, 255], //----- 79 + [63, 255, 0, 255], //----- 80 + [159, 255, 127, 255],//----- 81 + [41, 165, 0, 255], //----- 82 + [103, 165, 82, 255], //----- 83 + [31, 127, 0, 255], //----- 84 + [79, 127, 63, 255], //----- 85 + [19, 76, 0, 255], //----- 86 + [47, 76, 38, 255], //----- 87 + [9, 38, 0, 255], //----- 88 + [23, 38, 19, 255], //----- 89 + [0, 255, 0, 255], //----- 90 + [127, 255, 127, 255],//----- 91 + [0, 165, 0, 255], //----- 92 + [82, 165, 82, 255], //----- 93 + [0, 127, 0, 255], //----- 94 + [63, 127, 63, 255], //----- 95 + [0, 76, 0, 255], //----- 96 + [38, 76, 38, 255], //----- 97 + [0, 38, 0, 255], //----- 98 + [19, 38, 19, 255], //----- 99 + [0, 255, 63, 255], //----- 100 + [127, 255, 159, 255],//----- 101 + [0, 165, 41, 255], //----- 102 + [82, 165, 103, 255], //----- 103 + [0, 127, 31, 255], //----- 104 + [63, 127, 79, 255], //----- 105 + [0, 76, 19, 255], //----- 106 + [38, 76, 47, 255], //----- 107 + [0, 38, 9, 255], //----- 108 + [19, 38, 23, 255], //----- 109 + [0, 255, 127, 255], //----- 110 + [127, 255, 191, 255],//----- 111 + [0, 165, 82, 255], //----- 112 + [82, 165, 124, 255], //----- 113 + [0, 127, 63, 255], //----- 114 + [63, 127, 95, 255], //----- 115 + [0, 76, 38, 255], //----- 116 + [38, 76, 57, 255], //----- 117 + [0, 38, 19, 255], //----- 118 + [19, 38, 28, 255], //----- 119 + [0, 255, 191, 255], //----- 120 + [127, 255, 223, 255],//----- 121 + [0, 165, 124, 255], //----- 122 + [82, 165, 145, 255], //----- 123 + [0, 127, 95, 255], //----- 124 + [63, 127, 111, 255], //----- 125 + [0, 76, 57, 255], //----- 126 + [38, 76, 66, 255], //----- 127 + [0, 38, 28, 255], //----- 128 + [19, 38, 33, 255], //----- 129 + [0, 255, 255, 255], //----- 130 + [127, 255, 255, 255],//----- 131 + [0, 165, 165, 255], //----- 132 + [82, 165, 165, 255], //----- 133 + [0, 127, 127, 255], //----- 134 + [63, 127, 127, 255], //----- 135 + [0, 76, 76, 255], //----- 136 + [38, 76, 76, 255], //----- 137 + [0, 38, 38, 255], //----- 138 + [19, 38, 38, 255], //----- 139 + [0, 191, 255, 255], //----- 140 + [127, 223, 255, 255],//----- 141 + [0, 124, 165, 255], //----- 142 + [82, 145, 165, 255], //----- 143 + [0, 95, 127, 255], //----- 144 + [63, 111, 127, 255], //----- 145 + [0, 57, 76, 255], //----- 146 + [38, 66, 76, 255], //----- 147 + [0, 28, 38, 255], //----- 148 + [19, 33, 38, 255], //----- 149 + [0, 127, 255, 255], //----- 150 + [127, 191, 255, 255],//----- 151 + [0, 82, 165, 255], //----- 152 + [82, 124, 165, 255], //----- 153 + [0, 63, 127, 255], //----- 154 + [63, 95, 127, 255], //----- 155 + [0, 38, 76, 255], //----- 156 + [38, 57, 76, 255], //----- 157 + [0, 19, 38, 255], //----- 158 + [19, 28, 38, 255], //----- 159 + [0, 63, 255, 255], //----- 160 + [127, 159, 255, 255],//----- 161 + [0, 41, 165, 255], //----- 162 + [82, 103, 165, 255], //----- 163 + [0, 31, 127, 255], //----- 164 + [63, 79, 127, 255], //----- 165 + [0, 19, 76, 255], //----- 166 + [38, 47, 76, 255], //----- 167 + [0, 9, 38, 255], //----- 168 + [19, 23, 38, 255], //----- 169 + [0, 0, 255, 255], //----- 170 + [127, 127, 255, 255],//----- 171 + [0, 0, 165, 255], //----- 172 + [82, 82, 165, 255], //----- 173 + [0, 0, 127, 255], //----- 174 + [63, 63, 127, 255], //----- 175 + [0, 0, 76, 255], //----- 176 + [38, 38, 76, 255], //----- 177 + [0, 0, 38, 255], //----- 178 + [19, 19, 38, 255], //----- 179 + [63, 0, 255, 255], //----- 180 + [159, 127, 255, 255],//----- 181 + [41, 0, 165, 255], //----- 182 + [103, 82, 165, 255], //----- 183 + [31, 0, 127, 255], //----- 184 + [79, 63, 127, 255], //----- 185 + [19, 0, 76, 255], //----- 186 + [47, 38, 76, 255], //----- 187 + [9, 0, 38, 255], //----- 188 + [23, 19, 38, 255], //----- 189 + [127, 0, 255, 255], //----- 190 + [191, 127, 255, 255],//----- 191 + [82, 0, 165, 255], //----- 192 + [124, 82, 165, 255], //----- 193 + [63, 0, 127, 255], //----- 194 + [95, 63, 127, 255], //----- 195 + [38, 0, 76, 255], //----- 196 + [57, 38, 76, 255], //----- 197 + [19, 0, 38, 255], //----- 198 + [28, 19, 38, 255], //----- 199 + [191, 0, 255, 255], //----- 200 + [223, 127, 255, 255],//----- 201 + [124, 0, 165, 255], //----- 202 + [145, 82, 165, 255], //----- 203 + [95, 0, 127, 255], //----- 204 + [111, 63, 127, 255], //----- 205 + [57, 0, 76, 255], //----- 206 + [66, 38, 76, 255], //----- 207 + [28, 0, 38, 255], //----- 208 + [33, 19, 38, 255], //----- 209 + [255, 0, 255, 255], //----- 210 + [255, 127, 255, 255],//----- 211 + [165, 0, 165, 255], //----- 212 + [165, 82, 165, 255], //----- 213 + [127, 0, 127, 255], //----- 214 + [127, 63, 127, 255], //----- 215 + [76, 0, 76, 255], //----- 216 + [76, 38, 76, 255], //----- 217 + [38, 0, 38, 255], //----- 218 + [38, 19, 38, 255], //----- 219 + [255, 0, 191, 255], //----- 220 + [255, 127, 223, 255],//----- 221 + [165, 0, 124, 255], //----- 222 + [165, 82, 145, 255], //----- 223 + [127, 0, 95, 255], //----- 224 + [127, 63, 111, 255], //----- 225 + [76, 0, 57, 255], //----- 226 + [76, 38, 66, 255], //----- 227 + [38, 0, 28, 255], //----- 228 + [38, 19, 33, 255], //----- 229 + [255, 0, 127, 255], //----- 230 + [255, 127, 191, 255],//----- 231 + [165, 0, 82, 255], //----- 232 + [165, 82, 124, 255], //----- 233 + [127, 0, 63, 255], //----- 234 + [127, 63, 95, 255], //----- 235 + [76, 0, 38, 255], //----- 236 + [76, 38, 57, 255], //----- 237 + [38, 0, 19, 255], //----- 238 + [38, 19, 28, 255], //----- 239 + [255, 0, 63, 255], //----- 240 + [255, 127, 159, 255],//----- 241 + [165, 0, 41, 255], //----- 242 + [165, 82, 103, 255], //----- 243 + [127, 0, 31, 255], //----- 244 + [127, 63, 79, 255], //----- 245 + [76, 0, 19, 255], //----- 246 + [76, 38, 47, 255], //----- 247 + [38, 0, 9, 255], //----- 248 + [38, 19, 23, 255], //----- 249 + [84, 84, 84, 255], //----- 250 + [118, 118, 118, 255],//----- 251 + [152, 152, 152, 255],//----- 252 + [186, 186, 186, 255],//----- 253 + [220, 220, 220, 255],//----- 254 + [255, 255, 255, 255],//----- 255 + [255, 255, 255, 255] //----- ByLayer - White +]; + + +var colorMatBuff = new Map(); +export function GetColorIndex(index: number) +{ + if (colorMatBuff.has(index)) + { + return colorMatBuff.get(index); + } + let colorRgb = ColorPalette[index]; + let colorx = new THREE.Color(colorRgb[0], colorRgb[1], colorRgb[2]); + console.log(colorx.getHex()); + let mat = new THREE.MeshStandardMaterial( + { + color: colorx, + side: THREE.DoubleSide, + metalness: 0.5, + emissive: colorx, + roughness: 0.5 + } + ); + colorMatBuff.set(index, mat); + return mat; +} \ No newline at end of file diff --git a/src/Loader/FBXLoader.ts b/src/Loader/FBXLoader.ts new file mode 100644 index 000000000..76e3ecba0 --- /dev/null +++ b/src/Loader/FBXLoader.ts @@ -0,0 +1,57 @@ +//最小限度的使用这个模块. 所以提供了一个导出的头文件. +import * as THREE from "three"; + +export var FBXLoader = require('three-FBXLoader'); +window["threeZlib"] = require("zlib") + +export interface LoaderState +{ + State: boolean, + object?: THREE.Group +} + + +//加载事件 +let onProgress = function (xhr) +{ + if (xhr.lengthComputable) + { + let percentComplete = xhr.loaded / xhr.total * 100; + console.log(Math.round(percentComplete) + '% downloaded'); + } +}; + +//错误事件 +let onError = function (xhr) +{ + console.error(xhr); +}; + +//Loader FBX +export function loadFBX(fileName: string): Promise +{ + let manager = new THREE.LoadingManager(); + let loader = new THREE.FBXLoader(manager); + + + return new Promise((resolve, reject) => + { + loader.load(fileName, + (object) => + { + resolve({ + State: true, + object: object + }) + }, + onProgress, + (xhr) => + { + console.log('xhr: ', xhr); + resolve({ + State: false + }) + } + ) + }); +} \ No newline at end of file