I'm hoping that someone can help me with a weird problem I'm having with an 
openflight terrain I have. 

It seems that when I mesh my terrain (with Multigen Creator 2.5.1)  I can't see 
it anyore. Note that the problem only occurs when I disable lighting (i.e 
GL_LIGHTING). However, when I un-mesh the terrain (seperate faces) then it 
works correctly, regarless of the lighting state. 

I converted the *.FLT to *.OSG so that I can look at the different between the 
meshed and un-meshed version. What I discovered was that the color array in the 
meshed version contained invalid RGBA components - they do not correspond to 
the color set within Creator. The color should be (1,1,1,1) but I'm getting 
(1,0,1,0). So it's normal that I don't see the terrain because the alpha is 0. 
The green component also 0, which I can't understand as well.

For example:


Code:

      ColorBinding PER_VERTEX
      ColorArray Vec4Array 9
      {
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
        1 0 1 0
      }




The reason why I want to use the meshed version of the terrain is to improve 
rendering performance.

We've isolated the problem in the LocalVertexPool::readRecord() function in the 
openflight plugin. It seems that the <alphaIndex> value extracted from the FLT 
is incorrect (see snipit below).


Code:

virtual void readRecord(RecordInputStream& in, Document& document)
{
[...]
            if (mask & HAS_COLOR_INDEX)
            {
                uint32 alphaIndex = in.readUInt32(); [b]// << Bad 
alphaIndex.[/b]

                int index = alphaIndex & 0x00ffffff;
                uint8 alpha = alphaIndex >> 24;
                osg::Vec4 color = document.getColorPool()->getColor(index);
                color.a() = (float)alpha/255;
                vertex.setColor(color);

                if (!color.valid())
                {
                    osg::notify(osg::NOTICE)<<"Warning: data error detected in 
LocalVertexPool::readRecord color="<<color.r()<<" "<<color.g()<<" 
"<<color.b()<<" "<<color.a()<<std::endl;
                }
            }

[...]
}




Obviously, the meshed FLT file  could ne invalid, right? So I used a different 
application (an old 3D Explorer app) to load the meshed version and it works 
correctly. 

I can't exaplin it.

I've attached a snipit of the terrain for you to look at. It contains the 
following files:

.\gr01.rgb 
.\gr01.rgb .attr
.\small_faces.flt           : unmeshed version
.\small_faces.osg
.\small_mesh.flt           : meshed version
.\small_mesh.osg

Can anyone shed some light of this problem?

Cheers,
Guy

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=25823#25823




Attachments: 
http://forum.openscenegraph.org//files/smallflt_129.zip


_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to