Я пытаюсь создать контур вокруг фрагмента 2D-геометрии в сцене. Контур появляется только на одной стороне геометрии, и я хочу, чтобы он появился на обеих сторонах. Я предполагаю, что есть настройка, которую мне нужно указать, но, будучи новичком в OSG, я не знаю, что это может быть; Я не могу разглядеть это из документации или онлайн-примеров.
Геометрия - это, в основном, плоская плоскость, состоящая из группы более мелких плоских плоскостей с торчащими из одной стороны стеблями.
// Initialize an outline
osg::ref_ptr<osgFX::Outline> vCellOutline = new osgFX::Outline;
mModel3D->addChild(vCellOutline); // Add it as a child of the grid so it appears in the scene
vCellOutline->setWidth(8); // Set some stuff so it appears
vCellOutline->setColor(osg::Vec4(1, 1, 0, 1));
osg::ref_ptr<osg::StateSet> vOutlineState = vCellOutline->getOrCreateStateSet();
vOutlineState->setMode(GL_LIGHTING, osg::StateAttribute::PROTECTED | osg::StateAttribute::ON);
// Add the cell as a child of the outline
vCellOutline->addChild(vCellGeode);
Я пытался увеличить ширину, так как думал, что она не просвечивает, но это не имеет значения. Контур исчезает, когда камера просматривает геометрию из-за перспективы "сбоку".
Я немного погуглил и попробовал разные вещи, такие как назначение двухсторонней модели освещения (если она не освещалась должным образом), попытка отключить отбраковку, например,
vOutlineState->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
vCellOutline->setCullingActive(false);
Но это ничего не сделало. Я подумал, что нашел решение, когда увидел, что по умолчанию osg Outlines отбрасывает их фронтальные полисы , поэтому я попытался:
osg::ref_ptr<osg::CullFace> cf = new osg::CullFace;
cf->setMode(osg::CullFace::FRONT);
vOutlineState->setAttributeAndModes(cf, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE);
Но опять же, никакого эффекта. Интересно, что с помощью этого метода я могу отключить заднюю панель.