V-up texture coordinate support

August Lammersdorf, InteractiveMesh sdn at interactivemesh.com
Tue Oct 22 02:45:15 PDT 2013


 My JavaFX 3D model importers convert geometric data to the JavaFX 3D 
 coordinate sytem to support the default camera model (viewing into the 
 screen along the +Z-axis). A Y-up right-handed coordinate system (e.g. 
 COLLADA-, OBJ-, X3D-exports from modelling tools) is mapped as follows: 
 +Y -> -Y, +X -> +X, +Z -> -Z. This includes the adjustment of all 
 transforms and also the v-flipping of the texture coordinates: v -> 1 - 
 v. In this case I prefer converted texture coordinates stored in the 
 TriangelMesh instead of converting them 'backstage'.

 Alternatively, I consider providing an ImportOption to omit this 
 conversions if someone wants to simulate a Y-up right-handed coordinate 
 system in JavaFX. This would result in TriangelMesh points and texture 
 coordinates consistent with the imported file. Now an internal 
 v-flipping is needed to avoid upside-down textures because the 
 corresponding texture coordinates are typically v-up oriented. Right?

 Simulating a Y-up right-handed coordinate system in JavaFX is discussed 
 in "Getting Started with JavaFX 3D Graphics/Camera/Y-down versus Y-up" 
 (http://docs.oracle.com/javafx/8/3d_graphics/camera.htm#CJAHFAHB). 
 Doesn't this approach require an immediate availability of a v-flipping 
 feature?

 August

 Am Donnerstag, den 17.10.2013, 15:08 +0200 schrieb Chien Yang 
 <chien.yang at oracle.com>:
> 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



More information about the openjfx-dev mailing list