[canvas] dat.GUI로 테스트!

M_yeon·2023년 5월 1일
0

canvas

목록 보기
4/5
post-thumbnail
<body>
    <canvas></canvas>
    <svg>
      <defs>
        <filter id="gooey">
          <feGaussianBlur stdDeviation="40" in="sourceGraphic" result="blur1" />
          <feColorMatrix
            in="blur1"
            mode="matrix"
            values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 100 -23"
          />
        </filter>
      </defs>
    </svg>
    <script type="module" src="./index.js"></script>
  </body>

위처럼 gooey 이펙트를 줄 때 blur 등 값을 얼마나 줘야 하는지 바로바로 테스트 해보고 싶을때는 dat.GUI를 이용하면 된다.

https://cdnjs.com/libraries/dat-gui
이곳에서 script를 복사해 넣어주면 끝!

js파일에서 새로운 인스턴스로 선언만 해주면 되는데,

value값으로 파라미터를 받아서 바꿔주는 형식으로 하고싶어 아래처럼 코드를 짰다

const feGaussianBlur = document.querySelector("feGaussianBlur");
// queryselector로 변수에 할당

const controls = new function () {
  this.blurValue = 40;
  this.alphaChennel = 100;
  this.alphaOffset = -23;
};
// default값으로 html과 같이 설정을 해주고

let gui = new dat.GUI();
// 선언을 해주고 새로고침을 하게 되면 오른쪽 상단에 open Controls 라는 버튼이 생기게 된다

gui.add(controls, "blurValue", 0, 100).onChange((value) => {
  feGaussianBlur.setAttribute("stdDeviation", value);
});
// blur값을 설정해줌으로써 open liveserver로 열고 바로바로 테스트 할 수 있게 된다.

dat.gui로 gooey에 해당하는 값을 조절 했다고 하면 속도 같은것들을 다른 폴더에서 가독성있게 조절하고 싶다한다면

let gui = new dat.GUI();

const f1 = gui.addFolder("gooey Effect");
// folder 생성
f1.add(controls, "blurValue", 0, 100).onChange((value) => {
  feGaussianBlur.setAttribute("stdDeviation", value);
});

f1.add(controls, "alphaChennel", 1, 100).onChange((value) => {
  feColorMatrix.setAttribute(
    "values",
    `1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 ${value} ${controls.alphaOffset}`
  );
});

f1.add(controls, "alphaOffset", -40, 40).onChange((value) => {
  feColorMatrix.setAttribute(
    "values",
    `1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 ${controls.alphaChennel} ${value}`
  );
});

const f2 = gui.addFolder("particle Property");
// folder  생성
f2.open(); // 열린채로 실행
f2.add(controls, "acc", 1, 1.5, 0.01).onChange((value) => {
  particles.forEach((particle) => (particle.acc = value));
});

0개의 댓글