我有两个或多或少相关的问题:
目前我正致力于在OpenSceneGraph中创建一个更复杂对象的简单线框模型。在空间中的某个坐标处创建一个非常原始的对象(一条线),然后平移和旋转它们之后,我想知道该线的两个坐标的结果位置。如何以基本方式实现这一目标?我需要坐标能够将下面的Geodes组转换到这一点(自动“附加”它们)。我做了什么来创建和翻译我的行(在此this之后):
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();
但即使在翻译成(1,1,1)之后,这个仍然是(0,0,0)。我错了什么?
当我想进入3D时,做更多低级的东西比必要的东西帮助我理解正确的概念。但是构建更复杂对象的高级方法是什么?一个非静态的物体,它具有可以旋转的“关节”链 - 因此关节的每次旋转都会影响下面的连接关节。
编辑:得到它,像馅饼一样容易......:只是一个
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);