void TransformadorAtualizarPosicaoBracoDireito::transformar(irr::scene::IAnimatedMeshSceneNode * node, tipos::Esqueleto esqueleto) { IBoneSceneNode * ombro = node->getJointNode("UpArm_R"); IBoneSceneNode * cotovelo = node->getJointNode("UpArm_R"); float menorDistancia = 999; float anguloOmbro = 0; float anguloCotovelo = 0; //int anguloMinimo = -60; //int anguloMaximo = 60; int anguloMinimoOmbro = ombro->getRotation().Y - 20; int anguloMaximoOmbro = ombro->getRotation().Y + 20; int anguloMinimoCotovelo = cotovelo->getRotation().Y - 20; int anguloMaximoCotovelo = cotovelo->getRotation().Y + 20; for (int i = anguloMinimoOmbro ;i < anguloMaximoOmbro ;i++) { core::vector3df rotOmbro = ombro->getRotation(); rotOmbro.Y = i; ombro->setRotation(rotOmbro); for(int j =anguloMinimoCotovelo ; j< anguloMaximoCotovelo ;j++) { core::vector3df rotCot = cotovelo->getRotation(); rotCot.Y = j; cotovelo->setRotation(rotCot); IBoneSceneNode * mao = node->getJointNode("Hand_R"); node->updateAbsolutePosition(); for(int i=0;i<node->getJointCount();i++) { node->getJointNode(i)->updateAbsolutePosition(); } float distancia = CalculosUteis::distanciaEntrePontos( Vetor(mao->getAbsolutePosition().X,mao->getAbsolutePosition().Y,mao->getAbsolutePosition().Z), esqueletoRef.mao_direita); if(distancia<menorDistancia) { menorDistancia = distancia; anguloOmbro = i; anguloCotovelo = j; } } } printf("i: %f j: %f distancia : %f\n",anguloOmbro,anguloCotovelo,menorDistancia); core::vector3df rotOmbro = ombro->getRotation(); rotOmbro.Y = anguloOmbro; ombro->setRotation(rotOmbro); core::vector3df rotCot = cotovelo->getRotation(); rotCot.Y = anguloCotovelo; cotovelo->setRotation(rotCot); }
void MovimentadorBracoEsquerdo::mover(irr::scene::IAnimatedMeshSceneNode * node,tipos::Esqueleto esqueleto) { std::string ombro_esquerdo_bone = "UpArm_L"; std::string braco_esquerdo_bone = "LoArm_L"; std::string mao_esquerda_bone = "Index_L"; float anguloOmbroEsquerdo = getAnguloBraco(esqueleto.ombro_esquerdo,esqueleto.cotovelo_esquerdo); setarAnguloBone(node,ombro_esquerdo_bone,-anguloOmbroEsquerdo); float anguloMaoEsquerda = CalculosUteis::anguloEntrePontos(esqueleto.cotovelo_esquerdo,esqueleto.ombro_esquerdo,esqueleto.mao_esquerda); if(esqueleto.cotovelo_esquerdo.y < esqueleto.mao_esquerda.y) anguloMaoEsquerda = - anguloMaoEsquerda; if(!_isnan(anguloMaoEsquerda)) setarAnguloBone(node,braco_esquerdo_bone,anguloMaoEsquerda); IBoneSceneNode * mao = node->getJointNode(mao_esquerda_bone.c_str()); pos = Vetor( mao->getAbsolutePosition().X, mao->getAbsolutePosition().Y, mao->getAbsolutePosition().Z); //teste /* bool tem = false; for(int i=0;i<marcadores.size();i++) { if(marcadores[i]->pontoDentroMarcador(pos) && i!=indiceAnterior) { if(!cronometro.iniciado()) { cronometro.iniciarContagem(); } tem = true; indiceAtual = i; } } if(!tem) { cronometro.pararContagem(); } */ }