[osg-users] Textured ply file is black when loaded.

Robert Osfield robert.osfield at gmail.com
Tue Jan 21 03:47:07 PST 2020

Hi Tom,

FYI, it's was a community submission back in 2009, I don't personally know 
the ply format or have done anything more than cosmetic work on this 
plugin.  I basically in the same boat as yourself in terms of ability to 
debug the format, I just have to look at the code and see what it's doing 
with your file.  It could be a buggy file, or a buggy plugin, or perhaps a 
revision to the ply specs since the OSG plugin was written.  The 
investigation might determine which.

I have begun looking into the issue with reading your ply file, I just get 
a grey model right now.  Converting to .osgt using:

   osgconv Wareneingang2.ply test.osgt

And then looking the test.osgt in an editor reveals that the model has no 
texture coordinats.

The next step was to add some debugging to the ply plugin to see what was 
happening in texture coordinates code:

diff --git a/src/osgPlugins/ply/vertexData.cpp 
index f2db29e00..58293f8dd 100644
--- a/src/osgPlugins/ply/vertexData.cpp
+++ b/src/osgPlugins/ply/vertexData.cpp
@@ -174,6 +174,9 @@ void VertexData::readVertices( PlyFile* file, const int 
             _texcoord = new osg::Vec2Array;
+    std::cout<<"fields = "<<(fields)<<std::endl;
+    std::cout<<"fields & TEXCOORD = "<<(fields & TEXCOORD)<<std::endl;
     // read in the vertices
     for( int i = 0; i < nVertices; ++i )

The result was that the plugin wasn't detected any valid texture 
coordinates as the field mask didn't enable TEXCOORD , so then I looked 
header parsing code and it looks like:

           // determine if the file stores vertex colors
            for( int j = 0; j < nProps; ++j )
                // if the string have the red means color info is there
                if( equal_strings( props[j]->name, "x" ) )
                    fields |= XYZ;
                if( equal_strings( props[j]->name, "nx" ) )
                    fields |= NORMALS;
                if( equal_strings( props[j]->name, "alpha" ) )
                    fields |= RGBA;
                if ( equal_strings( props[j]->name, "red" ) )
                    fields |= RGB;
                if( equal_strings( props[j]->name, "ambient" ) )
                    fields |= AMBIENT;
                if( equal_strings( props[j]->name, "diffuse_red" ) )
                    fields |= DIFFUSE;
                if (equal_strings(props[j]->name, "specular_red"))
                    fields |= SPECULAR;
                if (equal_strings(props[j]->name, "texture_u"))
                    fields |= TEXCOORD;
                if (equal_strings(props[j]->name, "texture_v"))
                    fields |= TEXCOORD;

So... the plugin is only checking for texture_u and texture_v, but if we 
look at your .ply file the header has: 

format binary_little_endian 1.0
comment VCGLIB generated
comment TextureFile Wareneingang_material_0_map_Kd.jpg
element vertex 99428
property float x
property float y
property float z
element face 186642
property list uchar int vertex_indices
property list uchar float texcoord
property uchar red
property uchar green
property uchar blue
property uchar alpha

Which suggests it only has a single texcoord, no texcoord_u or texcoord_v 
field that the OSG is assuming is required for textured ply files.  For a 
2D textured file I would expect two fields, like the head explicitly has to 
the x, y, z and red, green, blue, alpha values.

Does texcoord now implictly mean a x,y value?  Is there some other encoding?

A quick search online for the spec takes me to:


Which doesn't say anything explicit about texcoords so it looks like this 
is user definable in which case how to interpret things could be really 
open ended.

I haven't yet found any explanation online about what is expected in this 
case.  I know nothing about the tools you've used to create the file.  This 
my first experience with looking into the PLY spec and the actual file 
format and haven't away knowing is there is any official guide to what 
should be doing with files which using the texcoords field.  To me it looks 
like some tools have decided on their own convention and some other tools 
honour this, but without know exactly what it is I don't have anything to 
go on to make modifications to the OSG's ply plugin.

I have to defer further work on this to members of the community that 
actually use PLY files in their applications, you will have more knowledge 
than myself and what might be meant.

You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+unsubscribe at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/b1f92194-53eb-42ff-a7c8-e73cd2a65b60%40googlegroups.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20200121/e9273aa5/attachment.html>

More information about the osg-users mailing list