本文整理汇总了C++中ISceneNode::getRelativeTransformation方法的典型用法代码示例。如果您正苦于以下问题:C++ ISceneNode::getRelativeTransformation方法的具体用法?C++ ISceneNode::getRelativeTransformation怎么用?C++ ISceneNode::getRelativeTransformation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ISceneNode
的用法示例。
在下文中一共展示了ISceneNode::getRelativeTransformation方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char** argv)
{
clock_t current = clock();
IrrlichtDevice* device = createDevice(video::EDT_DIRECT3D9);
ParticleEditorReceiver* receiver = new ParticleEditorReceiver;
receiver->scriptPath = argc>1 ? argv[1] : "particle.lua";
receiver->smgr = device->getSceneManager();
receiver->factory = CParticleSystemScriptFactory::createDefault(
receiver->smgr->getParticleSystemFactory());
// receiver->factory->Initers["Texture"] = irrptr<IStackPusherFactory>(
// new CTextureIniterStackPusherFactory(*device->getRandomizer(), *device->getVideoDriver()), false);
receiver->L = luaL_newstate();
{
luaT::StackMemo m(receiver->L);
luaL_openlibs(receiver->L);
luaopen_AllParticleSystem(receiver->L);
xihad::render3d::luaopen_Material(receiver->L);
xihad::render3d::luaopen_SColor(receiver->L);
}
receiver->smgr->addSkyDomeSceneNode(device->getVideoDriver()->getTexture("../Xihad/Assets/gfx/skydome.jpg"));
ISceneNode* source = addNinja(receiver->smgr, core::vector3df(-10, 0, 0));
core::matrix4 rel = source->getRelativeTransformation();
rel.setRotationDegrees(core::vector3df(0, 90, 0));
source->setRelativeTransformation(rel);
ISceneNode* target = addNinja(receiver->smgr, core::vector3df(10, 0, 0));
rel = target->getRelativeTransformation();
rel.setRotationDegrees(core::vector3df(0, -90, 0));
target->setRelativeTransformation(rel);
ParticleEditorEnv* env = new ParticleEditorEnv(source, target, device, current);
receiver->env.reset(env);
env->drop();
receiver->createNewParticleSystem();
receiver->smgr->addCameraSceneNode(0, core::vector3df(-12,12,-12), core::vector3df(5,0, 0));
device->setEventReceiver(receiver);
while (device->run())
{
current = clock();
video::SColor bg = device->isWindowActive() ? video::SColor(0) : video::SColor(0xff101010);
device->getVideoDriver()->beginScene(true, true, bg);
device->getSceneManager()->onAnimate(current);
receiver->env->update(current);
device->getSceneManager()->drawAll();
device->getVideoDriver()->endScene();
}
delete receiver;
device->drop();
system("pause");
return 0;
}
示例2: Java_zte_irrlib_scene_SceneNode_nativeGetRelativeMatrix
int Java_zte_irrlib_scene_SceneNode_nativeGetRelativeMatrix(
JNIEnv* env, jobject thiz, jobject jmat, jint Id)
{
ISceneNode* node = smgr->getSceneNodeFromId(Id);
if (!node)
{
WARN_NODE_NOT_FOUND(Id, GetRelativeMatrix);
return -1;
}
utils->setMatrix4Frommatrix4(env, jmat, node->getRelativeTransformation());
return 0;
}
示例3: snap
void VesselSceneNode::snap(OrbiterDockingPort& ourPort, OrbiterDockingPort& theirPort)
{
ISceneNode* ourNode = ourPort.portNode;
ISceneNode* theirNode = theirPort.portNode;
theirNode->updateAbsolutePosition();
ourNode->updateAbsolutePosition();
//absolute rotation of the target port
core::matrix4 theirMatrix = theirNode->getAbsoluteTransformation();
//Origin up and facing (inversed) of the target port
core::vector3df theirDir = core::vector3df(0, 0, -1);
core::vector3df theirRot = core::vector3df(0, 1, 0);
//get absolute inversed facing and up direction of the target port
theirMatrix.rotateVect(theirDir);
theirMatrix.rotateVect(theirRot);
theirDir.normalize();
theirRot.normalize();
//build rotation matrix to rotate from the ORIGIN of the source port to their ports current alignement
core::matrix4 ourPortToTheirPort;
ourPortToTheirPort.buildCameraLookAtMatrixLH(core::vector3df(0, 0, 0), theirDir, theirRot).makeInverse();
//get inverted source port rotation relative to its vessel
core::matrix4 ourVesselToOurPort = ourNode->getRelativeTransformation();
ourVesselToOurPort.makeInverse();
//multiply the rotation from our vessel origin to our port and from our port origin to the target to get the total transformation for the vessel
core::matrix4 ourVesselToTheirPort = ourPortToTheirPort * ourVesselToOurPort;
//apply the whole brouhaha
setRotation(ourVesselToTheirPort.getRotationDegrees());
//we MUST update positions for getAbsolutePosition to reflect the rotation we just did.
//also, we MUST update the position of the parent before the child, or the child still won't reflect the changes
//we also MUST update the child seperately, it doesn't get updated by the parent
updateAbsolutePosition();
ourNode->updateAbsolutePosition();
//position the vessel so the docking ports touch
core::vector3df pos = ourNode->getAbsolutePosition() - getAbsolutePosition();
setPosition(theirNode->getAbsolutePosition() - pos);
//update the new position, in case there's a vessel being snapped to this right next
updateAbsolutePosition();
}