Setting the file. One moment.
Debug Views · Frost Sequence Camera Orbit · heygen-com/hyperframes · Skills Docs
ContentsBack to the top of the page Three Mesh BVH LICENSE
(opens in a new tab)
source/src/scene/ DebugViews.ts
TypeScript · 83 lines · 3 KB
import
type
{ ErosionField }
from
"../erosion/ErosionField"
;
7 import type { Powder } from "../powder/Powder" ;
8 import type { Interaction } from "../core/interaction" ;
9
10 export class DebugViews {
11 readonly group = new THREE . Group ();
12 private erosionQuad : THREE . Mesh ;
13 private densityQuad : THREE . Mesh ;
14 private hitEntry : THREE . Mesh ;
15 private hitExit : THREE . Mesh ;
16 private uSlice = uniform ( 0.5 );
17
18 constructor (
19 readonly camera : THREE . Camera ,
20 erosion : ErosionField ,
21 powder : Powder ,
22 ) {
23 const mkQuad = ( tex : THREE . Texture , mode : "erosion" | "density" ) => {
24 const m = new THREE . MeshBasicNodeMaterial ();
25 const s = texture3D (tex). sample ( vec3 ( uv (), this .uSlice)). level ( 0 );
26 m.colorNode =
27 mode === "erosion"
28 ? vec4 (s.r, s.r. mul ( 0.6 ). add (s.g. mul ( 0.8 )), s.r. mul ( 0.6 ), 1.0 )
29 : vec4 (s.r. mul ( 2.0 ), s.g, s.b, 1.0 );
30 m.depthTest = false ;
31 m.depthWrite = false ;
32 m.transparent = false ;
33 const q = new THREE . Mesh ( new THREE . PlaneGeometry ( 1 , 1 ), m);
34 q.renderOrder = 1000 ;
35 q.frustumCulled = false ;
36 return q;
37 };
38 this .erosionQuad = mkQuad (erosion.tex, "erosion" );
39 this .densityQuad = mkQuad (powder.densityTex, "density" );
40 const dot = new THREE . SphereGeometry ( 0.03 , 12 , 8 );
41 this .hitEntry = new THREE . Mesh (dot, new THREE . MeshBasicNodeMaterial ({ color: "#ff4040" }));
42 this .hitExit = new THREE . Mesh (dot, new THREE . MeshBasicNodeMaterial ({ color: "#40a0ff" }));
43 this .group. add ( this .hitEntry, this .hitExit);
44 // slices live in camera space (lower-left corner)
45 camera. add ( this .erosionQuad, this .densityQuad);
46 void float;
47 }
48
49 update ( interaction : Interaction ) {
50 const dbg = D .debug;
51 this .uSlice.value = dbg.erosionSliceZ;
52 const cam = this .camera as THREE . PerspectiveCamera ;
53 const dist = 3 ;
54 const h = 2 * dist * Math. tan ( THREE .MathUtils. degToRad (cam.fov / 2 )),
55 w = h * cam.aspect;
56 const size = h * 0.28 ;
57 this .erosionQuad.visible = dbg.showErosionSlice;
58 this .erosionQuad.scale. set (size, size, 1 );
59 this .erosionQuad.position. set ( - w / 2 + size * 0.6 , - h / 2 + size * 0.6 , - dist);
60 this .densityQuad.visible = dbg.showDensityGrid;
61 this .densityQuad.scale. set (size, size, 1 );
62 this .densityQuad.position. set (
63 - w / 2 + size * (dbg.showErosionSlice ? 1.75 : 0.6 ),
64 - h / 2 + size * 0.6 ,
65 - dist,
66 );
67 const show = dbg.showHitPoints && interaction.hasHit;
68 this .hitEntry.visible = show;
69 this .hitExit.visible = show;
70 if (show) {
71 this .hitEntry.position. copy (interaction.hitEntry);
72 this .hitExit.position. copy (interaction.hitExit);
73 }
74 }
75
76 dispose () {
77 this .camera. remove ( this .erosionQuad, this .densityQuad);
78 this .erosionQuad.geometry. dispose ();
79 this .densityQuad.geometry. dispose ();
80 ( this .erosionQuad.material as THREE . Material ). dispose ();
81 ( this .densityQuad.material as THREE . Material ). dispose ();
82 }
83 }