void SceneGenerator::generateRandomPoses(int frameCount, std::vector<Eigen::Matrix3fr> &posesR, std::vector<Eigen::Vector3f> &posesCenter) { posesR.push_back(Eigen::Matrix3fr::Identity()); posesCenter.push_back(Eigen::Vector3f(0, 0, -1)); std::uniform_real_distribution<float> uniformTarget(-0.5f, +0.5f); std::uniform_real_distribution<float> uniformCenterXY(-0.8f, +0.8f); std::uniform_real_distribution<float> uniformCenterZ(-1.0f, -0.5f); std::uniform_real_distribution<float> uniformAngle(0.0f, 2*M_PI); for (int i = 0; i < frameCount; i++) { //Choose a point to look at Eigen::Vector3f lookTarget(uniformTarget(mRandomDevice), uniformTarget(mRandomDevice), 0); //Point to define up vector Eigen::Vector3f upTarget(uniformTarget(mRandomDevice), uniformTarget(mRandomDevice), 0); //Choose camera center Eigen::Vector3f center(uniformCenterXY(mRandomDevice), uniformCenterXY(mRandomDevice), uniformCenterZ(mRandomDevice)); //Build rotation Eigen::Matrix3fr R; Eigen::Vector3f a, b, c; c = (lookTarget - center).normalized(); eutils::GetBasis(c, a, b); Eigen::AngleAxisf aa(uniformAngle(mRandomDevice), c); a = (aa*a).normalized(); b = (aa*b).normalized(); R.col(0) = a; R.col(1) = b; R.col(2) = c; //R.col(1) = (lookTarget - R.col(2).dot(lookTarget)*R.col(2)).normalized(); assert(abs(R.col(2).dot(R.col(1))) < 1e-6); assert(abs(R.col(2).dot(R.col(0))) < 1e-6); assert(abs(R.col(1).dot(R.col(0))) < 1e-6); //R.col(0) = R.col(1).cross(R.col(2)); posesR.push_back(R.transpose()); posesCenter.push_back(center); } }
int main(int argc, char* argv[]) { AttSharedData _data; AttBehavior _behavior(&_data); AttBHand hand; AttBTarget target; AttBEgoMap egoMap; AttBHandPrediction prediction; AttBSimpleInput lookHand(YBVAttentionLookHand); AttBSimpleInput lookTarget(YBVAttentionLookTarget); AttBSimpleInput lookHPrediction(YBVAttentionLookPrediction); AttBSimpleInput lookEgoMap(YBVAttentionLookEgoMap); _behavior.setInitialState(&target); _behavior.add(&lookHand, &target, &hand); _behavior.add(&lookHPrediction, &target, &prediction); _behavior.add(&lookEgoMap, &target, &egoMap); _behavior.add(NULL, &target, &target); _behavior.add(&lookTarget, &hand, &target); _behavior.add(&lookHPrediction, &hand, &prediction); _behavior.add(&lookEgoMap, &hand, &egoMap); _behavior.add(NULL, &hand, &hand); _behavior.add(&lookHand, &prediction, &hand); _behavior.add(&lookTarget, &prediction, &target); _behavior.add(&lookEgoMap, &prediction, &egoMap); _behavior.add(NULL, &prediction, &prediction); _behavior.add(&lookHand, &egoMap, &hand); _behavior.add(&lookTarget, &egoMap, &target); _behavior.add(&lookHPrediction, &egoMap, &prediction); _behavior.add(NULL, &egoMap, &egoMap); // start behavior _behavior.Begin(); _behavior.loop(); return 0; }