()
| 365 | // caustics, foam, and volumetric fog when those land. |
| 366 | |
| 367 | function setupWater(): void { |
| 368 | const cz = 25.0; |
| 369 | |
| 370 | // Water plane |
| 371 | const waterNode = createSceneNode(); |
| 372 | const wv = makePlaneVertices(30, 20); |
| 373 | const wi = makePlaneIndices(); |
| 374 | updateSceneNodeGeometry(waterNode, wv, wi); |
| 375 | const wm = mat4Translate(mat4Identity(), { x: 0, y: 0.2, z: cz }); |
| 376 | setSceneNodeTransform(waterNode, wm); |
| 377 | setSceneNodeWaterMaterial(waterNode, 0.15, 1.5, 0.1, 0.3, 0.5, 0.6); |
| 378 | setSceneNodeReceiveShadow(waterNode, true); |
| 379 | |
| 380 | // Rocks / objects sticking out of water |
| 381 | placeSphere(3, 0.8, cz - 3, 1.5, 0.45, 0.42, 0.4, 0.8, 0.0); |
| 382 | placeSphere(-4, 0.5, cz + 2, 1.2, 0.5, 0.45, 0.4, 0.9, 0.0); |
| 383 | placeSphere(6, 1.2, cz + 4, 2.0, 0.4, 0.38, 0.35, 0.7, 0.0); |
| 384 | |
| 385 | // Pillar rising from water |
| 386 | placeCube(0, 2, cz, 1, 4, 1, 0.55, 0.5, 0.48, 0.4, 0.0); |
| 387 | |
| 388 | // Metallic sphere floating above (for reflection testing) |
| 389 | placeSphere(0, 4.5, cz, 1.0, 0.95, 0.93, 0.88, 0.05, 1.0); |
| 390 | |
| 391 | // Shore / ground under water extending outward |
| 392 | placeCube(0, -0.5, cz - 12, 40, 0.1, 8, 0.6, 0.55, 0.45, 0.8, 0.0); |
| 393 | } |
| 394 | |
| 395 | // ============================================================ |
| 396 | // Zone 5: Geometry Density (centered at x=25, z=-25) |
no test coverage detected