[API REVIEW] RT-30171: 3D versions of localToScreen and screenToLocal
Pavel Safrata
pavel.safrata at oracle.com
Fri May 17 08:31:40 PDT 2013
Richard? I'm ready to push, waiting for your re-approval.
Thanks,
Pavel
On 15.5.2013 15:14, Pavel Safrata wrote:
> 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