Hi August,
Thanks for the feedback. You are correct in both approaches, i. e.
convert the geometric data or rotate the camera and flip the V. You
implemented the former approach and our loader opted the later. We
understand that this V-up feature can be very useful to loader
developers like you. We will add the V-up option in the next FX 8 update
release.
- Chien
On 10/22/2013 2:45 AM, August Lammersdorf, InteractiveMesh wrote:
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.y...@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