0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3Dツイストする画像(glslify:glsl-rotate)

Posted at

😇 はじめに

今回は簡単に、3Dアニメーション実装で「ツイストする画像」のご紹介です。
こちらはCodeMafiaさんの「Not Equal」で学んだ内容となります。

🌸 今回取り扱うエフェクト

画面収録-2025-07-28-18.48.21.gif

🌸 この記事で分かること/できること

  • glslify、glsl-rotateについて
  • transition(CSS)と、GLSLの比較

🌸 対象者

  • WebGL、Three.js 未経験・初心者

😇 3Dツイスト画像の仕組みを理解する

🌸 今回のコード(ツイスト画像の部分)

vertex.glsl
precision mediump float;

#pragma glslify: easeCubic = require(glsl-easings/cubic-in-out)
#pragma glslify: rotate = require(glsl-rotate/rotate)

varying vec2 vUv;
varying float vDelay;
attribute float aDelay;
uniform float uProgress;

const float HALF_PI = 1.570796327;

void main() {
	vUv = uv;
	vDelay = aDelay;
	vec3 pos = position;
	float delay = clamp(uProgress * 1.2 - aDelay * 0.2, 0., 1.);
	float progress = easeCubic(delay);
	pos.z -= 200.;

	// 画像ツイスト
	vec3 axis = vec3(-1.0, -1.0, 0.0);
	pos = rotate(pos, axis, 4.0 * HALF_PI * progress);

	gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
}

🌸 glslifyとは?

glslify(グリスリファイ)とは、GLSL(シェーディング言語)のコードを簡単にモジュール化・再利用できるようにするツールのこと。

GLSLでは、よく使う関数が再利用できるようにいっぱい用意されてて、それを呼び出して使うんですね。
今回のようなツイスト画像だと、自身でゼロから実装してるとかなり大変かと思います。
用意されてるものは、ありがたく使っちゃいましょう。:angel:

▼モジュール呼び出し(rotate)

#pragma glslify: rotate = require(glsl-rotate/rotate)

▼関数利用(rotate)

// 画像ツイスト
vec3 axis = vec3(-1.0, -1.0, 0.0);
pos = rotate(pos, axis, 4.0 * HALF_PI * progress);

▼rotate関数のそれぞれ引数は以下です。

  • pos:回転させたい座標やベクトル
  • axis:回転の軸(XYZ)を示す3次元ベクトル
  • 4.0 * HALF_PI * progress:回転角度の大きさを指定(→1回転、2回転などきっちり止まるように計算。ここは説明省略します :pray_tone2:

🌸 CSSとGLSLの比較(長所・短所)

以下でみてもらうとわかるように、それぞれ良し悪しあるようで。
CSSは軽いけども、3Dを本格的に表現となると、なかなか厳しいかもしれん。。:hushed:
適材適所で、実装方法変えてくと良さそうですね。

特徴 CSS GLSL
実装難易度 低い 高い
3D・複雑な変形 不向き 得意
軽量・高速 非常に軽い やや重め
動的インタラクション 弱い 強い
学習コスト 低い 高い
リッチ表現 制限あり 上限なし

😇 参考資料

おわりに/まとめ

今回は glsl-rotateで、簡単に3Dツイストする画像の実装方法を確認できました。
CSSからさらに表現の幅が広がるため、身につけておくと良さそうです。:raised_hands:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?