사용자가 원하는 형상을 구현하고 추가할 수 있습니다.
JS SCRIPT
var hilbertScalefactor = 0.001;
var hilbertScale = 0.1;
// 시작
init = function()
{
if( userLayer == null )
{
userLayer = new CMWORLD.UserObjectLayer("lines");
cmworld.addLayer(userLayer);
}
userLayer.clear();
}
addcurve = function (name, ptlist, color) {
var earthRadius = CMWORLD.cm_const.EarthRadius;
var earthpts = [];
var origin = CMWORLD.CmMathEngine.Geo2Cartesian(ptlist[0].x, ptlist[0].y, ptlist[0].z + earthRadius)
for (var i = 0; i < ptlist.length; i++) {
var pt = CMWORLD.CmMathEngine.Geo2Cartesian(ptlist[i].x, ptlist[i].y, ptlist[i].z + earthRadius);
pt.x = pt.x - origin.x;
pt.y = pt.y - origin.y;
pt.z = pt.z - origin.z;
earthpts.push(pt);
}
var randomSpline = new THREE.CatmullRomCurve3(earthpts);
var extrudeSettings = {
steps: 200,
bevelEnabled: false,
extrudePath: randomSpline
};
var pts = [], numPts = 5;
for (var i = 0; i < numPts * 2; i++) {
var l = i % 2 == 1 ? 1 : 2;
var a = i / numPts * Math.PI;
pts.push(new THREE.Vector3(Math.cos(a) * l, Math.sin(a) * l, l ));
}
var shape = new THREE.Shape(pts);
var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);
var material2 = new THREE.MeshLambertMaterial({ color: color, wireframe: false });
var mesh = new THREE.Mesh(geometry, material2);
var obj = new CMWORLD.UserObject(name, mesh, new THREE.Vector3(ptlist[0].x, ptlist[0].y, ptlist[0].z));
userLayer.add(obj);
}
curveExample = function () {
addcurve("1",
[
new THREE.Vector3(127.0799604911314, 37.51204520560778, 64.042545029893517),
new THREE.Vector3(127.08026907454185, 37.51246594713586, 65.387156971730292),
new THREE.Vector3(127.08055898434802, 37.51272709864432, 65.74553408101201),
new THREE.Vector3(127.08073241754926, 37.513020422907104, 65.259078756906092),
new THREE.Vector3(127.08092113666363, 37.513458060374674, 65.225857456214726),
new THREE.Vector3(127.08111568032083, 37.51374561402145, 65.417504243552685),
new THREE.Vector3(127.08122396020417, 37.51423268965022, 66.555781048722565)],
0xff8800);
addcurve("2",
[
new THREE.Vector3(127.0810681840114, 37.5119329969162, 74.144113779067993),
new THREE.Vector3(127.08128601733961, 37.512409105142886, 77.939757961779833),
new THREE.Vector3(127.0815926771561, 37.51294277881857, 75.28973682411015),
new THREE.Vector3(127.08187040020877, 37.513440928686, 75.169383552856743),
new THREE.Vector3(127.08218728582315, 37.5139410321471, 76.011962137185037)],
0x00ff88);
addcurve("3",
[
new THREE.Vector3(127.08187883524158, 37.51185418652384, 34.25681774970144),
new THREE.Vector3(127.081975834574, 37.51223854870383, 35.07149467524141),
new THREE.Vector3(127.08226027081622, 37.51254071129296, 35.254531641490757),
new THREE.Vector3(127.08250851480298, 37.51286205491893, 35.585421460680664),
new THREE.Vector3(127.0825553599883, 37.51307755185187, 35.20221547037363),
new THREE.Vector3(127.08286338436375, 37.513380592853856, 35.176088826730847),
new THREE.Vector3(127.082857030148, 37.51379360368558, 36.45603223145008)],
0x8800ff);
var eye_x = 127.08174188396235;
var eye_y = 37.51231017799103;
var eye_h = 200;
var look_x = 127.08174188396235;
var look_y = 37.51231017799103;
var look_h = 10;
cmworld.gotoLookAt(eye_x, eye_y, eye_h, look_x, look_y, look_h);
}
hilbert3D = function (center, size, iterations, v0, v1, v2, v3, v4, v5, v6, v7) {
// Default Vars
var center = undefined !== center ? center : new THREE.Vector3(0, 0, 0),
size = undefined !== size ? size : 10,
half = size / 2,
iterations = undefined !== iterations ? iterations : 1,
v0 = undefined !== v0 ? v0 : 0,
v1 = undefined !== v1 ? v1 : 1,
v2 = undefined !== v2 ? v2 : 2,
v3 = undefined !== v3 ? v3 : 3,
v4 = undefined !== v4 ? v4 : 4,
v5 = undefined !== v5 ? v5 : 5,
v6 = undefined !== v6 ? v6 : 6,
v7 = undefined !== v7 ? v7 : 7
;
var vec_s = [
new THREE.Vector3(center.x - half, center.y + half, center.z - half),
new THREE.Vector3(center.x - half, center.y + half, center.z + half),
new THREE.Vector3(center.x - half, center.y - half, center.z + half),
new THREE.Vector3(center.x - half, center.y - half, center.z - half),
new THREE.Vector3(center.x + half, center.y - half, center.z - half),
new THREE.Vector3(center.x + half, center.y - half, center.z + half),
new THREE.Vector3(center.x + half, center.y + half, center.z + half),
new THREE.Vector3(center.x + half, center.y + half, center.z - half)
];
var vec = [
vec_s[v0],
vec_s[v1],
vec_s[v2],
vec_s[v3],
vec_s[v4],
vec_s[v5],
vec_s[v6],
vec_s[v7]
];
// Recurse iterations
if (--iterations >= 0) {
var tmp = [];
Array.prototype.push.apply(tmp, hilbert3D(vec[0], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1));
Array.prototype.push.apply(tmp, hilbert3D(vec[1], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));
Array.prototype.push.apply(tmp, hilbert3D(vec[2], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));
Array.prototype.push.apply(tmp, hilbert3D(vec[3], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));
Array.prototype.push.apply(tmp, hilbert3D(vec[4], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));
Array.prototype.push.apply(tmp, hilbert3D(vec[5], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));
Array.prototype.push.apply(tmp, hilbert3D(vec[6], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));
Array.prototype.push.apply(tmp, hilbert3D(vec[7], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7));
// Return recursive call
return tmp;
}
// Return complete Hilbert Curve.
return vec;
}