Мне нужна помощь при вычислении координат текстуры для набора треугольников. Есть ли функция, которая вычисляет их в соответствии с координатами вершин без шейдеров? Или как их можно вычислить вручную с использованием вершинных нормалей? У меня есть большое количество маленьких треугольников, рассчитанных из облака точек и не имеющих возможности влиять на них. Моя упрощена тестовая программа выглядит следующим образом:OpenSceneGraph: координаты текстур для треугольников
//read texture
text = new_message->text;
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
texture->setDataVariance(osg::Object::DYNAMIC);
osg::ref_ptr<osg::Image> image = osgDB::readImageFile("Images/" +text);
if (!image)
{
std::cout << "Couldn't load texture." << std::endl;
}
texture->setImage(image.get());
...
//create and fill an array of vertices
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(...));
...
osg::ref_ptr<osg::Geometry> quad = new osg::Geometry;
quad->setVertexArray(vertices.get());
quad->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLES, 0, 12));
//calculate normals
osgUtil::SmoothingVisitor::smooth(*quad);
geode = new osg::Geode;
geode->addDrawable(quad.get());
//calculate texture coordinates
osg::StateSet *state = geode->getOrCreateStateSet();
state->setTextureAttributeAndModes(1, texture.get(), osg::StateAttribute::ON);
state->setTextureMode(1, GL_TEXTURE_GEN_S, osg::StateAttribute::ON);
state->setTextureMode(1, GL_TEXTURE_GEN_T, osg::StateAttribute::ON);
state->setTextureMode(1, GL_TEXTURE_GEN_R, osg::StateAttribute::ON);
state->setTextureMode(1, GL_TEXTURE_GEN_Q, osg::StateAttribute::ON);
geode->setStateSet(state);
Рассчитанные нормалей работают отлично, текстурные координаты не работает вообще - я получаю черные треугольники. Существует мало информации о том, как использовать GL_TEXTURE_GEN_S, поэтому любая помощь будет действительно оценена. UPD: Я вычислил координаты текстуры вручную, используя следующие формулы http://paulyg.f2s.com/uv.htm
спасибо, что ответ Kento! – Etimr