Hi Sérgio,
the first time your node is rendered OpenSG internaly creates a display
list this takes some time. How many triangles do your geometry have? Can
you try to call window->validateAllGLObjects() once before rendering.
The missing for loop to create the texture coordinates is just a cut and
paste error?
Andreas
Hi,
I'm working on an application which uses custom-made geometry. The
problem is that the first time the application renders a node which it
hasn't rendered before it freezes for a while (a long while) and then
works fine. This happens with my geometry but not with functions in
OSGSimpleGeometry like makeSphereGeo. I noticed that the problem is not
due to the amount of vertices and faces (different number of vertices
and faces, same problem, same freezing time), although the more objects,
the more freezing time I'll get.
Here's my code (sorry about the size of it, I've cut it the most I could):
<code>
GeoPositions3fPtr pPos;
GeoTexCoords2fPtr pCoords;
GeoPTypesUI8Ptr pType;
GeoPLengthsUI32Ptr pLength;
GeoIndicesUI32Ptr pIndices;
GeoPositions3f::StoredFieldType * pP;
GeoTexCoords2f::StoredFieldType * pTx;
GeoIndicesUI32::StoredFieldType * pI;
GeoPLengthsUI32::StoredFieldType * pL;
GeoPTypesUI8::StoredFieldType * pT;
for( n = 0; n < 6; n++ )
{
pPos = GeoPositions3f::create();
pCoords = GeoTexCoords2f::create();
pType = GeoPTypesUI8::create();
pLength = GeoPLengthsUI32::create();
pIndices = GeoIndicesUI32::create();
pP = pPos->getFieldPtr();
// position & colors
beginEditCP(pPos);
for(i=0; i<m_iNumPoints; i++)
{
...........calculate vTemp.........
pP->push_back( vTemp );
}
endEditCP(pPos);
pTx = pCoords->getFieldPtr();
// tex coords
beginEditCP(pCoords);
pTx->push_back(Vec2f(...)); endEditCP(pCoords);
pT = pType->getFieldPtr();
// type of primitives
beginEditCP(pType);
pT->push_back(GL_TRIANGLES);
endEditCP(pType);
pL = pLength->getFieldPtr();
// vertex count
beginEditCP(pLength);
pL->push_back(iNumTris*3);
endEditCP(pLength);
pI = pIndices->getFieldPtr();
// indices
beginEditCP(pIndices);
for(i=0; i<iNumTris; i++)
{
pI->push_back(...);
pI->push_back(...);
pI->push_back(...);
}
endEditCP(pIndices);
m_pGeo[n] = Geometry::create();
beginEditCP(m_pGeo[n]);
m_pGeo[n]->setIndices(pIndices);
m_pGeo[n]->setTypes(pType);
m_pGeo[n]->setLengths(pLength);
m_pGeo[n]->setPositions(pPos);
m_pGeo[n]->setTexCoords(pCoords);
m_pGeo[n]->setMaterial(getDefaultMaterial());
m_pGeo[n]->getIndexMapping().push_back( Geometry::MapPosition
| Geometry::MapTexCoords ); // <- saw this in makePlaneGeo
endEditCP(m_pGeo[n]);
calcVertexNormals( m_pGeo[n] );
m_pGeoNode[n] = Node::create();
beginEditCP( m_pGeoNode[n] );
m_pGeoNode[n]->setCore(m_pGeo[n]);
//m_pGeoNode[n]->setCore(makeSphereGeo(3,1)); // <- by
removing the line above and using this one, it works without the freeze
endEditCP( m_pGeoNode[n] );
}
m_pNode = Node::create();
beginEditCP(m_pNode);
m_pNode->setCore(Group::create());
for( n = 0; n < 6; n++ )
{
m_pNode->addChild(m_pGeoNode[n]);
}
endEditCP(m_pNode);
</code>
The object is composed of 6 different geometric parts as you can see.
I think the problem is in the geometry creation, because replacing my
geometry with simple geometry functions (as I comented on the code) it
stays frozen for a shorter period of time.
I've looked in the OpenSG source for make[...]Geo functions and still
can't find out what's the problem.
I either force it to render all nodes in the first frame and get a
reasonable amount of frozen time, or it freezes everytime a node is
rendered for the first time. After that, all is normal.
Thanks in advance,
Sérgio Vieira
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log
files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users