Re: V-up texture coordinate support

2013-10-22 Thread Chien Yang

Hi Remi,

  Thanks for the feedback. Since we have decided to go with a 
Y-down 3D coordinate system it is natural, and for internal consistency, 
that we stick with a V-down texture.


 Yes, we have considered both (1-v) coordinates flip and image 
flip. Our preference is to do the coordinates flip in the shader if 
possible.


- Chien

On 10/21/2013 3:56 PM, Arnaud, Remi wrote:

Hi Kevin and Chien,

Most 3D data formats/files are using the 'openGL' convention (right handed, and 
V-up textures). A lot are using y-up, but this does not matter that much in 
regards to the texture V-up issue.
Of course there is also the 'directX' convention (left handed, V-down textures).

I think you have to decide which one of those two systems you want to use, and 
take ALL the conversions from one or the other system. There is no point 
creating yet another set of conventions.

If you stick with a V-down texture, it would be nice to have a way to let the 
rendering engine take care of this. In all modern graphics API it is very 
simple to add (1-v) math to the vertex shader for instance.
Without direct access to the shader, I would think a flag to set the V-up or 
V-down for a model would be a simple addition to the API.
It is not hard to calculate new UV coordinates at load time, but it is prone to 
errors in case some other calculations depend on the UV coordinate system. 
Makes the code non portable.

Alternatively, you may want to adopt the same help method used by WebGL (OpenGL 
convention)  that has to live in a web browser, where Canvas 2D images are the 
other direction by default.
In this case, the shader is not changed, but the image loader is loading the 
image upside down, keep 2 copies of the image in memory…

see: gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);

Regards
-- Remi

From: Chien Yang chien.y...@oracle.commailto:chien.y...@oracle.com
Date: Thu, Oct 17, 2013 at 3:08 PM
Subject: V-up texture coordinate support
To: OpenJFX openjfx-dev@openjdk.java.netmailto:openjfx-dev@openjdk.java.net


Hi all,

  Java images are defined such that (0, 0) references the top left most 
pixel of the image. In JavaFX, the texture coordinate system for 3D objects is 
defined with its U axis increasing from left to right and the V axis increasing 
from top to bottom. Hence a texture coordinate of (0, 0) references pixel (0, 
0), which is the top left corner of the texture, and a texture coordinate of 
(1, 1) references the bottom right corner of the texture. This system matches 
the layout of the image, which is stored such that the top-most row of pixels 
ends up in memory in row 0. It also matches with the default 3D coordinate 
system used in JavaFX where the X axis increases from left to right and the Y 
axis increases from top to bottom.

  We understand that this V-down coordinate system maybe confusing or hard 
to work with for some 3D content developers when using models that are defined 
with Y-up. We could add a V-up option (as a boolean property of Shape3D). If 
set, we would flip the texture coordinates when rendering, such that:  V' = 1 - 
V.

 However it is very late in this release to consider any more changes, so 
our plan is to add this option in a post FX 8 release if it turns out to be 
needed. Please let us know right away if there is a compelling need for V-up 
support in the FX 8 release.

- Kevin and Chien




Re: V-up texture coordinate support

2013-10-21 Thread Arnaud, Remi
Hi Kevin and Chien,

Most 3D data formats/files are using the 'openGL' convention (right handed, and 
V-up textures). A lot are using y-up, but this does not matter that much in 
regards to the texture V-up issue.
Of course there is also the 'directX' convention (left handed, V-down textures).

I think you have to decide which one of those two systems you want to use, and 
take ALL the conversions from one or the other system. There is no point 
creating yet another set of conventions.

If you stick with a V-down texture, it would be nice to have a way to let the 
rendering engine take care of this. In all modern graphics API it is very 
simple to add (1-v) math to the vertex shader for instance.
Without direct access to the shader, I would think a flag to set the V-up or 
V-down for a model would be a simple addition to the API.
It is not hard to calculate new UV coordinates at load time, but it is prone to 
errors in case some other calculations depend on the UV coordinate system. 
Makes the code non portable.

Alternatively, you may want to adopt the same help method used by WebGL (OpenGL 
convention)  that has to live in a web browser, where Canvas 2D images are the 
other direction by default.
In this case, the shader is not changed, but the image loader is loading the 
image upside down, keep 2 copies of the image in memory…

see: gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);

Regards
-- Remi

From: Chien Yang chien.y...@oracle.commailto:chien.y...@oracle.com
Date: Thu, Oct 17, 2013 at 3:08 PM
Subject: V-up texture coordinate support
To: OpenJFX openjfx-dev@openjdk.java.netmailto:openjfx-dev@openjdk.java.net


Hi all,

 Java images are defined such that (0, 0) references the top left most 
pixel of the image. In JavaFX, the texture coordinate system for 3D objects is 
defined with its U axis increasing from left to right and the V axis increasing 
from top to bottom. Hence a texture coordinate of (0, 0) references pixel (0, 
0), which is the top left corner of the texture, and a texture coordinate of 
(1, 1) references the bottom right corner of the texture. This system matches 
the layout of the image, which is stored such that the top-most row of pixels 
ends up in memory in row 0. It also matches with the default 3D coordinate 
system used in JavaFX where the X axis increases from left to right and the Y 
axis increases from top to bottom.

 We understand that this V-down coordinate system maybe confusing or hard 
to work with for some 3D content developers when using models that are defined 
with Y-up. We could add a V-up option (as a boolean property of Shape3D). If 
set, we would flip the texture coordinates when rendering, such that:  V' = 1 - 
V.

However it is very late in this release to consider any more changes, so 
our plan is to add this option in a post FX 8 release if it turns out to be 
needed. Please let us know right away if there is a compelling need for V-up 
support in the FX 8 release.

- Kevin and Chien