[x3d-public] Extensibility > proto extends builtin > how declare/detect type
GPU Group
gpugroup at gmail.com
Sun Nov 9 18:33:34 PST 2025
"the first node" Thanks Michalis - I should know that sorry I forgot.
-Doug
On Sun, Nov 9, 2025 at 5:33 PM Michalis Kamburelis <
michalis at castle-engine.io> wrote:
> The first node within the prototype "expansion" (specified in <ProtoBody>
> in X3D XML encoding) is the node that effectively is inserted into the node
> graph in place of the <ProtoInstance>.
>
> So to answer your question, I think it's just "the first node".
>
> Here's an example of prototype extending a built-in Material node, since
> you mentioned this example:
> https://github.com/castle-engine/demo-models/blob/master/x3d/proto_of_material.x3d
> . It should be rendered as a red box. (And it is, by both FreeWRL and
> Castle Model Viewer, just checked :) ).
>
> Regards,
> Michalis
>
> On Sunday, November 9th, 2025 at 15:23, GPU Group via x3d-public <
> x3d-public at web3d.org> wrote:
>
> Builtin - nodes defined in x3d specs
> Q. how to declare / detect what builtin node type a ProtoDeclare extends?
> Thanks,
> -Doug Sanden
> Normally if we want to change parameters on a builtin node, we tinker
> directly with the builtin node in the scene with routes and scripts.
> In theory builtin nodes are extensible -- a ProtoDeclare can wrap a
> builtin, IS all the fields, and add some spice with a Script node inside
> the proto that updates some fields on each frame. But how is the x3d
> browser code supposed to detect what builtin node type is being extended?
> For example, Shape.appearance.material can take different types of
> material nodes: UnlitMaterial, Material, PhysicalMaterial. In browser
> application code there's different handling of each type:
> if mat.type == UNLIT then
> ...
> else if mat.type == MATERIAL then
> ...
> else if mat.type == PHYSICAL then
> ...
> endif
> But a ProtoInstance has a ProtoDeclare type which doesn't give a hint as
> to which builtin type the ProtoDeclare is extending.
> Q1. How is the code supposed to detect which builtin type to process?
> Q2. If a ProtoDeclare extends a previous ProtoDeclare, which extends a
> builtin type, and assuming single-inheritance chain from builtin, how can
> browser code detect the original bultin being extnded?
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20251109/77660b7a/attachment.html>
More information about the x3d-public
mailing list