3/12

日記

2026/03/12

GLSL

トルシェタイル

vec2 rotateTilePattern(vec2 st) {
 st *= 2.0;

 // 2倍に伸ばしたst(2x2の格子)を、格子ごとにindex分けする。
 float index = 0.0;
 index += step(1.0, st.x);
 index += step(1.0, st.y) * 2.0;

 st = fract(_st); //戻す

 if(index == 1.0) {// st回転}
 else if(index == 2.0) {// st別回転}
 else if(index == 3.0) {// st別回転}

 return st;
}

ランダム

y = fract(sin(x) * 1.0);

sinは-1~1なので、その小数部分は0~1の正。*1.0の部分を高めることで、擬似的にランダムな値が得られる。
100000にすると、十分ランダム。

この疑似ランダムの性質

可視化すると、中央0.5付近に集まっている。
このランダムを乗算すると0に、
sqrtで平方根を取ると1に集中する。

クラスの型

type SceneLike = {
 scene: 
 camera:
 update: () => void;
 resize: () => void;
 destroy: () => void;
}

class 〇〇 implement SceneLike

implementで、「最低限これは持つ」みたいな型定義ができる。それ以上持っていても良い。

Three.js

GLSL - カメラからの距離

vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
float cameraZ = length(mvPosition.xyz);
...
gl_Position = projectionMatrix * mvPositoin;

mvPositionはビュー空間(カメラを原点とした座標系)での頂点位置なので、length(mvPosition.xyz)でその頂点までの距離になる

内省

食べ物も安定してきた。勉強時間も確保できているし、一日のルーティンができてきた。
アドラー心理学によると、自分のことは自分で決めることが幸せということらしい。ごもっとも。
英語の勉強と読書はできてないな。何を目指しているんだか。

I haven't been studying English or reading. What am I aiming for.
haven't, don't, never などの否定の後では、複数のことを「どちらもしていない」と言うときには or を使います。