1. DAE object no longer held onto by plugin.
2. Filename to URI conversion now handled internally by plugin.
2. User can supply an external DAE object for use by the plugin.
3. User can supply a std:string object for the plugin to return the URI of
the document just processed.
4. User can supply a std::string to receive the unit name information from
the document just read in. (e.g. meters, inches, etc.)
5. User can supply a float to receive the metric conversion factor from the
document just read in.
6. User can supply an enum to receive the up axis orientation information
from the document just read in.
7. Material transparency can be both read and written.
8. User can supply an experimental GoogleMode option on output. The plugin
will try to emulate the way Sketchup specifies transparency (i.e. the
inverse of what it should be!). I am still struggling to get GE to
understand transparency, anyone know what it expects?
9. Rudimentary support for Collada effect parameters (newparam, setparam,
param) on input. Basic nVidia FX Composer dae documents can now be read.
"
- Material class contained both 'shininess' and 'Ns' member variables
- 'Ns' and 'Ni' are initialized to 0 ('Ni' is unused at the moment)
- only 'Ns' was read from .mtl file but 'shininess' was used for osg::Material
- 'illum' was read from .mtl file but never used; it is now used as follows
-- illum==0 -> no osg::Material created/attached therefore no lighting
-- illum==1 -> osg::Material specular is set to black
-- illum==2 (default) -> specular read from .mtl file is used
- 'map_Kd' and 'map_Ks' may contain additional arguments (e.g. '-s 1 1 1'),
these are now skipped over and the texture filename is properly extracted
"
* Support for Box, Sphere, Cone, and Cylinder. These nodes are converted
to osg::Geometry conform the VRML97 spec.
* Backface culling is enabled/disabled according to the "solid" flag for
geometries that are converted from IndexFaceSets.
* PROTO instances can now be used for "appearance" and "geometry" fields
in a Shape node.
The file ReaderWriterVRML2.cpp is adapted for the latest stable public
release:
http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.2.0
The changes where needed for being able to read VRML file which are
output by VMD (http://www.ks.uiuc.edu/Research/vmd/). A sample VRML file
is enclosed in this submission.
The plugin has been tested against a number of VRML samples that include
texturing. The texturing is found to be VRML97 compliant for all added
geometry nodes.
"
You were right about the CMAKE_MODULE_LINKER_FLAGS option for CMake, so here is a modification allowing to not generate the manifest files for the plugins making them a lot more easy to redistribute. I have also made the same modification to the wrappers as they are also put into the osgPlugin folder when generated.
"
both Jeremy and Anders added static build support as an option, but one was
for Unix and one for Windowsm, but the two mods were also inconsitent in naming
and implementation. I have had a bash at merging them both, but don't know yet
if these changes will work yet on either configuration... user testing will tell...
size of the image data is greater than the actual image size. This
causes the memcpy call to go out of the array bounds. I modified the
code so that it copies the data during the iteration, instead of
memcpy'ing. This fixes the problems i was having.
If you are curious, the writer was crashing when trying to write an
RGB image that was 2050 x 1280. You might be able to reproduce it by
allocating an empty image of that size and writing it to a file."
"" for all platforms except Cygwin where its set to "cygwin_" and Mingw where
it is set to "mingw_". Updated osgDB::Registry to look for these for the plugins.
Updated the osgintrospection example to search for these names as well.
The options are intended to match the existing read options. By default it will only write RGB32F format; if the "RAW" option is selected, it will output 8 bit RGBA as "raw" RGBE. Note also that the writer inserts a flipVertical(); although the RGBE format, according to spec, should support top-to-bottom or bottom-to-top ordering, no software I've found, including that from the formats originator, actually respects this."
I've done some additional small modification regarding constness in ReaderWriter and added
mutable on _pluginData so passing data back would be possible too.
Have updated the collada plugin (ReaderWriterDAE.cpp) to use the map to handle options and
have attached the changes.
The stuff in daeReader.h and daeWriter.h are just cosmetic changes to get rid of a warning."
obj-files. It is not feature complete but usable.
Known issues:
* not all materials are handled correctly (especially when using
osg::StateAttribute::OVERRIDE), not all properties are supported
* could not test point and lines, all of my programs which are capable
to read obj-files only import triangle-meshes.
* only simple texture-handling"
CmakeLists.txt and to the FindPerformer.cmake module.
Under Windows libs are: libpf.lib (we need to add the lib prefix) and
libpfdu-util.lib (libpfdu and libpfutil are compiled into one lib)
We need to add PFROOT to the search path for libs and includes (default
environment variable for Performer path)
And at last we need to put PFROOT/include and PFROOT/include/Performer
as include dir for compiling."
is targeted by a rigid body which is the reason why the .h-file was changed too.
So now there'll be Group as often as possible, otherwise PostitionAttitudeTransform."
Note from Robert Osfield. A couple of lines of code in ConvertToInventor.cpp
would not compile under g++ 4.1.2, so rather than hold back the dev release till
this is resolved I've optional compiled out the problem section.
The #define DISABLE_PROBLEM_COMPILE_SECTIONS is used to compile out the problem
section, this define is add via the CMakeLists.txt file.
GL_LUMINANCE data instead of GL_RGB data. You can easily check with
"osgViewer --image klink1_l.tif".
The bug is in ReaderWriterTIFF.cpp function simage_tiff_load, where
numComponents_ret is incorrectly set to 1 instead of 3 for color mapped
data."
will bring the change in line with what is done on other OSes (Linux)
and works in all tested cases.
For reference, this was tested with:
osgviewer <file>.wrl (file in current directory)
osgviewer <dir>\<file>.wrl (file in child directory, relative)
osgviewer .\<dir>\<file>.wrl (file in child directory, specify current)
osgviewer <drive>:\<dir>\<file>.wrl (absolute path)
"
OpenVRML 0.14.3 and is without the Boost dependency.
The changes:
- - Fixed loading of textures and normals when no corresponding indices
are specified. It uses vertex indices now, compliant with the VRML spec.
- - Added colour per vertex support.
- - Added group node support.
- - Changed the code to use osg::ref_ptr instead of naked pointers to
avoid memory leaks.
- - Fixed breakage for loading files specified by relative path."
Attached a modification that read the HeigthField position and X,Yintervals.
I also removed the limitation to 1024*1024 to 4096*4096, because when you are preprocessing your data with OSG, it can be useful to read large images/heigthfields. Is there a reason (other than hardware limitations for textures) for this limit ?"
various operating system differences between socklen_t and int have
broken the FreeBSD build. Change was to add __FreeBSD__ to the list of
defines that are checked."
of the source file:
The "delete [] path" appears before the "osg::notify", causing the data pointed to by
"filename" to be deleted before access causing an access violation.
...
I have put a comment on
line 521 where I have moved the "delete []path" below.
"
completed the new registration of the plugin-readerwriters
("REGISTER_OSGPLUGIN") according to your osgstaticviewer-example (see
attachment, based on today's svn)."
COLLADA modules STLDatabase, LIBXMLPlugin and stdErrPlugin are
statically included in the main COLLADA library on Linux and shouldn't
be linked separately - those libraries do not exist in the default Linux
build and the compilation will fail.
Second issue - the current version of the COLLADA plugin (both current
HEAD in Subversion and the one in stable 2.0) do not work right with the
stable COLLADA DOM 1.4.1. I am getting the following error:
"
is not the usual OpenGL BOTTOM_LEFT orientation, but with the origin TOP_LEFT. This
allows geometry setup code to flip the t tex coord to render the movie the correct way up.
R3G3B2, R5G6B5, A1R5G5B5, X1R5G5B5, A4R4G4B4, X4R4G4B4, R8G8B8 (now
without swaping of red and blue), A8R8G8B8 (also w/o swapping),
X8R8G8B8, A8B8G8R8, X8B8G8R8, A2R10G10B10, A2B10G10R10, L4A4 (not work
on my machine), L16A16, L16, A16B16G16R16, A16B16G16R16F,
Q16W16V16U16, R32F, R16F and A32B32G32R32F.
And these ones are correctly detected, but prints "unsupported" using
osg::notify(osg::WARN) and are not loaded:
A8R3G3B2, G16R16, G16R16F, G32R32F and CxV8U8.
Also added checking of not supported DDPF_BUMPDUDV (V8U8, V16U16,
Q8W8U8L8, A2W10U10V10 etc.) and DDPF_BUMPLUMINANCE (L6V5U5, X8L8V8U8,
etc.) pixel formats.
Mipmap handling is slightly modified and now support all additional formats.
"
old loader, but appear very, very wrong with the new one. I traced the
problem to the handling of the palette override flags in the external
reference records. The current behavior for handling the palette
override flags for external references has different offsets for
different OpenFlight version (2 bytes for 14.2-15.1 and 4 bytes for 15.2
and later). However, I believe this behavior is incorrect.
I know that the original 14.2 OpenFlight spec (dated April 1995)
specifies 2 bytes between the filename and the override flags, and the
15.4 and later specs specify 4 bytes. However, I also found a 14.2.4
OpenFlight spec (dated January 1996) that changes the specification to 4
bytes. Also, the databases in question were created using an old IRIX
version of MultiGen II, which wrote OpenFlight 14.2 files natively.
These files also have 4 bytes between the filename and flags.
Furthermore, these databases have always worked properly under earlier
versions of OSG, under Performer, and in every MultiGen product we've used.
This leads me to believe that the original 14.2 spec was incorrect (the
14.2.4 spec corrected this error), and there should be 4 bytes between
the filename and flags for all OpenFlight files version 14.2 and later.
The attached fix modifies the OpenFlight loader to behave in this way."
Currently, if the texture attribute file doesn't explicitly specify an
internal format, the loader will force it to use GL_RGB, which keeps
translucent textures (eg. GL_RGBA textures) from showing up properly.
This patch changes the default behavior to simply use the image's format
instead of forcing a particular format."
libraries listed under TARGET_EXTERNAL_LIBRARIES.
The removed libraries are not needed when linking the plugin, they are
loaded during runtime by Performer.
The modified file is attached."
the specification. With these mods, blink sequences are now created for
flashing light point nodes, either palletized (v.15.8 and later) or
non-palletized (15.7 and earlier). Thanks to Brede for his
implementation of the palletized light point nodes.
There is still work to do on adding the capability to properly handle
light point system nodes, but this does add some capability that did not
previously exist. So, I wanted to at least submit this and I will
hopefully provide the additional capability in the near future.
I've tested the code modifications with Visual Studio 2005. I don't
have the means to test any other operating system, but I would suspect
that there shouldn't be any issue (famous last words). I used the test
files that I uploaded to the users forum to test the changes.
In addition to the added capability, I changed the light point node
radius to the "actualPixelSize" value in the file. Previously, the
radius was set to half the actual pixel size (see
LightPointRecords.cpp). Not sure why this was the case. But, it was
brought to my attention by a co-worker who created the OpenFlight files
and was testing them with different viewers. If there's some history
for setting the radius to half the size, then this change can be
omitted."
implements the LightPointSystem class to allow for the OpenFlight
plug-in to read and handle light point system nodes. The behavior is
very similar to the old plug-in in that a MultiSwitch node is created to
handle the "enabled" flag bit set in the node record. The code also
reverts the changes for the actualPixelSize as mentioned above. And
lastly, the code requires the previously submitted changes for the
plug-in.
As for the other changes, I've tested the code with Visual Studio 2005
and the files that I posted in the users forum.
With all of the submitted changes, the OpenFlight plug-in should now be
capable of loading files with light point system nodes and the use of
palletized light points and non-palletized light points.
"
accepted file extensions, so that once the plugin was loaded in the
Registry it would grab any image file write request, regardless of the
file extension. This was a particular problem if it was statically loaded."
according to the OpenSceneGraph/CMakeLists.txt and the include/osg/Version settings.
These changes mean that the 1.9.5 release will have a libs/osgPlugins-1.9.5 directory.
I added a new protected virtual method to ImageStream called
applyLoopingMode() which is called from setLoopingMode. The
quicktime-plugin has an implementation of applyLoopingMode which sets
some flags for the quicktime, so that quicktime handles the loop
playback by itself.
This has some benefits:
+ no gaps when looping audio
+ simplified code
Attached you'll find the modified files, hope you'll find them useful."
return the length of the stream.
Implemented the virtual methods in QuicktimeImageStream, (getLength,
getReferenceTime, setTimeMultiplier), to return valid value for each.
"
Just as in the pre-r6419 I used the COIN_BASIC_H define in order to discriminate
between the two versions of Inventor.
Additionally, I had to change the CMakeLists.txt to use the proper include path.
"
"I was working on a new version of Inventor plugin.
It was inspired by the need to get correct and high quality conversion,
so I verified the plugin on complex models and made number of serious fixes:
- the geometry is not two times on the output file (!)
- SoVRMLImageTexture: VRML texture support was rewritten according to
Inventor programming practices, since it does not worked correctly on
many models (Anyway, thanks for Gerrick Bivins to introduce it.)
- osg::ref wrong usage related crash fixed
- code cleaning and texture code overhaul
- LOD fixes
- appended README.txt with all the contributors I was able to get from
SVN logs"
with SGI's OpenInventor, I had to change
OpenSceneGraph/src/osgPlugins/Inventor, as SoVRMLImageTexture is not avaible
in SGI's Inventor. "
From Robert Osfield, tweaked the above so that it uses Coin headers to switch on coin features:
#ifdef COIN_SOCALLBACKACTION_H
#define USE_COIN 1
#endif
It should not be introusive to any other palatform apart MSVC, but in order to link to debug-specific libs
I had to change plugins CMakeLists to differentiate debug/release linkage, I have used the same macro used in core libs
Now the macro used for plugin and examples linking test for existance of TARGET_LIBRARIES_VARS
that holds the names of the variables that have to be used for linking"
later causing a crash when only one token was available. Also clean up #if #else #endif
block to help make the code more readable and maintainable. This bug and fix
was found by Anders Backman, but final implementation done by Robert Osfield.
"Geometry.cpp
Make sure number of normals match number of vertices when lit or
vertex-normal pairs are separated when geometries are merged by the
optimizer.
Ancillary.cpp
Improved support for multitexture effect field and use texture
environment from .attr file.
PaletteRecords.cpp
Use search path when looking for shader files.
PrimaryRecords.cpp
Added preset uniforms "TextureUnit0", "TextureUnit1", "TextureUnit2"
and "TextureUnit3" for GLSL shaders."
some of the files, the function readInt() would return
a 0 size. While linux will happily continue on,
creating 0 sized arrays, Windows immediately
blows up, with sparks sometimes flying out the
side of the machine!
I added a simple check for zero size in
each of the functions that allocates arrays
based on the size variable, and I thought
I'd pass it along. Now the program will
not die if it encounters an ive file with bad
data."
// GT: fix for symbol fonts (i.e. the Webdings font) as the wrong character are being
// returned, for symbol fonts in windows (FT_ENCONDING_MS_SYMBOL in freetype) the correct
// values are from 0xF000 to 0xF0FF not from 0x000 to 0x00FF (0 to 255) as you would expect.
// becuase Microsoft uses a private field for its symbol fonts ........
"
Added setting of osg_SimulationTime and osg_DeltaSimulationTime to the uniforms set by SceneView
Added frame(double simulationTime) and advance(double simulationTime) parameters to
osgViewer::SimpleViewer, Vewer and CompositeViewer.
Updated various examples and Nodes to use SimulationTime where appropriate.
text than an other well known txf loader. That means drawing them one on top
of the other I can only see differences due to different mipmapping ...
That is it introduces an additional gap of 0.1*height between the glyphs.
There is an additional mapping between upper and lowercase characters if one
of them is not available in the txf file.
And we have an artificial blank character that is very often missing in txf
files."
The cache works for nested externals but is cleared before the master
flight file is returned. I implemented texture caching using the same
mechanism."
Stephan and I tested it on Mac and Win.
Just a couple of notes:
* the plugin is able to load both regular 2D images and movie stream. There is a #define QT_HANDLE_IMAGES_ALSO mechanism to indicate whether to use it for images or not. This is defined by default on Mac only, to avoid conflicts with the standard windows plugins. See comments on QTUtils.h
* de-initialization of quicktime before exit is now left to an observer, which calls exitQuicktime() when last media loaded with the plugin is released. This prevent a crash on exit without need of any extra call external to the plugin."
The existing code uses a map with object ID's. The original code only applied the name to a node for a new ID only if the node did not already exist in the map. The problem was that there was another part of the code (when a parent was forward declared) that also created the node with the ID in the map, but it did not know its name. I simply made sure that the name was set regardless of whether or not the node was already in the map. "
--merged with fixes for texture coordinates(is this in CVS/SVN already)?
--changed above mentioned fix output level from osg::NOTIFY to osg::DEBUG_INFO
--added support for VRML97 ImageTextures.
--changed pointers to ref_pointers where possible.
--added format (method separated by "//////") for easier reading."
I have decided to just normalise the drive letter part of file names for the time being and also ensure that names of the format x:/xxxxx are treated as absolute paths. This will cover a lot of cases.
I have raised a bug against collada which hopefully should resolve some others. However there are some pathological cases which I have commented on in the code, these will probably never work properly unless there is a significant rewrite of the daeURI functionality. Hopefully they are rare."
dxfSection classes, so their members data are correctly deleted.
- changed some methods signatures to pass arguments by reference instead of
by value. The performance and memory usage are enhanced (the reader was
clogging the heap when reading some large DXF files)
The updated files have been compiled and tested with a variety of DXF files
on XP with VS2003, but the changes should not disturb any other compiler."
Performance tests on big models did not indicate any performance penalty in using doubles over floats,
so the move to doubles should mainly impact precision improvements for whole earth databases.
Also made improvements to osgUtil::PlaneIntersector and osgSim::ElevationSlice classes
Under this mode, each 4x4 texel block can selectively use an alpha component or none. When alpha-enabled blocks are present, this is not reported in the DDPF_ALPHAPIXELS bit in the pixel format flags causing the reader-writer to report the file as a 3-components file (GL_COMPRESSED_RGB_S3TC_DXT1_EXT). The fix requires looking at each 4x4 texel block to detect the presence of 1-bit alpha encoding. When such a block is found, the internal & pixel formats are reported as GL_COMPRESSED_RGBA_S3TC_DXT1_EXT instead.
See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/Opaque_and_1_Bit_Alpha_Textures.asp for more information."
following improvements:
- When all unsupported entities (SOLIDS, TEXT, ...) have been filtered out
from a block, dxfInsert::drawScene() was crashing because it assumed that
the block was not empty. It now returns silently so the other blocks can
still be imported.
- The DXF reader assumed all vertices were read first, then the face
indices. But, from the DXF "documentation" (www.autodesk.com/dxf) :
"Polyface meshes created with the PFACE command are always generated with
all the vertex coordinate entities first, followed by the face definition
entities. The code within AutoCAD that processes polyface meshes requires
this ordering. Programs that generate polyface meshes in DXF should generate
all the vertices then all the faces. However, programs that read polyface
meshes from DXF should be tolerant of odd vertex and face ordering."
So now the importer ignores the posted number of vertices and face indices,
and uses the size of the lists instead."
- does proper edge detection with the crease angle given in the ac file
- the reader is much more verbose in case of broken files
- no more static variables
- std::stream based
- much faster, up to a factor of 50 for a polygonal test model
- if the file contains polygonal surfaces the loaded geometry is still
polygonal as long as the polygons are convex. Concave polygons are still
tesselated. Rationale: If the user needs triangular models he can throw away
that extra information with the osgUtil::Optimizer himself. But the read step
preserves as much extra information that is contained in the file as
possible. Also the polygonal models look a bit smoother than the triangular
ones.
- a huge cleanup
- the basic parsing logic from the original ac3d developer is untouched
- the writer part is untouched
The tarball contains a replacement for the src/osgPlugins/ac3d directory that
is based on the current CVS (2006-11-13).
I have tested that loader with a osgconv foo.ac /tmp/xx.ive on everyfoo. ac
file I could find (~200 from flightgear and the object database). I also run
my flightgear development with that loader -> here I see the models.
I run valgrind testcases on some selected models."
I've attached a small fix for this.
Cause: uncompressed mipmap handling was done only for RGB pixel format.
Fix: added condition for handling alpha and luminance formats too."
contained an 8-bit color map. The crash occured at line 545:
remap_row(currPtr, inbuf, w, red, green, blue);
Cause: The code was trying to write past the end of the buffer while
doing this remapping. The size of the buffer is determined based on the
value of 'format', which was 1 in this case since bitspersample is
8(indicating a 8-bit color map). The buffer should have been created 3
times as large since that 8-bit value is indexing a 24-bit color.
Fix: I've put in an if statement to set format to 3 if 'photometric'
indicates the tif contains a palette as the output data will always be
24-bit color data in this case."
COLLADA plugin. dae->load will not return DAE_OK the second time a model is loaded, so a
second check for DAE_ERR_COLLECTION_ALREADY_EXISTS has been added."
only DAE instance when it's first needed instead of in the constructor.
This fixes the problem with osgdb_dae.dll not being loaded due to
unwanted ordering of global initialization.
This fix and the previous fix of the COLLADA plugin might be unnecessary
with the latest COLLADA DOM, but since many of us will probably still
use the older version of the DOM, I guess it's better this way.
"
plugin. It was only reading floats & doubles correctly on little
endian systems, which require byte swapping, and not on big
endian systems which don't require any swapping."
ignores the Object records if it's safe to do so. The reader option
preserveObject prevents this optimization.
I have also removed the flat shading attribute set by the Object
record. This flag is only intended for the "Calculate Shading"
operation in Creator."
( in OF external references) after the OF file is loaded. The change do
conditional
execution of already existing code.
I use this for optimized preprocessing of large databases what can not
be loaded
in one pass because of memory limits."
parent file is so old that it doesn't support Light Point palettes or Shader
palettes, then the parent file is not allowed to override those palettes in
the child."
osgPlugins\pfb\ConvertFromPerformer.cpp
Added support for
PFSTATE_ALPHAFUNC
PFSTATE_ALPHAREF
Improved handling of
PFTR_NO_OCCLUDE
I have tested this with WIN32 performer 3.1 and 3.2.2
and linux OpenGL Performer 3.1.1"
------------------------------------------------