@hello-terrain/three 0.0.0-alpha.5 → 0.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -10,17 +10,25 @@ class TerrainGeometry extends three.BufferGeometry {
10
10
  constructor(innerSegments = 14, extendUV = false) {
11
11
  super();
12
12
  if (innerSegments < 1 || !Number.isFinite(innerSegments) || !Number.isInteger(innerSegments)) {
13
- throw new Error(`Invalid innerSegments: ${innerSegments}. Must be a positive integer.`);
13
+ throw new Error(
14
+ `Invalid innerSegments: ${innerSegments}. Must be a positive integer.`
15
+ );
14
16
  }
15
17
  try {
16
18
  this.setIndex(this.generateIndices(innerSegments));
17
19
  this.setAttribute(
18
20
  "position",
19
- new three.BufferAttribute(new Float32Array(this.generatePositions(innerSegments)), 3)
21
+ new three.BufferAttribute(
22
+ new Float32Array(this.generatePositions(innerSegments)),
23
+ 3
24
+ )
20
25
  );
21
26
  this.setAttribute(
22
27
  "normal",
23
- new three.BufferAttribute(new Float32Array(this.generateNormals(innerSegments)), 3)
28
+ new three.BufferAttribute(
29
+ new Float32Array(this.generateNormals(innerSegments)),
30
+ 3
31
+ )
24
32
  );
25
33
  this.setAttribute(
26
34
  "uv",
@@ -56,17 +64,19 @@ class TerrainGeometry extends three.BufferGeometry {
56
64
  * | / | \ | / | \ |
57
65
  * o---o---o---o---o
58
66
  *
59
- * INNER GRID (consistent diagonal, no rotational symmetry):
60
- * o---o---o
61
- * | \ | \ |
62
- * o---o---o
63
- * | \ | \ |
64
- * o---o---o
67
+ * INNER GRID (alternating diagonals checkerboard pattern):
68
+ * o---o---o---o---o
69
+ * | \ | / | \ | / |
70
+ * o---o---o---o---o
71
+ * | / | \ | / | \ |
72
+ * o---o---o---o---o
73
+ * | \ | / | \ | / |
74
+ * o---o---o---o---o
65
75
  *
66
76
  * Where o = vertex
67
77
  * Each square cell is split into 2 triangles.
68
78
  * - Skirt cells (outer ring): diagonal flip based on quadrant for corner correctness
69
- * - Inner cells: consistent diagonal direction (all triangles "point" the same way)
79
+ * - Inner cells: alternating diagonal via (x+y)%2 to reduce interpolation artifacts
70
80
  *
71
81
  * Vertex layout (for innerSegments = 2):
72
82
  *
@@ -112,7 +122,7 @@ class TerrainGeometry extends three.BufferGeometry {
112
122
  const topHalf = y < mid;
113
123
  useDefaultDiagonal = leftHalf && topHalf || !leftHalf && !topHalf;
114
124
  } else {
115
- useDefaultDiagonal = true;
125
+ useDefaultDiagonal = (x + y) % 2 === 0;
116
126
  }
117
127
  if (useDefaultDiagonal) {
118
128
  indices.push(a, d, b);
package/dist/index.d.cts CHANGED
@@ -34,17 +34,19 @@ declare class TerrainGeometry extends BufferGeometry {
34
34
  * | / | \ | / | \ |
35
35
  * o---o---o---o---o
36
36
  *
37
- * INNER GRID (consistent diagonal, no rotational symmetry):
38
- * o---o---o
39
- * | \ | \ |
40
- * o---o---o
41
- * | \ | \ |
42
- * o---o---o
37
+ * INNER GRID (alternating diagonals checkerboard pattern):
38
+ * o---o---o---o---o
39
+ * | \ | / | \ | / |
40
+ * o---o---o---o---o
41
+ * | / | \ | / | \ |
42
+ * o---o---o---o---o
43
+ * | \ | / | \ | / |
44
+ * o---o---o---o---o
43
45
  *
44
46
  * Where o = vertex
45
47
  * Each square cell is split into 2 triangles.
46
48
  * - Skirt cells (outer ring): diagonal flip based on quadrant for corner correctness
47
- * - Inner cells: consistent diagonal direction (all triangles "point" the same way)
49
+ * - Inner cells: alternating diagonal via (x+y)%2 to reduce interpolation artifacts
48
50
  *
49
51
  * Vertex layout (for innerSegments = 2):
50
52
  *
package/dist/index.d.mts CHANGED
@@ -34,17 +34,19 @@ declare class TerrainGeometry extends BufferGeometry {
34
34
  * | / | \ | / | \ |
35
35
  * o---o---o---o---o
36
36
  *
37
- * INNER GRID (consistent diagonal, no rotational symmetry):
38
- * o---o---o
39
- * | \ | \ |
40
- * o---o---o
41
- * | \ | \ |
42
- * o---o---o
37
+ * INNER GRID (alternating diagonals checkerboard pattern):
38
+ * o---o---o---o---o
39
+ * | \ | / | \ | / |
40
+ * o---o---o---o---o
41
+ * | / | \ | / | \ |
42
+ * o---o---o---o---o
43
+ * | \ | / | \ | / |
44
+ * o---o---o---o---o
43
45
  *
44
46
  * Where o = vertex
45
47
  * Each square cell is split into 2 triangles.
46
48
  * - Skirt cells (outer ring): diagonal flip based on quadrant for corner correctness
47
- * - Inner cells: consistent diagonal direction (all triangles "point" the same way)
49
+ * - Inner cells: alternating diagonal via (x+y)%2 to reduce interpolation artifacts
48
50
  *
49
51
  * Vertex layout (for innerSegments = 2):
50
52
  *
package/dist/index.d.ts CHANGED
@@ -34,17 +34,19 @@ declare class TerrainGeometry extends BufferGeometry {
34
34
  * | / | \ | / | \ |
35
35
  * o---o---o---o---o
36
36
  *
37
- * INNER GRID (consistent diagonal, no rotational symmetry):
38
- * o---o---o
39
- * | \ | \ |
40
- * o---o---o
41
- * | \ | \ |
42
- * o---o---o
37
+ * INNER GRID (alternating diagonals checkerboard pattern):
38
+ * o---o---o---o---o
39
+ * | \ | / | \ | / |
40
+ * o---o---o---o---o
41
+ * | / | \ | / | \ |
42
+ * o---o---o---o---o
43
+ * | \ | / | \ | / |
44
+ * o---o---o---o---o
43
45
  *
44
46
  * Where o = vertex
45
47
  * Each square cell is split into 2 triangles.
46
48
  * - Skirt cells (outer ring): diagonal flip based on quadrant for corner correctness
47
- * - Inner cells: consistent diagonal direction (all triangles "point" the same way)
49
+ * - Inner cells: alternating diagonal via (x+y)%2 to reduce interpolation artifacts
48
50
  *
49
51
  * Vertex layout (for innerSegments = 2):
50
52
  *
package/dist/index.mjs CHANGED
@@ -8,17 +8,25 @@ class TerrainGeometry extends BufferGeometry {
8
8
  constructor(innerSegments = 14, extendUV = false) {
9
9
  super();
10
10
  if (innerSegments < 1 || !Number.isFinite(innerSegments) || !Number.isInteger(innerSegments)) {
11
- throw new Error(`Invalid innerSegments: ${innerSegments}. Must be a positive integer.`);
11
+ throw new Error(
12
+ `Invalid innerSegments: ${innerSegments}. Must be a positive integer.`
13
+ );
12
14
  }
13
15
  try {
14
16
  this.setIndex(this.generateIndices(innerSegments));
15
17
  this.setAttribute(
16
18
  "position",
17
- new BufferAttribute(new Float32Array(this.generatePositions(innerSegments)), 3)
19
+ new BufferAttribute(
20
+ new Float32Array(this.generatePositions(innerSegments)),
21
+ 3
22
+ )
18
23
  );
19
24
  this.setAttribute(
20
25
  "normal",
21
- new BufferAttribute(new Float32Array(this.generateNormals(innerSegments)), 3)
26
+ new BufferAttribute(
27
+ new Float32Array(this.generateNormals(innerSegments)),
28
+ 3
29
+ )
22
30
  );
23
31
  this.setAttribute(
24
32
  "uv",
@@ -54,17 +62,19 @@ class TerrainGeometry extends BufferGeometry {
54
62
  * | / | \ | / | \ |
55
63
  * o---o---o---o---o
56
64
  *
57
- * INNER GRID (consistent diagonal, no rotational symmetry):
58
- * o---o---o
59
- * | \ | \ |
60
- * o---o---o
61
- * | \ | \ |
62
- * o---o---o
65
+ * INNER GRID (alternating diagonals checkerboard pattern):
66
+ * o---o---o---o---o
67
+ * | \ | / | \ | / |
68
+ * o---o---o---o---o
69
+ * | / | \ | / | \ |
70
+ * o---o---o---o---o
71
+ * | \ | / | \ | / |
72
+ * o---o---o---o---o
63
73
  *
64
74
  * Where o = vertex
65
75
  * Each square cell is split into 2 triangles.
66
76
  * - Skirt cells (outer ring): diagonal flip based on quadrant for corner correctness
67
- * - Inner cells: consistent diagonal direction (all triangles "point" the same way)
77
+ * - Inner cells: alternating diagonal via (x+y)%2 to reduce interpolation artifacts
68
78
  *
69
79
  * Vertex layout (for innerSegments = 2):
70
80
  *
@@ -110,7 +120,7 @@ class TerrainGeometry extends BufferGeometry {
110
120
  const topHalf = y < mid;
111
121
  useDefaultDiagonal = leftHalf && topHalf || !leftHalf && !topHalf;
112
122
  } else {
113
- useDefaultDiagonal = true;
123
+ useDefaultDiagonal = (x + y) % 2 === 0;
114
124
  }
115
125
  if (useDefaultDiagonal) {
116
126
  indices.push(a, d, b);
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "type": "git",
7
7
  "url": "https://github.com/kenjinp/hello-terrain.git"
8
8
  },
9
- "version": "0.0.0-alpha.5",
9
+ "version": "0.0.0-alpha.6",
10
10
  "type": "module",
11
11
  "main": "./dist/index.mjs",
12
12
  "module": "./dist/index.mjs",
@@ -29,9 +29,9 @@
29
29
  "mitata": "^1.0.34",
30
30
  "unbuild": "^3.5.0",
31
31
  "vitest": "^4.0.16",
32
- "@config/oxfmt": "0.1.0",
32
+ "@config/oxlint": "0.1.0",
33
33
  "@config/typescript": "0.1.0",
34
- "@config/oxlint": "0.1.0"
34
+ "@config/oxfmt": "0.1.0"
35
35
  },
36
36
  "dependencies": {
37
37
  "@hello-terrain/work": "0.1.1"