PeriDyno当前提供了立方体、球体、圆柱体、圆锥体四种基本几何体,均继承于ParametricModel类,且最终可以输出TriangleSet数据,以描述三角网格结构。四种基本几何体均具有位置(Location)、旋转(Rotation)、缩放(Scale)的共有属性,以便调整基本几何体变换。此外每个基本集合体又依据其特性有其独有的属性。
立方体Cube:具有Length及Segments属性以定义其三个轴向的边长与分段数。
首先确保Main函数中调用了Modeling::initStaticPlugin()以构建工具架。
Modeling::initStaticPlugin();
创建方法1:在图形界面上方切换到Modeling标签,点击下方基本几何体按钮以创建对应节点(如图中红色框所标识的部分)。
创建方法2:在节点工作区点击鼠标右键,搜索需要的几何体类名,点击以创建对应节点(如图中绿色框所标识的部分)。
编辑:点击所需要修改的节点使其高亮显示,修改属性编辑面板Property Editor参数以编辑基本几何体参数。
本示例从Qt_GUI_Empty空场景示例为起点构建。
1、引用所需要使用的类如立方体#include “CubeModel.h”
2、构建场景图 std::shared_ptr < SceneGraph > scn = std::make_shared< SceneGraph >();
3、为scn场景图添加CubeModel节点 auto Cube = scn->addNode(std::make_shared< CubeModel< DataType3f > >());
4、设置场景图window.setSceneGraph(scn);
#include <QtApp.h>
#include "initializeModeling.h"
#include "initializeInteraction.h"
#include "CubeModel.h"
using namespace dyno;
int main()
{
std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
auto Cube = scn->addNode(std::make_shared<CubeModel<DataType3f>>());
Modeling::initStaticPlugin();
Interaction::initStaticPlugin();
QtApp window;
window.setSceneGraph(scn);
window.createWindow(1366, 768);
window.mainLoop();
return 0;
}
构建完成后运行效果如下:
创建基本几何体后可以通过->获取变量,并使用SetValue()设置参数。
Cube->varLength()->setValue(Vec3f(0.5,0.2,0.5));
Cube->varRotation()->setValue(Vec3f(0,45,0));
Cube->varLocation()->setValue(Vec3f(0,-0.1,0));
修改完成后运行效果如下:
首先点击ObjPointLoader按钮,创建ObjPoint节点,选择Obj点集文件路径,以作为TurningModel的输入。
点击TurningModel按钮,创建TurningModel节点。将ObjPoint的PointSet输出连接到TurningModel的PointSet输入端。
选择ObjPoint节点,点击节点右上角按钮隐藏显示。
1、引用ObjPoint、TurningModel的头文件
#include "Plugin/ObjIO/ObjPointLoader.h"
#include "Turning.h"
2、创建曲线
//创建曲线
auto Curve = scn->addNode(std::make_shared<ObjPoint<DataType3f>>());
Curve->varFileName()->setValue(getAssetPath() + "curve/curve06_subdivide.obj");
3、创建Turning模型,在场景图scn上添加TurningModel节点
//创建Turning模型
auto Turn = scn->addNode(std::make_shared<TurningModel<DataType3f>>());
4、将Curve的OutPointSet连接到TurningModel的inPointSet
Curve->outPointSet()->connect(Turn->inPointSet());
5、修改Turning参数,将垂直分段数提高到50以使模型更加精细。
Turn->varColumns()->setValue(50);
构建完成后运行效果如下:
本部分以上文构建的Turning和Cube为起点,展示Merge使用方法。以下为Merge前的场景展示。
点击Merge创建Merge节点,将TurningModel的TriangleSet输出及Cube的QuadSet状态变量连接到Merge的输入。
//创建Merge模型
auto MergeModel = scn->addNode(std::make_shared<Merge<DataType3f>>());
Cube->stateQuadSet()->promoteOuput()->connect(MergeModel->inTriangleSet01());
Turn->stateTriangleSet()->promoteOuput()->connect(MergeModel->inTriangleSet02());
//创建Copy模型
auto Copy = scn->addNode(std::make_shared<CopyModel<DataType3f>>());
MergeModel->stateTriangleSet()->promoteOuput()->connect(Copy->inTriangleSetIn());
//修改Copy属性
Copy->varTotalNumber()->setValue(4);
Copy->varCopyTransform()->setValue(Vec3f(1,0,0));