OSG: получить координаты преобразованной примитивной линии? Строительные каркасы - PullRequest
2 голосов
/ 03 марта 2011

У меня есть два, более или менее связанных вопроса:

В настоящее время я работаю над созданием простой каркасной модели более сложного объекта в OpenSceneGraph. После создания очень примитивного объекта (линии) по определенной координате в пространстве, перемещения и поворота их вокруг, я хочу узнать результирующее положение двух координат линии. Как это можно сделать основным способом? Мне нужна координата, чтобы можно было перевести следующие группы геодезов в эту точку (чтобы «прикрепить» их автоматически). Что я сделал, чтобы создать и перевести мою строку (после этого этого ):

vertices->push_back(osg::Vec3(0,0,0));
vertices->push_back(osg::Vec3(1,0,0));
geom->setVertexArray(vertices);
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES,0,2));
geode->addDrawable(geom);
pat->addChild(geode);
pat->setPosition(osg::Vec3(0,0,0));

Попытка извлечь первую точку:

osg::Vec3* vertice = (osg::Vec3*)pat->getChild(0)->asGeode()->getDrawable(0)->asGeometry()->getVertexArray();

Но это все еще (0,0,0), даже после перевода в (1,1,1). Что я не прав?

Поскольку я хочу войти в 3D, выполнение более низкоуровневых вещей, чем необходимо, помогает мне понять концепции правильно. Но каков подход высокого уровня для создания более сложных объектов? Объект, который не является статичным, имеет цепи «соединений», которые можно вращать, поэтому каждое вращение соединения влияет на следующие присоединенные соединения.

edit: получил, просто как пирог ...: Просто

osg::Vec3* vec = new osg::Vec3(1,0,0);
osg::Matrixd* mat = new osg::Matrixd();
mat->makeRotate(pat->getAttitude());
osg::Vec3 endpoint = mat->preMult((*vec)*length);
...