// ******************************************************* // display(): called once per frame, whenever OpenGL decides it's time to redraw. virtual void display( float animation_delta_time, Vector2d &window_steering ) { if( animate ) animation_time += animation_delta_time; update_camera( animation_delta_time , window_steering ); int basis_id = 0; float atime = animation_time * 10; Matrix4d model_transform = Matrix4d::Identity(); Matrix4d std_model = model_transform; *m_tree = Tree(Matrix4d::Identity(), atime); // Start coding here!!!! m_bee->timepassby(atime); // Plane model_transform = std_model * Affine3d(Translation3d(5, -5, -60)).matrix(); // Position glUniform4fv(g_addrs->color_loc, 1, Vector4f(.0f, .7f, .9f, 1).data()); // Color m_plane->draw ( projection_transform, camera_transform, model_transform, "" ); // Tree model_transform = std_model * Affine3d(Translation3d(4, -5, -40)).matrix(); // Position glUniform4fv( g_addrs->color_loc, 1, Vector4f( .0f, .6f ,.2f ,1 ).data()); // Color m_tree->draw( basis_id++, projection_transform, camera_transform, model_transform, ""); // Leg model_transform = std_model * Affine3d(Translation3d(4, 1+2*(abs(20.0 - ((int)atime % 41)))/10, -40)).matrix(); // Position model_transform *= Affine3d(AngleAxisd((-PI / 60 * atime), Vector3d(0, 1, 0))).matrix(); model_transform *= Affine3d(Translation3d(20, 0, 0)).matrix(); m_bee->draw(basis_id++, projection_transform, camera_transform, model_transform, ""); }
cv::Affine3d cv::viz::Widget3D::getPose() const { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); CV_Assert("Widget is not 3D." && actor); if (!actor->GetUserMatrix()) { return Affine3d(); // empty user matrix, return an identity transform. } return Affine3d(*actor->GetUserMatrix()->Element); }
void test_qtvector() { // some non vectorizable fixed sizes CALL_SUBTEST(check_qtvector_matrix(Vector2f())); CALL_SUBTEST(check_qtvector_matrix(Matrix3f())); CALL_SUBTEST(check_qtvector_matrix(Matrix3d())); // some vectorizable fixed sizes CALL_SUBTEST(check_qtvector_matrix(Matrix2f())); CALL_SUBTEST(check_qtvector_matrix(Vector4f())); CALL_SUBTEST(check_qtvector_matrix(Matrix4f())); CALL_SUBTEST(check_qtvector_matrix(Matrix4d())); // some dynamic sizes CALL_SUBTEST(check_qtvector_matrix(MatrixXd(1,1))); CALL_SUBTEST(check_qtvector_matrix(VectorXd(20))); CALL_SUBTEST(check_qtvector_matrix(RowVectorXf(20))); CALL_SUBTEST(check_qtvector_matrix(MatrixXcf(10,10))); // some Transform CALL_SUBTEST(check_qtvector_transform(Affine2f())); CALL_SUBTEST(check_qtvector_transform(Affine3f())); CALL_SUBTEST(check_qtvector_transform(Affine3d())); //CALL_SUBTEST(check_qtvector_transform(Transform4d())); // some Quaternion CALL_SUBTEST(check_qtvector_quaternion(Quaternionf())); CALL_SUBTEST(check_qtvector_quaternion(Quaternionf())); }
void test_stdvector_overload() { // some non vectorizable fixed sizes CALL_SUBTEST_1(check_stdvector_matrix(Vector2f())); CALL_SUBTEST_1(check_stdvector_matrix(Matrix3f())); CALL_SUBTEST_2(check_stdvector_matrix(Matrix3d())); // some vectorizable fixed sizes CALL_SUBTEST_1(check_stdvector_matrix(Matrix2f())); CALL_SUBTEST_1(check_stdvector_matrix(Vector4f())); CALL_SUBTEST_1(check_stdvector_matrix(Matrix4f())); CALL_SUBTEST_2(check_stdvector_matrix(Matrix4d())); // some dynamic sizes CALL_SUBTEST_3(check_stdvector_matrix(MatrixXd(1,1))); CALL_SUBTEST_3(check_stdvector_matrix(VectorXd(20))); CALL_SUBTEST_3(check_stdvector_matrix(RowVectorXf(20))); CALL_SUBTEST_3(check_stdvector_matrix(MatrixXcf(10,10))); // some Transform CALL_SUBTEST_4(check_stdvector_transform(Affine2f())); // does not need the specialization (2+1)^2 = 9 CALL_SUBTEST_4(check_stdvector_transform(Affine3f())); CALL_SUBTEST_4(check_stdvector_transform(Affine3d())); // some Quaternion CALL_SUBTEST_5(check_stdvector_quaternion(Quaternionf())); CALL_SUBTEST_5(check_stdvector_quaternion(Quaterniond())); }
void test_stddeque() { // some non vectorizable fixed sizes CALL_SUBTEST_1(check_stddeque_matrix(Vector2f())); CALL_SUBTEST_1(check_stddeque_matrix(Matrix3f())); CALL_SUBTEST_2(check_stddeque_matrix(Matrix3d())); // some vectorizable fixed sizes CALL_SUBTEST_1(check_stddeque_matrix(Matrix2f())); CALL_SUBTEST_1(check_stddeque_matrix(Vector4f())); CALL_SUBTEST_1(check_stddeque_matrix(Matrix4f())); CALL_SUBTEST_2(check_stddeque_matrix(Matrix4d())); // some dynamic sizes CALL_SUBTEST_3(check_stddeque_matrix(MatrixXd(1,1))); CALL_SUBTEST_3(check_stddeque_matrix(VectorXd(20))); CALL_SUBTEST_3(check_stddeque_matrix(RowVectorXf(20))); CALL_SUBTEST_3(check_stddeque_matrix(MatrixXcf(10,10))); // some Transform CALL_SUBTEST_4(check_stddeque_transform(Affine2f())); CALL_SUBTEST_4(check_stddeque_transform(Affine3f())); CALL_SUBTEST_4(check_stddeque_transform(Affine3d())); // some Quaternion CALL_SUBTEST_5(check_stddeque_quaternion(Quaternionf())); CALL_SUBTEST_5(check_stddeque_quaternion(Quaterniond())); }
cv::Affine3d cv::viz::makeTransformToGlobal(const Vec3d& axis_x, const Vec3d& axis_y, const Vec3d& axis_z, const Vec3d& origin) { Affine3d::Mat3 R(axis_x[0], axis_y[0], axis_z[0], axis_x[1], axis_y[1], axis_z[1], axis_x[2], axis_y[2], axis_z[2]); return Affine3d(R, origin); }
void update_camera( float animation_delta_time, Vector2d &window_steering ) { const unsigned leeway = 70, border = 50; float degrees_per_frame = .02f * animation_delta_time; float meters_per_frame = 10.f * animation_delta_time; cout << animation_time << endl; // Determine camera rotation movement first Vector2f movement_plus ( window_steering[0] + leeway, window_steering[1] + leeway ); // movement[] is mouse position relative to canvas center; leeway is a tolerance from the center. Vector2f movement_minus ( window_steering[0] - leeway, window_steering[1] - leeway ); bool outside_border = false; for( int i = 0; i < 2; i++ ) if ( abs( window_steering[i] ) > g.get_window_size()[i]/2 - border ) outside_border = true; // Stop steering if we're on the outer edge of the canvas. for( int i = 0; looking && outside_border == false && i < 2; i++ ) // Steer according to "movement" vector, but don't start increasing until outside a leeway window from the center. { float angular_velocity = ( ( movement_minus[i] > 0) * movement_minus[i] + ( movement_plus[i] < 0 ) * movement_plus[i] ) * degrees_per_frame; // Use movement's quantity conditionally camera_transform = Affine3d( AngleAxisd( angular_velocity, Vector3d( i, 1-i, 0 ) ) ) * camera_transform; // On X step, rotate around Y axis, and vice versa. } camera_transform = Affine3d(Translation3d( meters_per_frame * thrust )) * camera_transform; // Now translation movement of camera, applied in local camera coordinate frame }
void cv::viz::Widget3D::updatePose(const Affine3d &pose) { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); CV_Assert("Widget is not 3D." && actor); vtkSmartPointer<vtkMatrix4x4> matrix = actor->GetUserMatrix(); if (!matrix) { setPose(pose); return; } Affine3d updated_pose = pose * Affine3d(*matrix->Element); matrix = vtkmatrix(updated_pose.matrix); actor->SetUserMatrix(matrix); actor->Modified(); }
void roll_right() { camera_transform *= Affine3d( AngleAxisd( 3 * PI /180, Vector3d( 0, 0, -1 ) ) ).matrix(); }