Hi Sam, On a quick read of your code I can't see a problem. Does this work OK?
It's perfectly find to just use DrawArrays without indices like you have done. You can mix both DrawArrays and DrawElementsUShort in a single osg::Geometry as well. I'm not clear on what issue you are having. Cheers, Robert. On Thu, 14 Jun 2018 at 09:24, Sam Brkopac <brko...@gmail.com> wrote: > > Hi Robert, > > I have the mesh setup correctly using the DrawElementsUShort. My question was > regarding drawing the walkable triangles that are attached to the mesh. These > don't have indices and just consist of the vertex information. Here was my > approach to draw them. > > > Code: > > for (size_t index = 0; index < sno.mystery_section_count(); index++) > { > const auto * mystery_section = sno.mystery()->at(index); > > const auto triangleSectionCount = > mystery_section->triangle_section_count(); > > osg::ref_ptr<osg::Geode> flags = new osg::Geode; > grouping->addChild(flags); > > const osg::Vec4 non(1.0f, 0.0f, 0.0f, 0.5f); // red for non-walkable > const osg::Vec4 floor(0.0f, 1.0f, 0.0f, 0.5f); // green for walkable > const osg::Vec4 water(0.0f, 0.0f, 1.0f, 0.5f); // blue for water > > osg::ref_ptr<osg::Vec4Array> color(new osg::Vec4Array(1)); > > switch (mystery_section->floor()) > { > case sno_t::floor_t::FLOOR_IGNORED: > (*color)[0] = non; > break; > case sno_t::floor_t::FLOOR_FLOOR: > (*color)[0] = floor; > break; > case sno_t::floor_t::FLOOR_WATER: > (*color)[0] = water; > break; > } > > for (size_t j = 0; j < triangleSectionCount; j++) > { > const auto * triangle_section = > mystery_section->triangle_section()->at(j); > > const auto * triangleA = triangle_section->triangle()->a(); > const auto * triangleB = triangle_section->triangle()->b(); > const auto * triangleC = triangle_section->triangle()->c(); > > // setup the vertices based on the triangles > osg::ref_ptr<osg::Vec3Array> vertices(new osg::Vec3Array(3)); > (*vertices)[0] = osg::Vec3(triangleA->x(), triangleA->y(), > triangleA->z()); > (*vertices)[1] = osg::Vec3(triangleB->x(), triangleB->y(), > triangleB->z()); > (*vertices)[2] = osg::Vec3(triangleC->x(), triangleC->y(), > triangleC->z()); > > // setup our geometry > osg::ref_ptr<osg::Geometry> geometry(new osg::Geometry); > geometry->setVertexArray(vertices); > geometry->setColorArray(color); > geometry->setColorBinding(osg::Geometry::BIND_OVERALL); > geometry->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLES, 0, 3)); > > osg::ref_ptr<osg::Geode> geode(new osg::Geode); > geode->addDrawable(geometry); > geode->getOrCreateStateSet()->setMode(GL_LIGHTING, > osg::StateAttribute::OFF); > geode->getOrCreateStateSet()->setMode(GL_BLEND, > osg::StateAttribute::ON); > > geode->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); > > // prevent z-fighting. > osg::ref_ptr<osg::PolygonOffset> polyOffset = new osg::PolygonOffset; > polyOffset->setFactor(-1.0f); > polyOffset->setUnits(-1.0f); > > osg::ref_ptr<osg::PolygonMode> polyMode = new osg::PolygonMode; > polyMode->setMode(osg::PolygonMode::FRONT_AND_BACK, > osg::PolygonMode::FILL); > geode->getOrCreateStateSet()->setAttributeAndModes(polyOffset, > osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON); > geode->getOrCreateStateSet()->setAttributeAndModes(polyMode, > osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON); > > flags->addChild(geode); > } > } > > > > > If you have any feedback on the methodology, I'd love to hear it. > > Thanks, > Sam[/code] > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=74070#74070 > > > > > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org