These are the release notes for the Universal 3D (U3D) Sample Software for Microsoft Windows* and Red Hat Enterprise Linux* platforms. This software release implements the 3rd edition of Ecma International's ECMA-363 Universal 3D File Format Standard. The specification is available publicly from the ECMA website. This software is only sample software and is intended to provide a starting point for ISVs to develop U3D applications (it has received only limited validation and testing). It includes a few usage examples for software developers which are not complete or polished applications. The intention is to allow other companies to innovate and develop solutions appropriate for different target user groups. Refer to the Known Issues section for a list of any known deviations from the specification, unimplemented functionality and issues that may be encountered with this software.
Detailed information on building and working with the U3D Sample Software can be found in the main documentation.
The license agreement is located in the License.txt file in this directory. Included software that is governed by other licenses are identified in the LicensesAdditional.txt file also located in this directory.
Additional requirements for compilation of the software are defined in the main documentation.
There is no installer for the U3D Sample Software, so installation is as basic as unzipping the U3D package.
Note: If the software is going to be recompiled, it is currently necessary to
place it in a directory with a path that contains no SPACE characters. For
example, "C:\Software\U3D
" is a compatible path while "C:\Documents
and Settings\jdoe\My Documents\U3D
" is not and results in build
system failures. In addition, there are several
additional steps to perform detailed in the main documentation.
Files in this distribution are organized in the following manner:
Path | Description |
Art |
Artwork used by the Doxygen* automatic HTML generation system. |
Bin |
Binary files that are a duplicate of the generated files located in Source\RTL\Build
or Source\Build\U3D (debug and release, including map files) when
the U3D DLs are compiled. |
Docs |
Documentation including this file, license information and a compressed HTML file version of the main documentation. |
Docs\Doxygen |
Scripts and setup for the Doxygen* automatic HTML generation system. Also contains the loose HTML main documentation files. |
Docs\IntermediateFormat |
Documentation on the format of Intermediate Data Text Format (IDTF) files that
are understood by the U3D IDTFConverter example application.. |
Docs\Templates |
Documentation templates. |
Include |
Header files for SDK-style usage that are duplicated from Source\RTL\Component\Include ,
Source\RTL\Kernel\Include and Source\RTL\Platform\Include . |
Lib |
Libraries files for SDK-style usage that are duplicated from the generated
files placed in Source\RTL\Build . |
Source |
Source code and files for compiling the U3D run-time libraries. |
Source\Config |
Configuration files used by the build system. |
Source\RTL |
Source code for the U3D run-time libraries. |
Source\RTL\Component |
Source code for the main components. |
Source\RTL\Dependencies |
Source code for miscellaneous third-party modules and libraries that are used. |
Source\RTL\Kernel |
Source code for the component system and common data types. |
Source\RTL\Platform |
Source code for the main platform abstraction layer. |
Source\Samples\BaseMeshConverter |
Converts mesh in u3d files to alternative representation (see NewBaseMesh sample) |
Source\Samples\Data |
Example U3D files. |
Source\Samples\HelloWorld |
Example U3D exporter application that creates a simple hard-coded scene using a single source code module. |
Source\Samples\IntermediateFormat |
Example Intermediate Data Text Format (IDTF) to U3D format file converter application. Also includes an example Discreet* 3ds max* 7 plug-in IDTF exporter. |
Source\Samples\IntermediateFormat\TestScenes |
Example IDTF files. |
Source\Samples\NewBaseMesh |
U3D RTL extension plugin example that provides alternative representation of the mesh geometry. |
Source\Samples\NURBS |
U3D RTL extension plugin that adds NURBS geometry resource type to RTL with exporting/importing capabilities. Can be used both stand-alone and as IFXCOM plug-in. NURBS tesselation is not implemented. |
Source\Samples\QrtzPlayer |
Example U3D file player application for Mac OS* X |
Source\Samples\SamplePlayer |
Example U3D file player application for Microsoft Windows*. |
Source\Samples\SampleViewerQrtz |
Example viewer for Mac OS* X |
Source\Samples\SampleViewerWin32 |
Example viewer for Microsoft Windows*. |
Source\Samples\SampleViewerX |
Example viewer for X Window System. |
Source\Samples\SceneHelpers |
Example U3D helper/utility code. |
Source\Samples\TextureModifier |
Example extension texture modifier plug-in. |
Source\Samples\TrueType |
Example U3D application that creates a Glyph 2D modifier by setting up glyphs that represent a string using various TrueType fonts. |
Source\Samples\u3dparser |
U3D parser tool makes a text dump of U3D binary file in XML format |
Source\Samples\winXPlayer |
Example U3D file player application for Linux*. |
Source\Templates |
Templates for plug-in dynamic libraries, interfaces, components and project configuration files. |
Source\Tools\BuildSystem |
Build system used to perform command-line based compiles and also scripts to generate Microsoft Visual Studio .NET 2003* solution and project files. |
This section describes the updates and changes that have been made to significant releases of the software. Note: After the build version for each release, the U3D file version generated by it is provided in parenthesis.
(0x00000100)
(0x00000100)
(0x00000000)
CIFXLoadManager
when FileReferenceBlock is handled.
CIFXMeshCompiler::PreviewCompile
method.
CIFXMesh
transfer.
U3DViewer
.
IFXModifierBaseDecoder
functionality to CorePluginStatic project.
CIFXString
type replaced with IFXString
type.(0x00000000)
RESOURCE
and TEXTURE
modifier chain's types.
libX11.so
libGL.so
shared libraries should be installed.
IFXEncoderX,
IFXDecoderX, IFXBitStreamX, IFXAnimationModifier, IFXCoreServices,
IFXMotionMixer, IFXNameMap
.
ws2_32.dll
should be installed on Windows* systems (included to Windows* XP by default).
U32
to IFXVector4
in geometry objects, encoders and decoders.
IFXString
for Linux.
CIFXAuthorGeomCompiler::Compile
method in case of small faces.
IFXOSUtilities.cpp
now works on Linux.
CIFXStdioWriteBuffer
and CIFXStdioReadBuffer
components when file is attempted to be closed again.
ContractionRecorder::reOrderIndeces
.
CIFXBoneWeightsModifier
component.
IFXString::LengthU8()
method which does not return error code and it was marked as depricated.
CIFXHashMap::HashFunction
method.
CIFXTexturePriorityManager
component.
IFXString::ToString
to use optional radix.
I8
was changed from signed char to char in IFXDataTypes.h
to reduce the number of explicit convertions from I8*
to char*
due to compiler warnings.
IFXAPI
call type.
IFXAuthorFaceUpdate2
renamed to IFXAuthorFaceUpdate
.
IFXAuthorVertexUpdate2
renamed to IFXAuthorVertexUpdate
.
CID_IFXSceneGraphCuller
component is created in the CIFXView::GetCullingSubsytem
method now and used only if it is needed.
CIFXMeshCompiler::PreviewCompile
method.
CIFXTextureObject
component's destructor to CIFXRenderDevice
component's destructor.
(0x00000000)
RenderableCache
functionality.
(0x00000000)
(0x00000000)
-removezerofaces
and -zerofacetolerance
options.
HelloWorld.exe
that
creates a simple hard-coded scene which is directly exported to a U3D file
called output.u3d
in the current or active directory. This example is contained in a single
source code file.
TrueType.exe
that
demonstrates how to create a Glyph 2D modifier by setting up glyphs that
represent a string by using various TrueType fonts. At run-time to simplify the
code, this example depends upon the shading.u3d
example U3D file
which it currently locates by using the U3D_SOURCE
environment
variable to load it from the Source\Samples\TrueType
directory.
ALT
, CTRL
and SHIFT
can be used also at the same time.
IFXNode
interface
in conjunction with an improved multiple-parent implementation. This allows a
single scene graph node hierarchy to have more than one node which has a parent
node that in turn has a child that is also parented to the root node. Added or
changed the following functions: AddChild
, GetChildNR
,
GetNumberOfChildren
, GetNumberOfParents
, GetParentNR
,
RemoveChild
and RemoveParent
. Removed the following
functions: GetFirstChildNR
, GetParentNRByIndex
, GetPreviousSibling
,
GetSiblingNextNR
, SetFirstChild
, SetNextSibling
,
and SetPreviousSibling
.
IFXViewResource
interface's root node handling so that it
uses the associated node palette entry id. Changed the SetRootNode
function, added GetRootNode
and removed GetRootNodeNR
.
IFXAuthorCLODCompressionParams2
structure. Removed
the 2
from its name. Changed the default quality factors to use IFX_DEFAULT_QUALITY_FACTOR
instead of the misleading magic number 100.Improved quality factor
documentation (also in the IFXMarkerX
interface).
.xml
project configuration files so that they match the actual names of the
directories that contain the associated source code compiled by them.
STextureSourceInfo::m_encoding
to STextureSourceInfo::m_imageType
.
DID_IFXMeshGroup
and DID_IFXMeshGroupBounds
to DID_IFXRenderableGroup
and DID_IFXRenderableGroupBounds
.
DID_IFXShaderSet
, DID_IFXLineSetGroupBounds
,
DID_IFXEdgeGroup
and DID_IFXEdgeGroupBounds
.
IFXCoreServices::GetImageCodec
function.
IFXView::RenderView
implementation in the CIFXView
component which uses the IFXGlyph2DModifier
interface's newly
added SetViewTransform
function.
IFXGlyph2DModifier::SetGlyphShaderSet
function. The proper way to shade the geometry generated by the Glyph 2D
modifier is by using the Shading modifier.
Source\RTL\Component\CLOD
, Source\RTL\Component\ChangeManager
,
Source\RTL\Component\Generators\Primitives
, Source\RTL\Component\Generators\UVGenerator
,
Source\RTL\Component\ImageCodecU
, Source\RTL\Component\Octree
and Source\RTL\Component\TextureManager
. Also changed the expected
location of the following previous directories to the Source\RTL\Dependencies
area: Source\RTL\Component\Include\DX
and Source\RTL\Component\Include\GL
.
IFXString::GetRaw
function. Use the existing IFXString::ConvertToRawU8
function.
IFXUserPropertyList
interface and the related IFXNode
interface's GetUserPropertyList
and SetUserPropertyList
functions.
IFXPalette::CompactPalette
function.
IFXSimple.h
header file.
SetCameraName
, ResetPalettes
, CleanPalette
functions of U3DSceneUtilities
class.
U3DSceneUtilities::SetMaterialResource
function.
IFXAuthorGeomCompilerParams
constructor.
IFXEXPORT_LIGHTS
export
option flags, and also added the missing IFXEXPORT_VIEWS
export option flag.
(0x00000000)
IFXSkeleton
object
is available for all model resources (meshes, line sets and point sets). In
previous releases, if no IFXSkeleton
object was available, no bone
count was written. Note: The existence of this defect means that all U3D
importing implementations will need to now be backwards compatible and support
the reading of model resource declaration blocks that end immediately prior to
the bone count. This can be detected by first checking if any bytes
remain to be read from the block before reading the bone count. If there is,
then proceed with reading as normal. If there is not, then consider the bone
count to be zero and jump to the next block. The importing implementation in
the U3D Sample Software Gold release already handles this situation via another
technique related to how the CIFXBitStream
component is implemented.
CIFXView::RenderView
function that can occur when the number of shaders used by the scene exceeds
the allocated quantity.
IFXViewResource
interface
that was needed by the CIFXView
component. The associated
implementation was migrated to the CIFXView
component where it belongs.
IFXQuaternion::ComputeAngleAxis
function to prevent a
possible floating point exception.(0x00000000)
IFXVector4
class GetRBBA
and GetBGRA
functions.
IFXExportingStatic.lib
and IFXSchedulingStatic.lib
have been removed and it is no longer necessary to link to them.
IFXLight::Enable
function was changed to allow the light node's instance index to be identified.
IFXLightSet::GetLight
function was changed to also hand back the light node's instance index
associated with the specified light index.
IFXView
interface's
new functions called GetAttributes
and SetAttributes
.
The interface's GetViewport
and SetViewport
functions
have been changed to now work with floating point rectangles defined by the IFXF32Rect
structure.
IFXViewResource
interface's SetRootNode
function was
updated to allow the root node's instance index to be specified and GetRootNodeNR
was updated to hand back the root node instance index. The node instance index
identifies exactly what scene graph is used when the view is rendered.
IFX3DGlyphCommands
was renamed to IFXGlyph2DCommands
, and IFX3DGlyphGenerator
was renamed to IFXGlyph3DGenerator
.
RTL\Component\Generators\Glyph2D
directory: IFXContour.h
, IFXContour.h
, IFXContourExtruder.h
,
IFXContourGenerator.h
, IFXContourTessellator.h
and IFXGlyph3DGenerator.h
.
In addition, some unused parameters were removed from some of the glyph command
related functionality.
IFXDevice
interface support for multiple parents and view
node instances used during rendering. The IFXDevice
interface now
fully manages an array of views plus instance indices with the addition of the
following functions: AppendView
, GetView
, GetViewCount
and RemoveLastView
. Removed the IFXDevice::Render
function's
instance parameter, as well as the GetFirstView
and SetFirstView
functions. Also removed the GetNextView
and SetNextView
functions from the IFXView
interface.
CIFXTaskCallback
module.
IFXNotificationManager::SubmitError
function implementation and clarified usage documentation.
IFXNotificationId_UnknownBlockSkipped
to allow the Load Manager to notify clients when files contain unrecognized
blocks.
IFXNode::Pick
function to define the subgraph instance in which picking is performed.
IFXTextureObject
interface. The IFXTextureObject::Format
enumeration now has IFXTEXTUREMAP_FORMAT_BGR24
and IFXTEXTUREMAP_FORMAT_BGRA32
defined.
CArrayList
template so that an element could actually be accessed without using the
internal data members, by using the existing [] operator as designed.
wcmatch
module to support
UNICODE. Also added to the IFXString
class a Match
function.
Source\Samples\IntermediateFormat\Exporter
directory.
(0x00000000)
CIFXLoadManager
will still read those equivalent Beta version files.
IFXModel
interface: GetNumElements
, GetNumShaderSets
, GetShaderSet
,
SetShaderSet
, GetShaderSetMapping
, SetShaderSetMapping
,
GetMappingShaderSet
and SetMappingShaderSet
. They
were legacy shading functionality and were superseded by the Shading Modifier
with the Alpha release. Shader sets can be associated with models by attaching
a Shading Modifier to either the model resource modifier chain or the model
node modifier chain as demonstrated by the IDTFConverter. There is an example
of one way to obtain a shader set from the model node modifier chain in the U3DSceneUtilities::SetMaterialResource
function in the SceneHelpers
sample code.
IFXGenerator
interface: GetNumShaderSets
, GetShaderSet
and SetShaderSet
.
They were legacy shading functionality and have been superseded by the Shading
Modifier with the Alpha release.
IFXMetaDataX
interface. It now has
support for meta-data additional attributes that may be defined as part of the
Key string. In the interfaces, additional attributes are called subattributes.
Some changes were made to accomplish this. To retrieve the encoded key that
matches the string written to a bitstream during serialization, the new GetEncodedKeyX
function must now be used instead of GetKeyX
(all set functions
can still be used to define an encoded key after which parsing and validation
is performed). The IFXMetaDataValueType
enumeration and has been
replaced with IFXMetaDataAttribute
(the old IFXMETADATATYPE_STRING
enumerator is now called IFXMETADATAATTRIBUTE_STRING
, and IFXMETADATATYPE_BINARY
is now called IFXMETADATAATTRIBUTE_BINARY
). The GetValueTypeX
function has been replaced by GetAttributeX
. The following
additional functions have been added: GetEncodedKeyX
, GetSubattributesCountX
,
GetSubattributeIndex
, GetSubattributeNameX
, GetSubattributeValueX
,
SetSubattributeValueX
, DeleteSubattributeX
and DeleteAllSubattributes
.
IFXAuthorFace2
,
IFXAuthorGeomCompilerParams2
, IFXAuthorMeshScrubParams2
and IFXAuthorCLODGenParam2
.
IFXPrimitive
,
IFXPrimitiveGenerator
, CIFXPrimitiveShape
, CIFXSpherePrimitive
,
CIFXCylinderPrimitive
, CIFXConePrimitive
, CIFXPlanePrimitive
and CIFXBoxPrimitive
.
IFXTEXTUREMAP_FORMAT_RENDERER
texture map type.
IFXBlockTypes.h
.
STextureSourceInfo
structure and adding
the following new functions to the IFXTextureObject
interface: GetImageType
,
GetContinuationImageCount
, GetImageCompressionProperties
and SetImageCompressionProperties
.
IFXAuthorLineSet
and IFXAuthorPointSet
interfaces no
longer require the SetMeshDesc
function to be explicitly called so
that they are more similar in usage to IFXAuthorMesh
.
UI_DEFAULT_
in UIDefaults.h
to instead have the prefix PALETTE_DEFAULT_
. Moved them to IFXCoreServices.h
and removed UIDefaults.h
.
IFXLoadManager
interface.
FRONT
.
CIFXLightResource
component.
It was incorrectly doubling the spot light angle when configuring the IFXRenderLight
thus resulting in them being rendered too wide.
CIFXOSHistogramDynamic
class if the processor used supports them.
(0xFF000020)
CIFXImageTools
module.
(0xFF000020)
IFXBlockTypes.h
, changed FileHeader_VersionFirstEdition
to 0
to match the specification. Removed FileHeader_VersionPreRelease
since it was not needed.
CIFXImageTools
component so that it matches the specification. Previously, a variable number
of extra bytes were mistakenly being inserted after the Continuation Image
Index and before the Image Data.
CIFXImageTools
component. This is the first release that will encode and save 32-bpp RGBA
images. This is done using a single PNG Texture Continuation block. The known
issues section describes the current API limitation regarding there not being
any way to configure how textures are encoded.
CIFXLightResource
constructor to set the ambient color to black.
CIFXMaterialResource
component's behavior to use attribute disabled states and return disabled
values for those attributes that are not enabled. Otherwise, if enabled the
stored values are returned.
Attributes
enumeration into the IFXMaterialResource
interface to prevent clashes with other similarly named enumerations.
Attributes
enumerators (DENSITY
and ELASTICITY
)
and IFXMaterialResource
functions related to physics and collision detection/resolution.
CIFXImageTools::DecompressBlockQueueToImage
and CIFXImageTools::EvaluateContinuationFormat
functions.
IFXString::GetRaw
function to better validate input assumptions.
CIFXWriteManager::PutPalette
function.
(0xFF00001F)
(0xFF00001F)
IFXShaderLitTexture
interface provides more functionality than
supported by the specification. During normal usage, only the IFXShaderLitTexture::MATERIAL
and IFXShaderLitTexture::USEDIFFUSE
flags should be set and the
rest of the IFXShaderLitTexture::Flags
should be clear. These flags are solely provided for debugging models/scenes
and for authoring purposes. They are not intended to be saved in U3D files.
IFXShaderLitTexure::TextureMode
automatic texture coordinate generation modes to just those supported by the
specification.
IFXViewResource
interface related to the color buffer, depth buffer and stencil buffer, for
each render pass, are not currently saved in U3D files. When decoding, the
default implementation settings are used for these. On the first pass: color
buffer clearing is enabled using black; depth buffer testing (compare function
used is depth value must be less than or equal to reference value) and writing
is enabled; depth buffer clearing is enabled using depth value 1.0; and stencil
buffer is disabled. On all other passes: clearing of all buffers is disabled;
depth buffer testing and writing is disabled; and the stencil buffer is
disabled.
IFXCLODResource
interface's functionality into the IFXAuthorCLODResource
interface and then removed the IFXCLODResource
interface.
IFXAuthorMeshMaterial
structure to IFXAuthorMaterial
.
IFXAuthorMeshMap
interface and the underlying component's implementation.
IFXNode
interface's Pick
function will now allow the node instance to be specified if there are multiple
parents.
IFXMetaData
and
IFXMarker
interfaces because they were not necessary for it. A few
of the IFXMarker
function implementations that served as
helpers/utilities were retained and added to the IFXSceneGraph
interface.
IFXUniqueModePalette
interface could be removed. Hidden palette functionality is still available and
functional, which is useful for creating user interface elements that are not
encoded and serialized by the Write Manager.
IFXSceneGraph::GetPrimitiveOrientation
and IFXSceneGraph::SetPrimitiveOrientation
functions which are no longer useful since basic primitives have been removed.
IFXDeformModifier
and associated component implementation since it is not a part of the
specification and accidentally had not been taken out yet.
IFXModifierParam
interface which was unused and not necessary.
KEEP_DATA_BLOCKS
to the IFXImporting.xml
project configuration file or to the IFXDataBlockQueueX.h
header file.
ModifierConverter::ConvertBoneWeightModifier
.
(0xFF00001E)
IFXView
interface now allows 1 and 2-point projections to be specified that match the
U3D specification, as well as their encoding and decoding. However, rendering
of these are not supported.
IFXNode::GetNumberOfChildren
fixed to now return success when there are no children.
IFXView
interface's Pick
functions now allows the instance to be specified if there are multiple
parents.
IFXShaderLitTexture
interface has changed to eliminate legacy functionality no longer needed and to
remove enumerators that were not functional.
IFXString
class.
IFXQualityFactor
interface and associated header
file. Quality factory defines were moved to IFXMarkerX.h
.
CIFXAuthorCLODResource
.
IFXLoadManager
interface's Load
function now has a world alias parameter.
IFXShapes
dynamic library that is included in the Testing
directory.
CIFXGlyphCommandList
component was added.
CIFXConnector
.
IFXBoneWeights
interface to IFXBoneWeightsModifier
.
IFXBoneWeightsModifier
interface from IFXSkeleton.h
to IFXBoneWeightsModifier.h
.
IFXNode
interface.
CIFXCLODResource
component, including
the IFXClassicCLODResource
interface.
IFXViewResource
interface to the view node's IFXView
interface.
This section describes the issues that have been identified. Please submit reports of defects and other issues found at the Universal 3D Sample Software project website on Source Forge* (http://sourceforge.net/projects/u3d/) using the online tracking tool.
COctreeNode
should be reworked to handle node
instances. CIFXOctreeCollection::GetSpatials
returns IFX_E_UNSUPPORTED
.
CIFXOctreeCollection::ResursivelyAddSpatialsToList
is unimplemented.
IFXSpatial
interface pointers may
need to be updated to track spatial/node instances with IFXSpatialInstance
and SPATIALINSTANCE_LIST
.IFXView
interface.
© 1999 - 2006 Intel Corporation. All rights reserved. Intel is a trademark or registered trademark of Intel Corporation or its subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.