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\BuildorSource\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 IDTFConverterexample application.. | 
| Docs\Templates | Documentation templates. | 
| Include | Header files for SDK-style usage that are duplicated from Source\RTL\Component\Include,Source\RTL\Kernel\IncludeandSource\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 LoadIFXShapes
						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.