[API REVIEW] RT-30171: 3D versions of localToScreen and screenToLocal
Pavel Safrata
pavel.safrata at oracle.com
Wed May 15 06:14:26 PDT 2013
Richard, are we OK with 3D versions of localToScreen and no 3D versions
of screenToLocal? Can I still consider the API approved?
Thanks,
Pavel
On 14.5.2013 7:55, Chien Yang wrote:
> Hi Pavel,
>
> Kevin and I did chat about this briefly today. We agree that it is
> better to remove the 3D version of screenToLocal for now.
>
> Thanks,
> - Chien
>
> On 5/13/2013 8:33 AM, Pavel Safrata wrote:
>> So it looks like there is no straightforward solution right now. So,
>> should I remove the screenToLocal3D methods from the proposed API?
>> The localToScreen can still be added without problems for the 3D
>> case, there just wouldn't be any screenToLocal for 3D, justified by
>> the fact that you actually need to do some form of picking for the
>> conversion (and picking is not public yet). The screenToLocal(Bounds)
>> would have to be documented to provide reasonable result for 2D
>> scenes only.
>> Thanks,
>> Pavel
>>
>> On 7.5.2013 15:42, Pavel Safrata wrote:
>>> In 3D the point in screen coordinates doesn't correspond to any
>>> specific single point in local coordinates because the of the
>>> projection. The 2D screen point casts a ray to the 3D space of the
>>> scene (and the node). This ray might not even have any common point
>>> with scene's or node's XY plane. In other words, between the screen
>>> point and local point is a non-invertible projection transform so in
>>> this direction we can't simply transform the point to another point.
>>> Thanks,
>>> Pavel
>>>
>>> On 7.5.2013 13:19, Kevin Rushforth wrote:
>>>> I doubt that we should mix intersection (picking) with a simple
>>>> transformation method. I would expect screenToLocal to take a point
>>>> at the Z=0 plane in window/screen coordinates and return the
>>>> transformed point in local coordinates.
>>>>
>>>> -- Kevin
>>>>
>>>>
>>>> Chien Yang wrote:
>>>>> Hi Pavel,
>>>>>
>>>>> Can you fill me in on what is the use case for doing the 3D
>>>>> extension for FX 8?
>>>>>
>>>>> Thanks,
>>>>> - Chien
>>>>>
>>>>>
>>>>> On 5/6/2013 5:04 PM, Richard Bair wrote:
>>>>>> I'm out of my depth, relying on Kevin & Chien to say something
>>>>>> smart :-)
>>>>>>
>>>>>> On May 6, 2013, at 7:02 AM, Pavel Safrata
>>>>>> <pavel.safrata at oracle.com> wrote:
>>>>>>
>>>>>>> Hello,
>>>>>>> I need to reopen this for additional clarification. The question
>>>>>>> is - what exactly does the screenToLocal do in 3D?
>>>>>>>
>>>>>>> My original intent and still my favorite approach is:
>>>>>>> - if the node contains (is present on) the specified screen
>>>>>>> location, return the intersection point like in picking
>>>>>>> - otherwise, return the point on projection plane transformed to
>>>>>>> node's local coordinates
>>>>>>>
>>>>>>> It seemed natural - you'd get the local coordinates of the
>>>>>>> node's point rendered on the given location, where possible. But
>>>>>>> then, it is a method for transforming coordinates, how do we
>>>>>>> know user wants intersection with the node itself? Maybe he
>>>>>>> wants always intersection with the projection plane or even with
>>>>>>> something else. The correct approach would probably be returning
>>>>>>> the (local) ray and let the user obtain any desired
>>>>>>> intersection. This can't be done right now, the
>>>>>>> picking&ray&intersection features are not public yet and won't
>>>>>>> be for this release. So we can either remove screenToLocal3D for
>>>>>>> now or specify the intersection point it returns, where I can
>>>>>>> see two options: either do it as described in the beginning of
>>>>>>> this email, or always intersect the projection plane. I'm not
>>>>>>> sure if the projection plane intersection is very useful, but
>>>>>>> the results would be more consistent (wouldn't jump elsewhere on
>>>>>>> the edge of the node).
>>>>>>>
>>>>>>> It becomes even a bit more complicated with
>>>>>>> screenToLocal(Bounds), which is there, works in 2D and needs to
>>>>>>> be extended to 3D (or removed). The only approach I can imagine
>>>>>>> is using screenToLocal on the four vertices and construct 3D
>>>>>>> bounds that contain all of them, but I admit I'm not sure the
>>>>>>> result is useful at all.
>>>>>>>
>>>>>>> What do you think?
>>>>>>> Thanks,
>>>>>>> Pavel
>>>>>>>
>>>>>>> On 3.5.2013 16:56, Kevin Rushforth wrote:
>>>>>>>> Check out the subject of the message. ;-)
>>>>>>>>
>>>>>>>> RT-30171
>>>>>>>>
>>>>>>>>
>>>>>>>> Richard Bair wrote:
>>>>>>>>> What's the JIRA issue so I can mark it?
>>>>>>>>>
>>>>>>>>> On May 2, 2013, at 11:15 PM, Pavel Safrata
>>>>>>>>> <pavel.safrata at oracle.com> wrote:
>>>>>>>>>
>>>>>>>>>> These methods were not released yet so we would not break
>>>>>>>>>> compatibility with anything except of several weekly builds
>>>>>>>>>> back.
>>>>>>>>>> Anyway, I agree with Richard's proposal.
>>>>>>>>>> Pavel
>>>>>>>>>>
>>>>>>>>>> On 3.5.2013 0:02, Ali Ebrahimi wrote:
>>>>>>>>>>> +1.
>>>>>>>>>>> Breaking (source & binary)compatibility is not good thing.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, May 3, 2013 at 2:21 AM, Richard Bair
>>>>>>>>>>> <richard.bair at oracle.com> wrote:
>>>>>>>>>>> Hi Pavel,
>>>>>>>>>>>
>>>>>>>>>>>> // these two already exist:
>>>>>>>>>>>> public Point2D localToScreen(double localX, double localY)
>>>>>>>>>>>> public Point2D localToScreen(Point2D localPoint)
>>>>>>>>>>>> // these two exist but without the 2D suffix, so rename
>>>>>>>>>>>> them (they were added in FX8 so no backward incompatibility):
>>>>>>>>>>>> public Point2D screenToLocal2D(double screenX, double screenY)
>>>>>>>>>>>> public Point2D screenToLocal2D(Point2D screenPoint)
>>>>>>>>>>>> // add these four for 3D
>>>>>>>>>>>> public Point2D localToScreen(double localX, double localY,
>>>>>>>>>>>> double localZ)
>>>>>>>>>>>> public Point2D localToScreen(Point3D localPoint)
>>>>>>>>>>>> public Point3D screenToLocal3D(double screenX, double screenY)
>>>>>>>>>>>> public Point3D screenToLocal3D(Point2D screenPoint)
>>>>>>>>>>> Just mulling it over. What about:
>>>>>>>>>>>
>>>>>>>>>>> // these two already exist:
>>>>>>>>>>> public Point2D localToScreen(double localX, double localY)
>>>>>>>>>>> public Point2D localToScreen(Point2D localPoint)
>>>>>>>>>>> public Point2D screenToLocal(double screenX, double screenY)
>>>>>>>>>>> public Point2D screenToLocal(Point2D screenPoint)
>>>>>>>>>>> public Point2D localToScreen(double localX, double localY,
>>>>>>>>>>> double localZ)
>>>>>>>>>>> public Point2D localToScreen(Point3D localPoint)
>>>>>>>>>>> public Point3D screenToLocal3D(double screenX, double screenY)
>>>>>>>>>>> public Point3D screenToLocal3D(Point2D screenPoint)
>>>>>>>>>>>
>>>>>>>>>>> In this case we only append the "3D" to screenToLocal
>>>>>>>>>>> variants that produce Point3D?
>>>>>>>>>>>
>>>>>
>>>>>
>>>
>>
>
More information about the openjfx-dev
mailing list