C++ 旋转三维对象(OSG&;vc+;+;)
我正在用VC++和OSG开发一个3D环境,我需要一些帮助 我正在使用下面的代码为场景的3D模型充电C++ 旋转三维对象(OSG&;vc+;+;),c++,visual-c++,openscenegraph,C++,Visual C++,Openscenegraph,我正在用VC++和OSG开发一个3D环境,我需要一些帮助 我正在使用下面的代码为场景的3D模型充电 mueble00Node = osgDB::readNodeFile("Model/mueble_desk.3ds"); mueble00Transform = new osg::MatrixTransform; mueble00Transform->setName("mueble00"); mueble00Transform->setDataVaria
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);
我尝试用一些线来旋转三维模型,但没有结果
谁能给我解释一下如何在自己的轴上旋转模型吗?你会想用一个quat
它有许多函数可用于旋转。使用
矩阵变换::setMatrix()
更改子节点的方向
MatrixTransform* transform = new osg::MatrixTransform;
const double angle = 0.8;
const Vec3d axis(0, 0, 1);
transform->setMatrix(Matrix::rotate(angle, axis));
下面是一个完整的程序,用于加载和显示添加或不添加变换的三维对象
#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, 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();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间osg;
int main(int argc,字符**argv)
{
如果(argc!=2){
std::cerr addChild(节点);
//启动场景图查看器。
osgViewer::查看器;
查看器.setSceneData(场景);
setCameraManipulator(新的osgGA::TrackballManipulator());
viewer.realize();
而(!viewer.done())viewer.frame();
}
我通常使用PositionAttitudeTransform
而不是MatrixTransform
。我发现使用PAT
可以直接使用setAttitudeTransform
方法指定偏差,该方法将osg::Quad
作为参数。至于MatrixTransform
,您没有指定旋转的矩阵。。。