如何解决旋转3D对象OSG&vc ++
| 我正在使用VC ++和OSG开发3D环境,我需要一些帮助 我正在使用下面的代码为场景充电3D模型 mueble00Node = osgDB::readNodeFile(\"Model/mueble_desk.3ds\");
mueble00Transform = new osg::MatrixTransform;
mueble00Transform->setName(\"mueble00\");
mueble00Transform->setDataVariance(osg::Object::STATIC);
mueble00Transform->addChild(mueble00Node);
sceneRoot->addChild(mueble00Transform);
我尝试了一些线来旋转3D模型,但没有结果
有人可以向我解释如何在自己的轴上旋转模型吗?
解决方法
使用
MatrixTransform::setMatrix()
更改子节点的方向。
MatrixTransform* transform = new osg::MatrixTransform;
const double angle = 0.8;
const Vec3d axis(0,1);
transform->setMatrix(Matrix::rotate(angle,axis));
下面是一个完整的程序,可以加载和显示3D对象,并添加和不添加转换。
#include <string>
#include <osg/Object>
#include <osg/Node>
#include <osg/Transform>
#include <osg/Matrix>
#include <osg/MatrixTransform>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
using namespace osg;
int main(int argc,char** argv)
{
if (argc != 2) {
std::cerr << \"Usage: \" << argv[0] << \"<file>\\n\";
exit(1);
}
const std::string file = argv[1];
// Load a node.
Node* node = osgDB::readNodeFile(file);
if (!node) {
std::cerr << \"Can\'t load node from file \'\" << file << \"\'\\n\";
exit(1);
}
// Set a transform for the node.
MatrixTransform* transform = new osg::MatrixTransform;
const double angle = 0.8;
const Vec3d axis(0,1);
transform->setMatrix(Matrix::rotate(angle,axis));
transform->setName(file);
transform->addChild(node);
// Add the node with and without the transform.
Group* scene = new Group();
scene->addChild(transform);
scene->addChild(node);
// Start a scene graph viewer.
osgViewer::Viewer viewer;
viewer.setSceneData(scene);
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.realize();
while (!viewer.done()) viewer.frame();
}
,您将要使用quat
http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00568.html
它具有许多可用于旋转的功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。