Repository navigation
Expand file tree
/
Copy pathlargePlaneWebGPU.html
More file actions
71 lines (60 loc) · 2.48 KB
/
Copy pathlargePlaneWebGPU.html
File metadata and controls
71 lines (60 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<!DOCTYPE html>
<html>
<body>
<script src="vtkWasmCanvas.js" type="module"></script>
<script src="vtkWasmConfiguration.js" type="module"></script>
<script src="vtkweb.js" type="module"></script>
<script type="module">
import { initializeVTKForRenderingWithWebGPU } from './vtkWasmCanvas.js'
import VTKWebAssemblyModule from './vtkweb.js'
// Acquire a VTK WebGPU configuration.
let vtkCfg = await initializeVTKForRenderingWithWebGPU(null, {requiredLimits: {maxBufferSize: 1024000000}});
// Stream and compile VTK.wasm binary
let vtk = await VTKWebAssemblyModule(vtkCfg);
let canvas = document.getElementById('canvas');
console.log("VTK WebAssembly runtime initialized");
// setup a simple VTK IO pipeline.
let plane = new vtk.vtkPlaneSource();
let mapper = new vtk.vtkPolyDataMapper();
let actor = new vtk.vtkActor();
let renderer = new vtk.vtkRenderer();
let renderWindow = new vtk.vtkRenderWindow();
let renderWindowInteractor = new vtk.vtkRenderWindowInteractor();
// set plane properties
plane.SetXResolution(10000);
plane.SetYResolution(1000);
plane.Update();
{
let polydata = plane.GetOutput();
let numPoints = polydata.GetNumberOfPoints();
let numPolys = polydata.GetNumberOfPolys();
// print data information
console.log(numPoints + " points, ", numPolys + " triangles, ", polydata.GetActualMemorySize() + " kB");
}
// connect reader to the mapper
mapper.SetInputConnection(plane.GetOutputPort());
actor.SetMapper(mapper);
// add the actor to the renderer.
renderer.AddActor(actor);
renderer.GradientBackgroundOn();
renderer.SetBackground(0.96078431, 0.87058824, 0.70196078);
renderWindow.AddRenderer(renderer);
renderWindowInteractor.SetRenderWindow(renderWindow);
// for access in dev console.
window.vtk = vtk;
window.renderer = renderer;
window.renderWindow = renderWindow;
window.renderWindowInteractor = renderWindowInteractor;
// sends a resize event so that the render window fills up browser tab dimensions.
setTimeout(() => {
window.dispatchEvent(new Event('resize'));
}, 0);
// focus on the canvas to grab keyboard inputs.
canvas.setAttribute('tabindex', '0');
// grab focus when the render window region receives mouse clicks.
canvas.addEventListener('click', () => canvas.focus());
// start the event loop on browser UI thread.
renderWindowInteractor.Start()
</script>
</body>
</html>