1function updateClock(){
 2  timeParts = new Date().toLocaleTimeString().split(" ")
 3  document.getElementById("clock").innerHTML = timeParts[0];
 4  const timeSuffixDiv = document.createElement("div");
 5  timeSuffixDiv.id = "time-suffix"
 6  timeSuffixDiv.innerHTML = timeParts[1]
 7  document.getElementById("clock").appendChild(timeSuffixDiv);
 8  const dateDiv = document.createElement("div");
 9  dateDiv.id = "clock-date"
10  dateDiv.innerHTML = String(new Date()).split(" ").slice(0,4).join(" ")
11  document.getElementById("clock").appendChild(dateDiv);
12}
13
14setInterval(updateClock,1000);
15
16var bgColor = 0x000000;
17// 参考:
18// Processingで三角関数を使って球体を作る - Processing中毒者の嘔吐物
19// http://p5aholic.hatenablog.com/entry/2015/06/15/194250
20// シーン作るぞ
21var scene = new THREE.Scene();
22// scene.fog = new THREE.FogExp2(bgColor, 0.004);
23
24// カメラ作る
25var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000 );
26camera.position.set(0,0,250);
27
28// レンダラ作る
29var renderer = new THREE.WebGLRenderer({
30  antialias:true
31});
32renderer.setClearColor( bgColor );
33renderer.setSize(window.innerWidth, window.innerHeight);
34renderer.domElement.id = "globe-render";
35document.getElementById("container").appendChild(renderer.domElement);
36
37// グループつくる
38var group = new THREE.Object3D();
39
40// 半径
41var radius = 120;
42var separation = 20;
43var globeSpeed = 0.1;
44
45for ( var s = 0; s <= 180; s+=separation ) {
46  // 0 <= s <= 180, なんで -1 <= Math.cos(radianS) <= 1
47  // なんで zが -radius <= z <= radius
48  var radianS = s*Math.PI / 180;
49  var pZ = radius * Math.cos(radianS);
50
51  // 円に沿って点描く
52  for ( var t = 0; t < 360; t+=separation ) {
53    // 角度をラジアンに
54    var radianT = t*Math.PI / 180;
55    // 点の座標を計算
56    // sin(radianS)は0→1→0の順で変化する
57    // radius * sin(radianS)は0→200→0になる
58    var pX = radius* Math.sin(radianS) * Math.cos(radianT);
59    var pY = radius* Math.sin(radianS) * Math.sin(radianT);
60
61    var geometory = new THREE.SphereGeometry(1.5,6,6);
62    var material = new THREE.MeshBasicMaterial({
63      color: 0xf5f5f5
64    });
65    var mesh = new THREE.Mesh(geometory, material);
66    mesh.position.x = pX;
67    mesh.position.y = pY;
68    mesh.position.z = pZ;
69    group.add(mesh);
70  }
71
72}
73
74scene.add(group);
75
76// 毎フレームアップデートするぞ
77function update() {
78  // グループを回転
79  var rotateX = group.rotation.x + 0.002*globeSpeed;
80  var rotateY = group.rotation.y + 0.005*globeSpeed;
81  var rotateZ = group.rotation.z + 0.01*globeSpeed;
82  group.rotation.set( rotateX, rotateY, rotateZ );
83
84  // レンダリング
85  camera.lookAt(scene.position);
86  renderer.render(scene,camera);
87
88  // 次のアニメーション呼び出す
89  requestAnimationFrame(update);
90}
91update();