Exemple #1
0
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;
}