Skip to content

Portals

In THREE.js, there is a construct called WebGLRenderTarget. It is used to render the scene into a texture and then render the texture into the canvas. This is useful for things like post-processing effects, or HUD-like visuals.

In Angular Three, we can use NgtPortal component to create an off-screen buffer that can be used to render secondary scenes.

NgtPortal provides a layered NgtSignalStore<NgtState> that its children can inject. This makes sure that children of NgtPortal access the state of the NgtPortal and not the root NgtSignalStore<NgtState>.

@Component({
template: `
<ngt-mesh>
<ngt-torus-geometry />
</ngt-mesh>
<ngt-portal [container]="secondaryScene">
<ng-template portalContent>
<ngts-perspective-camera [options]="{ makeDefault: true }" />
<ngt-mesh>
<ngt-box-geometry />
</ngt-mesh>
</ng-template>
</ngt-portal>
`,
imports: [NgtPortal, NgtPortalContent],
})
export class HUD {
secondaryScene = new Scene();
}

The portal can have its own scene, camera, and children.

Examples

TBD