本文整理汇总了C++中Patch::InvertMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ Patch::InvertMatrix方法的具体用法?C++ Patch::InvertMatrix怎么用?C++ Patch::InvertMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Patch
的用法示例。
在下文中一共展示了Patch::InvertMatrix方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: thicken
void thicken(const PatchNodePtr& sourcePatch, float thickness, bool createSeams, int axis)
{
// Get a shortcut to the patchcreator
PatchCreator& patchCreator = GlobalPatchCreator(DEF2);
// Create a new patch node
scene::INodePtr node(patchCreator.createPatch());
scene::INodePtr parent = sourcePatch->getParent();
assert(parent != NULL);
// Insert the node into the same parent as the existing patch
parent->addChildNode(node);
// Retrieve the contained patch from the node
Patch* targetPatch = Node_getPatch(node);
// Create the opposite patch with the given thickness = distance
targetPatch->createThickenedOpposite(sourcePatch->getPatchInternal(), thickness, axis);
// Select the newly created patch
Node_setSelected(node, true);
if (createSeams && thickness > 0.0f)
{
// Allocate four new patches
scene::INodePtr nodes[4] = {
patchCreator.createPatch(),
patchCreator.createPatch(),
patchCreator.createPatch(),
patchCreator.createPatch()
};
// Now create the four walls
for (int i = 0; i < 4; i++)
{
// Insert each node into the same parent as the existing patch
// It's vital to do this first, otherwise these patches won't have valid shaders
parent->addChildNode(nodes[i]);
// Retrieve the contained patch from the node
Patch* wallPatch = Node_getPatch(nodes[i]);
// Create the wall patch by passing i as wallIndex
wallPatch->createThickenedWall(sourcePatch->getPatchInternal(), *targetPatch, i);
if (!wallPatch->isDegenerate())
{
// Now select the newly created patch
Node_setSelected(nodes[i], true);
}
else
{
rMessage() << "Thicken: Discarding degenerate patch." << std::endl;
// Remove again
parent->removeChildNode(nodes[i]);
}
}
}
// Invert the target patch so that it faces the opposite direction
targetPatch->InvertMatrix();
}