Thanks Robert, I'll follow this way. You are right, this is the way to get the quickest results.
- Werner - Am Donnerstag, 26. August 2010 14:19:48 schrieb Robert Osfield: > Hi Werner, > > Possible the most simple and quickest way for you to set things up is > to simple create a new vertex, normal and tex coords for every > triangle corner, then use osg::DrawArrays(GL_TRIANGLES, > total_no_of_new_vertices) for the PrimitiveSet, and BIND_PER_VERTEX > for the binding of the normals. Note, you'll need to create a new > Vec3Array for the vertices form the index and orignal vertex data. > > This won't be the most efficient route as it's likely to result in > duplicate vertices but at least it should be very straight forward. > You can make things more efficient later. > > Robert. > > On Thu, Aug 26, 2010 at 12:08 PM, Werner Modenbach > > <[email protected]> wrote: > > Thanks Robert, I get closer to it. > > > > Just for verification: > > > > If I have i.e. 10 vertexes and I get 20 calls to the callback method each > > defining a triangle. > > Each call gives me 3 indexes, 3 normals and 3 texcoords. > > > > Right now I just push everything into the corresponding arrays and at the > > end I call: > > geometry->addPrimitiveSet(new > > osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, > > osgVertexIndices->size())); > > > > You say this will not work because: > > 1) geometry->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE_SET); > > expects just 1 normal for the whole thing (?) > > 2) Texture coordinates are allways bound per vertex? > > > > In this case I have to: > > 1) initialize a normal array with Vec3(0.0, 0.0, 0.0) > > for each triangle callback I have to look on each vertex index , if > > the indexes normal is 0 > > if yes: just set it > > if no: duplicate the vertex at the end of the vertexes and > > push_back the normal > > 2) do something comparable on the texcoords > > > > Is that your recommendation? > > > > Is there any way to bind normals to the vertex indexes? > > > > Thanks in advance! > > > > - Werner - > > > > Am Donnerstag, 26. August 2010 12:06:34 schrieb Robert Osfield: > >> Hi Werner, > >> > >> > >> BIND_PER_PRIMITIVE_SET will mean that you'll have one of the > >> associated attribute (i.e. colour, normal) per osg::PrimitiveSet > >> attached the osg::Geometry, so if you have one osg::DrawElementsUShort > >> used for the triangles then you'll need just one of the associated > >> attribute for it. > >> > >> BIND_PER_PRIMITIVE will apply the attribute per primitive in you case > >> per triangle. > >> > >> Tex coords in the OSG are always bound per vertex, there isn't a > >> control to alter this. > >> > >> If you have a vertex array and indices for your triangles the natural > >> thing to do would be to use a osg::DrawElementsUShort(GL_TRIANGLES) > >> then use push_back(tri.p1) for each index on each triangle. > >> > >> I would suggest binding the normals per vertex, you'll have to do this > >> for the tex coords as well. If a single vertex will have multiple tex > >> coords or multiple normals associated with it due to differences in > >> the triangles then you'll need to duplicate the vertices and remap the > >> indices on the triangles to fit this. > >> > >> Robert. > >> > >> On Thu, Aug 26, 2010 at 10:38 AM, Werner Modenbach > >> > >> <[email protected]> wrote: > >> > Thank you Paul for your response. > >> > > >> > Yes, you are right, the solution isn't perfect at all. But I'm > >> > integrating some external code which is just giving me a vertex array > >> > and a per triangle callback with vertex indexes and normal and texture > >> > coords. > >> > > >> > And further more I need some screenshots very urgently for a customer > >> > presentation. > >> > > >> > The performance improvement has to wait :-( > >> > > >> > So I try to analyse why it's not working. And I detected something I > >> > don't understand. > >> > In my opinion it should give the same result having: > >> > 1) one normal per triangle an binding PER_PRIMITIVE > >> > 2) 3 times the same normal and binding PER_PRIMITIVE_SET > >> > > >> > But it doesn't. So I'm confused. > >> > > >> > Thanks for further hints. > >> > > >> > - Werner - > >> > > >> > Am Mittwoch, 25. August 2010 22:41:14 schrieb Paul Martz: > >> >> Werner Modenbach wrote: > >> >> > Maybe someone can give me some explanation on my stupid little > >> >> > problem. > >> >> > > >> >> > I have a geometry being composed of TRIANGLES. > >> >> > I have a vertex-array, a verted-index-array and a normal-array > >> >> > assigned to my geometry. > >> >> > >> >> Off-topic: Do you need to use the vertex-index-array? It is > >> >> deprecated: /** deprecated - forces OpenGL slow path, just kept for > >> >> backwards compatibility.*/ > >> >> void setVertexIndices(IndexArray* array); > >> >> > >> >> > 3 indexes and 3 normals per Triangle. > >> >> > Normal binding is set to BIND_PER_PRIMITIVE_SET. > >> >> > > >> >> > Unfortunately the rendering shows the geometry flat in curious dark > >> >> > colors and some unexpected light behaviour. > >> >> > For analysis purpose I set the normal binding to BIND_PER_PRIMITIVE > >> >> > and pushed just 1 normal per TRIANGLE. > >> >> > Everything looks good except I see the triangles and the geometry > >> >> > isn't smooth. > >> >> > The next test is pushing the same normal vector 3 times and setting > >> >> > the binding back to BIND_PER_PRIMITIVE_SET. > >> >> > In my understanding this should give the same optical result as > >> >> > before. Unfortunately it doesn't and everything is dark again. > >> >> > > >> >> > I guess, I misunderstand something with the normal bindings. > >> >> > > >> >> > Any hint is highly appreciated. Thanks in advance > >> >> > >> >> I'm not sure why you don't use BIND_PER_VERTEX, as you stated above > >> >> that your normal array contains 3 normals per triangle, so you have > >> >> one normal per vertex, right? > >> >> > >> >> BIND_PER_PRIMITIVE would result in flat shading (only one normal used > >> >> for each triangle -- which, by the way, also forces OpenGL down the > >> >> slow path), and BIND_PER_PRIMITIVE_SET would be even more granular: > >> >> one normal used for each PrimitiveSet you add to the Geometry. This > >> >> would make all triangles in the PrimitiveSet either uniformly dark > >> >> or uniformly lit, depending on the direction of the one normal used > >> >> for the whole group. > >> >> > >> >> For analysis purposes, I suggest using the normals pseudoloader: > >> >> > osgviewer dumptruck.osg.normals > >> >> > >> >> Hope that helps, > >> >> -Paul > >> >> > >> >> _______________________________________________ > >> >> osg-users mailing list > >> >> [email protected] > >> >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph > >> >> .or g > >> > > >> > -- > >> > TEXION Software Solutions > >> > > >> > TEXION GmbH - Rotter Bruch 26a - D 52068 Aachen - HRB 14999 Aachen > >> > Fon: +49 241 475757-0, Fax: +49 241 475757-29, web: > >> > http://www.texion.eu > >> > > >> > Geschäftsführer/Managing Director: Werner Modenbach > >> > _______________________________________________ > >> > osg-users mailing list > >> > [email protected] > >> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph. > >> > org > >> > >> _______________________________________________ > >> osg-users mailing list > >> [email protected] > >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or > >> g > > > > -- > > TEXION Software Solutions > > > > TEXION GmbH - Rotter Bruch 26a - D 52068 Aachen - HRB 14999 Aachen > > Fon: +49 241 475757-0, Fax: +49 241 475757-29, web: http://www.texion.eu > > > > Geschäftsführer/Managing Director: Werner Modenbach > > _______________________________________________ > > osg-users mailing list > > [email protected] > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org -- TEXION Software Solutions TEXION GmbH - Rotter Bruch 26a - D 52068 Aachen - HRB 14999 Aachen Fon: +49 241 475757-0, Fax: +49 241 475757-29, web: http://www.texion.eu Geschäftsführer/Managing Director: Werner Modenbach _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

