2

我有两个或多或少相关的问题:

目前,我正在为 OpenSceneGraph 中更复杂的对象创建一个简单的线框模型。在空间中的某个坐标处创建一个非常原始的对象(一条线),将它们平移和旋转后,我想知道线的两个坐标的结果位置。如何以基本方式实现这一点?我需要坐标才能将以下 Geodes 组翻译到这一点(以自动“附加”它们)。我做了什么来创建和翻译我的行(在之后):

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 时,做一些不必要的低级工作有助于我正确理解概念。但是构建更复杂对象的高级方法是什么?一个不是静态的对象,它具有可以旋转的“关节”链——因此关节的每次旋转都会影响以下连接的关节。

编辑:明白了,很容易...:只是一个

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);
4

0 回答 0