[API REVIEW] RT-30171: 3D versions of localToScreen and screenToLocal

Chien Yang chien.yang at oracle.com
Mon May 13 22:55:18 PDT 2013


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