gpt4 book ai didi

c++ - OpenSceneGraph - 如何添加一堵墙或三堵墙

转载 作者:行者123 更新时间:2023-11-28 03:34:38 24 4
gpt4 key购买 nike

我需要在我的场景图中添加一堵墙,并让它正常工作,这样我的相机就不能越过墙。我正在创建一个实验室场景,但我对一般的 3d 编程不熟悉。我一直在使用 OpensceneGraph 3.0 Beginner's guide 这本书,到目前为止,好的。

我的场景中有几件家具,但我想做的是添加一堵墙,我的相机不能越过它。我下面的代码,来自 Openscenegraph 初学者这本书,似乎没有做任何事情(第 83 页)。我添加了它,但我没有看到墙,而且我仍然可以使用我的相机在场景中的任何地方移动。如何在我的应用程序中创建一堵墙。

osg::ref_ptr<osg::Group> root = new osg::Group();
//adding walls to the lab to make it more room like -- 7/6/12
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
vertices->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(1.0f, 0.0f, 1.5f));
vertices->push_back(osg::Vec3(2.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(2.0f, 0.0f, 1.0f));
vertices->push_back(osg::Vec3(3.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(3.0f, 0.0f, 1.5f));
vertices->push_back(osg::Vec3(4.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(4.0f, 0.0f, 1.0f));

osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
normals->push_back(osg::Vec3(0.0f, -1.0f, 0.0f));

osg::ref_ptr<osg::Geometry>geom = new osg::Geometry;
geom->setVertexArray(vertices.get());
geom->setNormalArray((normals.get()));
geom->setNormalBinding((osg::Geometry::BIND_OVERALL));
geom->addPrimitiveSet((new osg::DrawArrays(GL_QUAD_STRIP,0,10)));
osg::ref_ptr<osg::Geode> wall = new osg::Geode;
wall->addDrawable(geom.get());
root->addChild(wall);

osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
viewer.run();

最佳答案

您已经按照上面的代码绘制了“墙”——它看起来更像是栅栏而不是墙,但是您可以通过将 1.0 值一直移动到 1.5 以匹配其他值来轻松解决这个问题。由于比例差异,您可能看不到场景的其余部分 - 例如,如果您的家具尺寸以 100 为单位。将您的 root->addChild(wall) 替换为以下代码:

 // assumes your furniture is already added to root
float scale=root->getBound().radius();
osg::ref_ptr<osg::PositionAttitudeTransform> pax = new osg::PositionAttitudeTransform;
pax->addChild(wall);
pax->setScale(osg::Vec3d(scale,scale,scale));
root->addChild(pax);

然后你会看到你的栅栏。移动 pax 的位置/旋转以放置您的墙。正如我在评论中提到的那样,您将不得不使用一些交集代码来告诉相机在何处停止。

关于c++ - OpenSceneGraph - 如何添加一堵墙或三堵墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11367821/

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