immersive-web/hit-test

Current XRRay construction semantics incorrect

Manishearth opened this issue · 1 comments

(Previously #83)

Currently the XRRay vector constructor is specified as

 [Constructor(optional DOMPointInit origin, optional DOMPointInit direction)]

however, this is no longer allowed by the current WebIDL spec, it needs to be

   constructor(optional DOMPointInit origin = {}, optional DOMPointInit direction = {}); 

(whatwg/webidl#750 forces us to default to {})

Given that whatwg/webidl#750 forces optional dictionary arguments to specify a default, we can no longer distinguish between "direction was not specified" and "direction was specified as {0, 0, 0, 1}".

Unfortunately, {0, 0, 0, 1} is not a valid direction value! The w coordinate should be zero; and ideally we should throw for nonzero w (which is what Chrome does, despite being unspecced). But we can't tell the difference between "direction unspecified" and "direction is {0, 0, 0, 1}", so this would end up throwing for new XRRay({...}) with an unspecified direction.

We'd like to default it to the -Z axis instead. We should use a new dictionary here. We should also potentially handle the w coordinate in origin instead of ignoring it.