gpt4 book ai didi

c++ - 旋转 3D 对象 (OSG & vc++)

转载 作者:太空狗 更新时间:2023-10-29 21:07:00 27 4
gpt4 key购买 nike

我正在使用 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, 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, 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();
}

关于c++ - 旋转 3D 对象 (OSG & vc++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com