ソースを参照

a script to create sliders for uniforms

Lucas Stadler 10 年 前
コミット
0d3181d4a9
共有1 個のファイルを変更した74 個の追加0 個の削除を含む
  1. 74 0
      glsl/sliders.js

+ 74 - 0
glsl/sliders.js

@ -0,0 +1,74 @@
1
document.body.innerHTML = "";
2
var styleEl = document.createElement("style");
3
styleEl.textContent = `
4
.container .slider {
5
  margin-left: 1em;
6
}
7
`;
8
document.head.appendChild(styleEl);
9
10
function makeSlider(name, range, onChange) {
11
  var sliderContainerEl = document.createElement("div");
12
  sliderContainerEl.className = "slider";
13
14
  if (name) {
15
    var sliderLabelEl = document.createElement("label");
16
    sliderLabelEl.textContent = name;
17
    sliderContainerEl.appendChild(sliderLabelEl);
18
  }
19
20
  var sliderEl = document.createElement("input");
21
  sliderEl.type = "range";
22
  sliderEl.min = range[0];
23
  sliderEl.max = range[2];
24
  sliderEl.step = Math.min(0.01, (range[2] - range[0]) / 100);
25
  sliderEl.value = range[1];
26
  sliderEl.style.verticalAlign = "middle";
27
  sliderEl.addEventListener("input", onChange);
28
  sliderContainerEl.appendChild(sliderEl);
29
30
  var sliderValueEl = document.createElement("span");
31
  sliderValueEl.textContent = sliderEl.value;
32
  sliderContainerEl.appendChild(sliderValueEl);
33
34
  sliderEl.addEventListener("input", () => sliderValueEl.textContent = sliderEl.value);
35
  
36
  return sliderContainerEl;
37
}
38
39
function makeMultiSlider(name, ranges, onChange) {
40
  var containerEl = document.createElement("div");
41
  containerEl.className = "container";
42
  document.body.appendChild(containerEl);
43
      
44
  var labelEl = document.createElement("label");
45
  labelEl.textContent = name;
46
  containerEl.appendChild(labelEl);
47
    
48
  var names = [".x", ".y", ".z", ".y"];
49
  ranges.forEach((range, i) => {
50
    containerEl.appendChild(makeSlider(names[i], range));
51
  });
52
  
53
  return containerEl;
54
}
55
56
function addSliders(parent, sliders) {
57
  sliders.forEach((slider) => {
58
    switch (slider.type) {
59
      case "float":
60
        parent.appendChild(makeSlider(slider.name, slider.range));
61
        break;
62
      case "vec2":
63
      case "vec3":
64
        parent.appendChild(makeMultiSlider(slider.name, slider.range));
65
        break;
66
      default:
67
        parent.innerHTML += "unknown slider type " + slider.type;
68
    }
69
  });
70
}
71
72
var sliders = [{"name":" iPosition","type":"vec3","range":[[0.01,0.52,1.03],[0.04,0.55,1.06],[0.07,0.58,1.09]]},{"name":" iResolution","type":"vec2","range":[[0.01,0.52,1.03],[0.04,0.55,1.06]]},{"name":"fancyness","type":"float","range":[0.01,0.52,1.03]}];
73
74
addSliders(document.body, sliders);