diff --git a/build_visual_studio.bat b/build_visual_studio.bat
index 56ee9f610..0da0089b1 100644
--- a/build_visual_studio.bat
+++ b/build_visual_studio.bat
@@ -14,6 +14,6 @@ rem cd vs2010
rem rename 0_Bullet3Solution.sln 0_client.sln
rem cd ..
rem rename vs2010 vs2010_client
-start vs2010/0_Bullet3Solution.sln
+rem start vs2010/0_Bullet3Solution.sln
pause
diff --git a/data/Quadrotor/quadrotor.urdf b/data/Quadrotor/quadrotor.urdf
new file mode 100644
index 000000000..7158dc40a
--- /dev/null
+++ b/data/Quadrotor/quadrotor.urdf
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/Quadrotor/quadrotor_base.obj b/data/Quadrotor/quadrotor_base.obj
new file mode 100644
index 000000000..dc5129f4b
--- /dev/null
+++ b/data/Quadrotor/quadrotor_base.obj
@@ -0,0 +1,1696 @@
+####
+#
+# OBJ File Generated by Meshlab
+#
+####
+# Object quadrotor_base.obj
+#
+# Vertices: 300
+# Faces: 1080
+#
+####
+vn 4.712352 -0.000018 -5.804880
+v 0.823618 0.673869 -1.366201
+vn -4.712348 0.000002 -5.804878
+v -0.823618 0.673869 -1.366201
+vn -4.712421 4.104710 -4.104690
+v -0.823618 0.685264 -1.361481
+vn 4.712396 4.104707 -4.104671
+v 0.823618 0.685264 -1.361481
+vn -4.712366 5.804888 0.000002
+v -0.823618 0.689984 -1.350086
+vn 4.712383 5.804898 0.000024
+v 0.823618 0.689984 -1.350086
+vn -4.712404 4.104681 4.104702
+v -0.823618 0.685264 -1.338691
+vn 4.712404 4.104684 4.104700
+v 0.823618 0.685264 -1.338691
+vn -4.712383 -0.000002 5.804899
+v -0.823618 0.673869 -1.333971
+vn 4.712387 0.000007 5.804901
+v 0.823618 0.673869 -1.333971
+vn -4.712386 -4.104694 4.104674
+v -0.823618 0.662474 -1.338691
+vn 4.712373 -4.104692 4.104666
+v 0.823618 0.662474 -1.338691
+vn -4.712401 -5.804910 -0.000002
+v -0.823618 0.657754 -1.350086
+vn 4.712401 -5.804910 -0.000024
+v 0.823618 0.657754 -1.350086
+vn -4.712403 -4.104718 -4.104666
+v -0.823618 0.662474 -1.361481
+vn 4.712417 -4.104721 -4.104674
+v 0.823618 0.662474 -1.361481
+vn 12.566370 0.000000 0.000000
+v 0.823618 0.673869 -1.350086
+vn -12.566372 0.000000 0.000000
+v -0.823618 0.673869 -1.350086
+vn 12.566370 0.000000 0.000000
+v 0.823617 -0.673869 -1.350086
+vn 4.712387 4.104727 -4.104664
+v 0.823617 -0.662474 -1.361481
+vn 4.712359 -0.000001 -5.804899
+v 0.823617 -0.673869 -1.366201
+vn -12.566370 0.000000 0.000000
+v -0.823618 -0.673869 -1.350086
+vn -4.712344 0.000012 -5.804890
+v -0.823618 -0.673869 -1.366201
+vn -4.712438 4.104721 -4.104712
+v -0.823618 -0.662474 -1.361481
+vn 4.712419 5.804935 0.000004
+v 0.823617 -0.657754 -1.350086
+vn -4.712384 5.804914 -0.000056
+v -0.823618 -0.657754 -1.350086
+vn 4.712369 4.104695 4.104680
+v 0.823617 -0.662474 -1.338691
+vn -4.712369 4.104702 4.104674
+v -0.823618 -0.662474 -1.338691
+vn 4.712395 -0.000010 5.804920
+v 0.823617 -0.673869 -1.333971
+vn -4.712395 -0.000001 5.804920
+v -0.823618 -0.673869 -1.333971
+vn 4.712382 -4.104702 4.104685
+v 0.823617 -0.685264 -1.338691
+vn -4.712382 -4.104696 4.104691
+v -0.823618 -0.685264 -1.338691
+vn 4.712401 -5.804924 -0.000004
+v 0.823617 -0.689984 -1.350086
+vn -4.712401 -5.804924 0.000004
+v -0.823618 -0.689984 -1.350086
+vn 4.712399 -4.104721 -4.104680
+v 0.823617 -0.685264 -1.361481
+vn -4.712399 -4.104727 -4.104674
+v -0.823618 -0.685264 -1.361481
+vn -5.235984 6.069087 0.000004
+v 0.561441 0.081383 0.000000
+vn -5.235989 5.255984 -3.034544
+v 0.561441 0.070480 -0.040692
+vn -5.235989 3.034546 -5.255983
+v 0.561441 0.040692 -0.070480
+vn -5.235986 0.000001 -6.069088
+v 0.561441 0.000000 -0.081383
+vn -5.235989 -3.034547 -5.255976
+v 0.561441 -0.040692 -0.070480
+vn -5.235989 -5.256006 -3.034549
+v 0.561441 -0.070480 -0.040692
+vn -5.235986 -6.069103 0.000002
+v 0.561441 -0.081383 0.000000
+vn -5.235991 -5.256007 3.034550
+v 0.561441 -0.070480 0.040692
+vn -5.235989 -3.034554 5.255973
+v 0.561441 -0.040692 0.070480
+vn -5.235984 -0.000003 6.069086
+v 0.561441 0.000000 0.081383
+vn -5.235991 3.034543 5.255986
+v 0.561441 0.040692 0.070480
+vn -5.235989 5.255980 3.034551
+v 0.561441 0.070480 0.040692
+vn 5.235987 6.069087 0.000004
+v 2.084521 0.081383 0.000000
+vn 5.235984 5.255982 -3.034545
+v 2.084521 0.070480 -0.040692
+vn 5.235995 3.034549 -5.255984
+v 2.084521 0.040692 -0.070480
+vn 5.235981 0.000005 -6.069085
+v 2.084521 0.000000 -0.081383
+vn 5.235990 -3.034547 -5.255983
+v 2.084521 -0.040692 -0.070480
+vn 5.235993 -5.255982 -3.034551
+v 2.084521 -0.070480 -0.040692
+vn 5.235984 -6.069095 -0.000011
+v 2.084521 -0.081383 0.000000
+vn 5.235989 -5.255995 3.034542
+v 2.084521 -0.070480 0.040692
+vn 5.235988 -3.034554 5.255987
+v 2.084521 -0.040692 0.070480
+vn 5.235987 -0.000004 6.069088
+v 2.084521 0.000000 0.081383
+vn 5.235989 3.034540 5.255986
+v 2.084521 0.040692 0.070480
+vn 5.235988 5.255981 3.034548
+v 2.084521 0.070480 0.040692
+vn -12.566370 -0.000008 -0.000000
+v 0.561441 0.000000 0.000000
+vn 12.566370 0.000000 0.000000
+v 2.084521 0.000000 0.000000
+vn 0.355499 4.972161 -2.775034
+v 0.673869 0.689984 -1.332763
+vn 3.292306 3.292306 -2.318008
+v 0.685264 0.685264 -1.332763
+vn 4.972162 0.355500 -2.775033
+v 0.689984 0.673869 -1.332763
+vn 4.490691 -3.564183 -4.375483
+v 0.685264 0.662474 -1.332763
+vn 0.542895 -5.966685 -6.684689
+v 0.673869 0.657754 -1.332763
+vn -4.122719 -4.122719 -7.710718
+v 0.662474 0.662474 -1.332763
+vn -5.966685 0.542895 -6.684690
+v 0.657754 0.673869 -1.332763
+vn -3.564185 4.490689 -4.375484
+v 0.662474 0.685264 -1.332763
+vn -0.542897 5.966677 6.684656
+v 0.299497 0.315612 -0.303241
+vn 4.122744 4.122751 7.710777
+v 0.310892 0.310892 -0.303241
+vn 5.966676 -0.542893 6.684656
+v 0.315612 0.299497 -0.303241
+vn 3.564179 -4.490701 4.375489
+v 0.310892 0.288102 -0.303241
+vn -0.355480 -4.972164 2.775051
+v 0.299497 0.283382 -0.303241
+vn -3.292296 -3.292280 2.317987
+v 0.288102 0.288102 -0.303241
+vn -4.972173 -0.355465 2.775058
+v 0.283382 0.299497 -0.303241
+vn -4.490700 3.564181 4.375489
+v 0.288102 0.310892 -0.303241
+vn 0.000000 0.000000 -12.566372
+v 0.673869 0.673869 -1.332763
+vn 0.000000 0.000000 12.566369
+v 0.299497 0.299497 -0.303241
+vn 5.966708 0.542897 6.684694
+v 0.315612 -0.299497 -0.303241
+vn 4.972180 -0.355517 -2.775037
+v 0.689984 -0.673869 -1.332763
+vn 4.490703 3.564161 -4.375446
+v 0.685264 -0.662474 -1.332763
+vn 3.564178 4.490701 4.375466
+v 0.310892 -0.288102 -0.303241
+vn 0.542888 5.966686 -6.684695
+v 0.673869 -0.657754 -1.332763
+vn -0.355491 4.972161 2.775047
+v 0.299497 -0.283382 -0.303241
+vn -4.122740 4.122723 -7.710721
+v 0.662474 -0.662474 -1.332763
+vn -3.292300 3.292297 2.318002
+v 0.288102 -0.288102 -0.303241
+vn -5.966705 -0.542928 -6.684684
+v 0.657754 -0.673869 -1.332763
+vn -4.972191 0.355500 2.775033
+v 0.283382 -0.299497 -0.303241
+vn -3.564183 -4.490709 -4.375484
+v 0.662474 -0.685264 -1.332763
+vn -4.490696 -3.564181 4.375465
+v 0.288102 -0.310892 -0.303241
+vn 0.355491 -4.972157 -2.775042
+v 0.673869 -0.689984 -1.332763
+vn -0.542871 -5.966687 6.684691
+v 0.299497 -0.315612 -0.303241
+vn 3.292302 -3.292305 -2.318004
+v 0.685264 -0.685264 -1.332763
+vn 4.122734 -4.122715 7.710742
+v 0.310892 -0.310892 -0.303241
+vn 0.000000 0.000000 12.566369
+v 0.299497 -0.299497 -0.303241
+vn 0.000000 0.000000 -12.566370
+v 0.673869 -0.673869 -1.332763
+vn 0.000000 0.000000 -12.566370
+v -0.673869 -0.673869 -1.332763
+vn -3.292290 -3.292300 -2.317995
+v -0.685264 -0.685264 -1.332763
+vn -0.355509 -4.972198 -2.775056
+v -0.673869 -0.689984 -1.332763
+vn 0.000000 0.000000 12.566370
+v -0.299497 -0.299497 -0.303241
+vn 0.542906 -5.966710 6.684697
+v -0.299497 -0.315612 -0.303241
+vn -4.122705 -4.122732 7.710721
+v -0.310892 -0.310892 -0.303241
+vn -4.972171 -0.355494 -2.775043
+v -0.689984 -0.673869 -1.332763
+vn -5.966691 0.542908 6.684670
+v -0.315612 -0.299497 -0.303241
+vn -4.490705 3.564189 -4.375466
+v -0.685264 -0.662474 -1.332763
+vn -3.564171 4.490714 4.375473
+v -0.310892 -0.288102 -0.303241
+vn -0.542894 5.966691 -6.684712
+v -0.673869 -0.657754 -1.332763
+vn 0.355498 4.972172 2.775045
+v -0.299497 -0.283382 -0.303241
+vn 4.122747 4.122738 -7.710707
+v -0.662474 -0.662474 -1.332763
+vn 3.292301 3.292283 2.317991
+v -0.288102 -0.288102 -0.303241
+vn 5.966716 -0.542900 -6.684727
+v -0.657754 -0.673869 -1.332763
+vn 4.972217 0.355505 2.775045
+v -0.283382 -0.299497 -0.303241
+vn 3.564143 -4.490687 -4.375431
+v -0.662474 -0.685264 -1.332763
+vn 4.490695 -3.564148 4.375445
+v -0.288102 -0.310892 -0.303241
+vn -5.966710 -0.542906 6.684696
+v -0.315612 0.299497 -0.303241
+vn -4.972151 0.355530 -2.775038
+v -0.689984 0.673869 -1.332763
+vn -4.490701 -3.564152 -4.375435
+v -0.685264 0.662474 -1.332763
+vn -3.564142 -4.490708 4.375428
+v -0.310892 0.288102 -0.303241
+vn -0.542903 -5.966713 -6.684718
+v -0.673869 0.657754 -1.332763
+vn 0.355513 -4.972204 2.775044
+v -0.299497 0.283382 -0.303241
+vn 4.122728 -4.122761 -7.710725
+v -0.662474 0.662474 -1.332763
+vn 3.292291 -3.292302 2.317997
+v -0.288102 0.288102 -0.303241
+vn 5.966693 0.542908 -6.684679
+v -0.657754 0.673869 -1.332763
+vn 4.972177 -0.355509 2.775049
+v -0.283382 0.299497 -0.303241
+vn 3.564167 4.490698 -4.375471
+v -0.662474 0.685264 -1.332763
+vn 4.490724 3.564162 4.375457
+v -0.288102 0.310892 -0.303241
+vn -0.355461 4.972190 -2.775077
+v -0.673868 0.689984 -1.332763
+vn 0.542909 5.966693 6.684693
+v -0.299497 0.315612 -0.303241
+vn -3.292262 3.292327 -2.317995
+v -0.685264 0.685264 -1.332763
+vn -4.122717 4.122703 7.710712
+v -0.310892 0.310892 -0.303241
+vn 0.000000 0.000000 12.566369
+v -0.299497 0.299497 -0.303241
+vn 0.000000 0.000000 -12.566371
+v -0.673869 0.673869 -1.332763
+vn -0.000000 0.000003 -12.550662
+v 1.969194 0.000000 0.187186
+vn 0.382901 -0.158603 -0.001035
+v 2.886225 -0.379846 0.221851
+vn 0.293061 -0.293061 -0.001034
+v 2.671059 -0.701864 0.221851
+vn -0.000000 -0.000002 12.545240
+v 1.969194 0.000000 0.262060
+vn 0.158603 -0.382902 -0.001034
+v 2.349041 -0.917030 0.221851
+vn 0.000000 -0.414450 -0.001035
+v 1.969195 -0.992586 0.221851
+vn -0.158603 -0.382902 -0.001034
+v 1.589348 -0.917030 0.221851
+vn -0.293061 -0.293061 -0.001034
+v 1.267330 -0.701865 0.221851
+vn -0.382902 -0.158603 -0.001034
+v 1.052164 -0.379847 0.221851
+vn -0.414451 -0.000000 -0.001035
+v 0.976608 -0.000000 0.221851
+vn -0.382902 0.158603 -0.001035
+v 1.052164 0.379846 0.221852
+vn -0.293061 0.293061 -0.001035
+v 1.267330 0.701864 0.221852
+vn -0.158603 0.382902 -0.001035
+v 1.589348 0.917030 0.221852
+vn -0.000000 0.414450 -0.001034
+v 1.969194 0.992586 0.221852
+vn 0.158603 0.382902 -0.001035
+v 2.349040 0.917030 0.221852
+vn 0.293061 0.293061 -0.001034
+v 2.671058 0.701864 0.221852
+vn 0.382902 0.158603 -0.001034
+v 2.886224 0.379846 0.221852
+vn 0.414451 0.000001 -0.001035
+v 2.961780 0.000000 0.221851
+vn -0.000008 12.566368 -0.000000
+v 0.000000 -0.561441 0.000000
+vn 6.069087 5.235987 -0.000000
+v 0.081383 -0.561441 0.000000
+vn 5.255986 5.235990 -3.034542
+v 0.070480 -0.561441 -0.040692
+vn 0.000000 -12.566371 0.000000
+v -0.000000 -2.084521 0.000000
+vn 5.255986 -5.235988 -3.034540
+v 0.070480 -2.084521 -0.040692
+vn 6.069087 -5.235988 0.000004
+v 0.081383 -2.084521 0.000000
+vn 3.034549 5.235987 -5.255981
+v 0.040692 -0.561441 -0.070480
+vn 3.034550 -5.235990 -5.255981
+v 0.040691 -2.084521 -0.070480
+vn 0.000003 5.235986 -6.069087
+v 0.000000 -0.561441 -0.081383
+vn 0.000004 -5.235984 -6.069086
+v -0.000000 -2.084521 -0.081383
+vn -3.034544 5.235990 -5.255979
+v -0.040692 -0.561441 -0.070480
+vn -3.034543 -5.235991 -5.255985
+v -0.040692 -2.084521 -0.070480
+vn -5.256004 5.235986 -3.034550
+v -0.070480 -0.561441 -0.040692
+vn -5.255981 -5.235989 -3.034549
+v -0.070480 -2.084521 -0.040692
+vn -6.069103 5.235987 0.000003
+v -0.081383 -0.561441 0.000000
+vn -6.069096 -5.235986 -0.000007
+v -0.081384 -2.084521 0.000000
+vn -5.256007 5.235991 3.034549
+v -0.070480 -0.561441 0.040692
+vn -5.255994 -5.235988 3.034542
+v -0.070480 -2.084521 0.040692
+vn -3.034551 5.235987 5.255974
+v -0.040692 -0.561441 0.070480
+vn -3.034557 -5.235989 5.255986
+v -0.040692 -2.084521 0.070480
+vn -0.000000 5.235986 6.069087
+v -0.000000 -0.561441 0.081383
+vn -0.000008 -5.235987 6.069087
+v -0.000000 -2.084521 0.081383
+vn 3.034541 5.235992 5.255988
+v 0.040691 -0.561441 0.070480
+vn 3.034538 -5.235988 5.255987
+v 0.040691 -2.084521 0.070480
+vn 5.255979 5.235983 3.034549
+v 0.070480 -0.561441 0.040692
+vn 5.255981 -5.235987 3.034548
+v 0.070480 -2.084521 0.040692
+vn 0.158603 -0.382902 -0.001035
+v 0.379846 -2.886224 0.221852
+vn 0.000003 0.000000 -12.550662
+v -0.000000 -1.969194 0.187186
+vn 0.000001 -0.414451 -0.001034
+v 0.000000 -2.961780 0.221851
+vn -0.000003 0.000000 12.545240
+v -0.000000 -1.969194 0.262060
+vn 0.293061 -0.293061 -0.001035
+v 0.701864 -2.671058 0.221852
+vn 0.382902 -0.158603 -0.001034
+v 0.917030 -2.349040 0.221852
+vn 0.414450 0.000000 -0.001035
+v 0.992586 -1.969194 0.221852
+vn 0.382902 0.158603 -0.001034
+v 0.917030 -1.589348 0.221852
+vn 0.293061 0.293061 -0.001034
+v 0.701864 -1.267330 0.221852
+vn 0.158603 0.382902 -0.001035
+v 0.379846 -1.052164 0.221852
+vn -0.000000 0.414451 -0.001035
+v -0.000000 -0.976608 0.221851
+vn -0.158603 0.382902 -0.001035
+v -0.379847 -1.052164 0.221851
+vn -0.293061 0.293061 -0.001035
+v -0.701865 -1.267330 0.221851
+vn -0.382902 0.158603 -0.001034
+v -0.917030 -1.589348 0.221851
+vn -0.414450 0.000000 -0.001035
+v -0.992586 -1.969194 0.221851
+vn -0.382902 -0.158603 -0.001034
+v -0.917031 -2.349040 0.221851
+vn -0.293061 -0.293060 -0.001035
+v -0.701865 -2.671059 0.221851
+vn -0.158603 -0.382901 -0.001035
+v -0.379847 -2.886225 0.221851
+vn -0.414451 -0.000000 -0.001035
+v -2.961780 0.000000 0.221851
+vn -0.382901 0.158603 -0.001034
+v -2.886225 0.379847 0.221851
+vn 0.000000 -0.000003 -12.550660
+v -1.969194 0.000001 0.187186
+vn 0.000000 0.000003 12.545241
+v -1.969194 0.000001 0.262060
+vn -0.293060 0.293061 -0.001034
+v -2.671059 0.701865 0.221851
+vn -0.158603 0.382902 -0.001035
+v -2.349040 0.917031 0.221851
+vn 0.000000 0.414450 -0.001035
+v -1.969194 0.992587 0.221851
+vn 0.158603 0.382902 -0.001035
+v -1.589348 0.917031 0.221851
+vn 0.293061 0.293061 -0.001034
+v -1.267330 0.701865 0.221851
+vn 0.382902 0.158603 -0.001034
+v -1.052164 0.379847 0.221851
+vn 0.414451 0.000000 -0.001035
+v -0.976608 0.000000 0.221851
+vn 0.382902 -0.158603 -0.001034
+v -1.052164 -0.379846 0.221852
+vn 0.293061 -0.293061 -0.001034
+v -1.267330 -0.701864 0.221852
+vn 0.158603 -0.382902 -0.001034
+v -1.589348 -0.917029 0.221852
+vn 0.000000 -0.414450 -0.001034
+v -1.969194 -0.992585 0.221852
+vn -0.158603 -0.382902 -0.001034
+v -2.349041 -0.917029 0.221852
+vn -0.293061 -0.293061 -0.001034
+v -2.671058 -0.701864 0.221852
+vn -0.382902 -0.158603 -0.001035
+v -2.886224 -0.379846 0.221852
+vn 5.235981 -5.255978 3.034548
+v -0.561441 -0.070480 0.040692
+vn 5.235986 -6.069087 -0.000000
+v -0.561441 -0.081383 0.000000
+vn -5.235989 -6.069088 0.000004
+v -2.084521 -0.081383 0.000000
+vn -5.235990 -5.255980 3.034549
+v -2.084521 -0.070479 0.040692
+vn 5.235992 -3.034540 5.255989
+v -0.561441 -0.040691 0.070480
+vn -5.235989 -3.034539 5.255987
+v -2.084521 -0.040691 0.070480
+vn 5.235986 0.000001 6.069087
+v -0.561441 0.000000 0.081383
+vn -5.235987 0.000008 6.069087
+v -2.084521 0.000001 0.081383
+vn 5.235988 3.034551 5.255973
+v -0.561441 0.040692 0.070480
+vn -5.235989 3.034557 5.255987
+v -2.084521 0.040692 0.070480
+vn 5.235992 5.256007 3.034549
+v -0.561441 0.070480 0.040692
+vn -5.235987 5.255994 3.034543
+v -2.084521 0.070481 0.040692
+vn 5.235989 6.069104 0.000003
+v -0.561441 0.081383 0.000000
+vn -5.235985 6.069095 -0.000007
+v -2.084521 0.081384 0.000000
+vn 5.235990 5.256006 -3.034548
+v -0.561441 0.070480 -0.040692
+vn -5.235988 5.255981 -3.034549
+v -2.084521 0.070480 -0.040692
+vn 5.235989 3.034546 -5.255977
+v -0.561441 0.040692 -0.070480
+vn -5.235990 3.034543 -5.255985
+v -2.084521 0.040692 -0.070480
+vn 5.235987 -0.000001 -6.069087
+v -0.561441 0.000000 -0.081383
+vn -5.235984 -0.000004 -6.069086
+v -2.084521 0.000000 -0.081383
+vn 5.235985 -3.034547 -5.255981
+v -0.561441 -0.040691 -0.070480
+vn -5.235991 -3.034550 -5.255980
+v -2.084521 -0.040691 -0.070480
+vn 5.235989 -5.255986 -3.034541
+v -0.561441 -0.070480 -0.040692
+vn -5.235990 -5.255986 -3.034541
+v -2.084521 -0.070479 -0.040692
+vn -12.566370 0.000000 0.000000
+v -2.084521 0.000001 0.000000
+vn 12.566370 0.000008 -0.000000
+v -0.561441 0.000000 0.000000
+vn 0.000008 -12.566371 -0.000000
+v 0.000000 0.561441 0.000000
+vn -6.069087 -5.235986 -0.000000
+v -0.081383 0.561441 0.000000
+vn -5.255983 -5.235986 -3.034544
+v -0.070480 0.561441 -0.040692
+vn 0.000000 12.566370 0.000000
+v 0.000001 2.084521 0.000000
+vn -5.255984 5.235989 -3.034543
+v -0.070479 2.084521 -0.040692
+vn -6.069086 5.235986 0.000008
+v -0.081382 2.084521 0.000000
+vn -3.034545 -5.235988 -5.255983
+v -0.040691 0.561441 -0.070480
+vn -3.034548 5.235993 -5.255983
+v -0.040691 2.084521 -0.070480
+vn -0.000002 -5.235987 -6.069087
+v 0.000000 0.561441 -0.081383
+vn -0.000004 5.235984 -6.069086
+v 0.000001 2.084521 -0.081383
+vn 3.034546 -5.235990 -5.255977
+v 0.040692 0.561441 -0.070480
+vn 3.034543 5.235989 -5.255985
+v 0.040692 2.084521 -0.070480
+vn 5.256006 -5.235992 -3.034552
+v 0.070480 0.561441 -0.040692
+vn 5.255981 5.235987 -3.034550
+v 0.070481 2.084521 -0.040692
+vn 6.069102 -5.235987 -0.000002
+v 0.081384 0.561441 0.000000
+vn 6.069095 5.235984 -0.000008
+v 0.081384 2.084521 0.000000
+vn 5.256007 -5.235992 3.034549
+v 0.070480 0.561441 0.040692
+vn 5.255994 5.235986 3.034542
+v 0.070481 2.084521 0.040692
+vn 3.034550 -5.235988 5.255974
+v 0.040692 0.561441 0.070480
+vn 3.034556 5.235989 5.255987
+v 0.040693 2.084521 0.070480
+vn 0.000000 -5.235987 6.069087
+v 0.000000 0.561441 0.081383
+vn 0.000009 5.235988 6.069088
+v 0.000001 2.084521 0.081383
+vn -3.034540 -5.235992 5.255989
+v -0.040691 0.561441 0.070480
+vn -3.034540 5.235986 5.255985
+v -0.040691 2.084521 0.070480
+vn -5.255979 -5.235981 3.034548
+v -0.070480 0.561441 0.040692
+vn -5.255982 5.235995 3.034551
+v -0.070479 2.084521 0.040692
+vn -0.158603 0.382902 -0.001035
+v -0.379845 2.886224 0.221852
+vn -0.000003 -0.000000 -12.550661
+v 0.000001 1.969194 0.187186
+vn -0.000000 0.414451 -0.001034
+v 0.000001 2.961780 0.221851
+vn 0.000003 -0.000000 12.545241
+v 0.000001 1.969194 0.262060
+vn -0.293061 0.293061 -0.001034
+v -0.701863 2.671058 0.221852
+vn -0.382902 0.158603 -0.001034
+v -0.917029 2.349041 0.221852
+vn -0.414450 0.000000 -0.001035
+v -0.992585 1.969195 0.221852
+vn -0.382902 -0.158603 -0.001034
+v -0.917029 1.589348 0.221852
+vn -0.293061 -0.293061 -0.001035
+v -0.701864 1.267330 0.221852
+vn -0.158603 -0.382902 -0.001035
+v -0.379846 1.052164 0.221852
+vn -0.000000 -0.414451 -0.001034
+v 0.000001 0.976608 0.221851
+vn 0.158603 -0.382902 -0.001035
+v 0.379847 1.052164 0.221851
+vn 0.293061 -0.293061 -0.001034
+v 0.701865 1.267330 0.221851
+vn 0.382902 -0.158603 -0.001035
+v 0.917031 1.589348 0.221851
+vn 0.414450 -0.000000 -0.001035
+v 0.992587 1.969194 0.221851
+vn 0.382902 0.158603 -0.001035
+v 0.917031 2.349040 0.221851
+vn 0.293061 0.293060 -0.001034
+v 0.701866 2.671059 0.221851
+vn 0.158603 0.382901 -0.001034
+v 0.379847 2.886225 0.221851
+vn 2.221441 5.363034 -4.712390
+v 0.336934 0.561557 -0.299497
+vn 2.221442 -5.363034 -4.712392
+v 0.336934 -0.561557 -0.299497
+vn -2.221441 -5.363034 -4.712388
+v -0.336934 -0.561557 -0.299497
+vn -2.221440 5.363033 -4.712384
+v -0.336934 0.561558 -0.299497
+vn 2.221442 5.363033 4.712387
+v 0.336935 0.561557 0.299497
+vn 2.221439 -5.363034 4.712385
+v 0.336934 -0.561558 0.299497
+vn -2.221441 -5.363034 4.712389
+v -0.336934 -0.561557 0.299497
+vn -2.221442 5.363035 4.712392
+v -0.336934 0.561557 0.299497
+vn 5.363035 2.221442 -4.712393
+v 0.561557 0.336934 -0.299497
+vn -5.363034 2.221443 -4.712390
+v -0.561557 0.336935 -0.299497
+vn 5.363034 2.221440 4.712386
+v 0.561558 0.336934 0.299497
+vn -5.363035 2.221442 4.712391
+v -0.561557 0.336934 0.299497
+vn 5.363035 -2.221442 -4.712392
+v 0.561557 -0.336934 -0.299497
+vn -5.363034 -2.221440 -4.712389
+v -0.561557 -0.336934 -0.299497
+vn 5.363033 -2.221442 4.712387
+v 0.561557 -0.336935 0.299497
+vn -5.363034 -2.221441 4.712388
+v -0.561557 -0.336934 0.299497
+# 300 vertices, 0 vertices normals
+
+f 61//61 37//37 38//38
+f 62//62 50//50 49//49
+f 61//61 38//38 39//39
+f 62//62 51//51 50//50
+f 61//61 39//39 40//40
+f 62//62 52//52 51//51
+f 61//61 40//40 41//41
+f 62//62 53//53 52//52
+f 61//61 41//41 42//42
+f 62//62 54//54 53//53
+f 61//61 42//42 43//43
+f 62//62 55//55 54//54
+f 61//61 43//43 44//44
+f 62//62 56//56 55//55
+f 61//61 44//44 45//45
+f 62//62 57//57 56//56
+f 61//61 45//45 46//46
+f 62//62 58//58 57//57
+f 61//61 46//46 47//47
+f 62//62 59//59 58//58
+f 61//61 47//47 48//48
+f 62//62 60//60 59//59
+f 48//48 37//37 61//61
+f 62//62 49//49 60//60
+f 49//49 37//37 48//48
+f 49//49 48//48 60//60
+f 47//47 59//59 60//60
+f 47//47 60//60 48//48
+f 46//46 58//58 59//59
+f 46//46 59//59 47//47
+f 45//45 57//57 58//58
+f 45//45 58//58 46//46
+f 44//44 56//56 57//57
+f 44//44 57//57 45//45
+f 43//43 55//55 56//56
+f 43//43 56//56 44//44
+f 42//42 54//54 55//55
+f 42//42 55//55 43//43
+f 41//41 53//53 54//54
+f 41//41 54//54 42//42
+f 40//40 52//52 53//53
+f 40//40 53//53 41//41
+f 39//39 51//51 52//52
+f 39//39 52//52 40//40
+f 38//38 50//50 51//51
+f 38//38 51//51 39//39
+f 37//37 49//49 50//50
+f 37//37 50//50 38//38
+f 152//152 136//136 135//135
+f 138//138 136//136 152//152
+f 137//137 139//139 135//135
+f 138//138 139//139 137//137
+f 140//140 141//141 135//135
+f 138//138 141//141 140//140
+f 142//142 143//143 135//135
+f 138//138 143//143 142//142
+f 144//144 145//145 135//135
+f 138//138 145//145 144//144
+f 146//146 147//147 135//135
+f 138//138 147//147 146//146
+f 148//148 149//149 135//135
+f 138//138 149//149 148//148
+f 150//150 151//151 135//135
+f 138//138 151//151 150//150
+f 182//182 179//179 183//183
+f 183//183 179//179 180//180
+f 182//182 184//184 185//185
+f 185//185 184//184 180//180
+f 182//182 186//186 187//187
+f 187//187 186//186 180//180
+f 182//182 188//188 189//189
+f 189//189 188//188 180//180
+f 182//182 190//190 191//191
+f 191//191 190//190 180//180
+f 182//182 192//192 193//193
+f 193//193 192//192 180//180
+f 182//182 194//194 195//195
+f 195//195 194//194 180//180
+f 182//182 196//196 181//181
+f 181//181 196//196 180//180
+f 197//197 198//198 199//199
+f 200//200 198//198 197//197
+f 201//201 202//202 199//199
+f 200//200 202//202 201//201
+f 203//203 204//204 199//199
+f 200//200 204//204 203//203
+f 205//205 206//206 199//199
+f 200//200 206//206 205//205
+f 207//207 208//208 199//199
+f 200//200 208//208 207//207
+f 209//209 210//210 199//199
+f 200//200 210//210 209//209
+f 211//211 212//212 199//199
+f 200//200 212//212 211//211
+f 213//213 214//214 199//199
+f 200//200 214//214 213//213
+f 270//270 267//267 271//271
+f 271//271 267//267 268//268
+f 270//270 272//272 273//273
+f 273//273 272//272 268//268
+f 270//270 274//274 275//275
+f 275//275 274//274 268//268
+f 270//270 276//276 277//277
+f 277//277 276//276 268//268
+f 270//270 278//278 279//279
+f 279//279 278//278 268//268
+f 270//270 280//280 281//281
+f 281//281 280//280 268//268
+f 270//270 282//282 283//283
+f 283//283 282//282 268//268
+f 270//270 284//284 269//269
+f 269//269 284//284 268//268
+f 17//17 1//1 4//4
+f 3//3 2//2 18//18
+f 17//17 4//4 6//6
+f 18//18 5//5 3//3
+f 17//17 6//6 8//8
+f 18//18 7//7 5//5
+f 17//17 8//8 10//10
+f 18//18 9//9 7//7
+f 17//17 10//10 12//12
+f 18//18 11//11 9//9
+f 17//17 12//12 14//14
+f 18//18 13//13 11//11
+f 17//17 14//14 16//16
+f 18//18 15//15 13//13
+f 16//16 1//1 17//17
+f 18//18 2//2 15//15
+f 19//19 21//21 20//20
+f 22//22 24//24 23//23
+f 19//19 20//20 25//25
+f 22//22 26//26 24//24
+f 19//19 25//25 27//27
+f 22//22 28//28 26//26
+f 19//19 27//27 29//29
+f 22//22 30//30 28//28
+f 19//19 29//29 31//31
+f 22//22 32//32 30//30
+f 19//19 31//31 33//33
+f 22//22 34//34 32//32
+f 19//19 33//33 35//35
+f 22//22 36//36 34//34
+f 35//35 21//21 19//19
+f 36//36 22//22 23//23
+f 79//79 63//63 64//64
+f 80//80 72//72 71//71
+f 79//79 64//64 65//65
+f 80//80 73//73 72//72
+f 79//79 65//65 66//66
+f 80//80 74//74 73//73
+f 79//79 66//66 67//67
+f 80//80 75//75 74//74
+f 79//79 67//67 68//68
+f 80//80 76//76 75//75
+f 79//79 68//68 69//69
+f 80//80 77//77 76//76
+f 79//79 69//69 70//70
+f 80//80 78//78 77//77
+f 70//70 63//63 79//79
+f 80//80 71//71 78//78
+f 97//97 81//81 84//84
+f 83//83 82//82 98//98
+f 97//97 84//84 86//86
+f 98//98 85//85 83//83
+f 97//97 86//86 88//88
+f 98//98 87//87 85//85
+f 97//97 88//88 90//90
+f 98//98 89//89 87//87
+f 97//97 90//90 92//92
+f 98//98 91//91 89//89
+f 97//97 92//92 94//94
+f 98//98 93//93 91//91
+f 97//97 94//94 96//96
+f 98//98 95//95 93//93
+f 97//97 96//96 81//81
+f 98//98 82//82 95//95
+f 99//99 101//101 100//100
+f 102//102 104//104 103//103
+f 99//99 100//100 105//105
+f 102//102 106//106 104//104
+f 99//99 105//105 107//107
+f 102//102 108//108 106//106
+f 99//99 107//107 109//109
+f 102//102 110//110 108//108
+f 99//99 109//109 111//111
+f 102//102 112//112 110//110
+f 99//99 111//111 113//113
+f 102//102 114//114 112//112
+f 99//99 113//113 115//115
+f 102//102 116//116 114//114
+f 115//115 101//101 99//99
+f 102//102 103//103 116//116
+f 133//133 117//117 120//120
+f 119//119 118//118 134//134
+f 133//133 120//120 122//122
+f 134//134 121//121 119//119
+f 133//133 122//122 124//124
+f 134//134 123//123 121//121
+f 133//133 124//124 126//126
+f 134//134 125//125 123//123
+f 133//133 126//126 128//128
+f 134//134 127//127 125//125
+f 133//133 128//128 130//130
+f 134//134 129//129 127//127
+f 133//133 130//130 132//132
+f 134//134 131//131 129//129
+f 133//133 132//132 117//117
+f 134//134 118//118 131//131
+f 153//153 154//154 155//155
+f 156//156 157//157 158//158
+f 153//153 155//155 159//159
+f 156//156 160//160 157//157
+f 153//153 159//159 161//161
+f 156//156 162//162 160//160
+f 153//153 161//161 163//163
+f 156//156 164//164 162//162
+f 153//153 163//163 165//165
+f 156//156 166//166 164//164
+f 153//153 165//165 167//167
+f 156//156 168//168 166//166
+f 153//153 167//167 169//169
+f 156//156 170//170 168//168
+f 153//153 169//169 171//171
+f 156//156 172//172 170//170
+f 153//153 171//171 173//173
+f 156//156 174//174 172//172
+f 153//153 173//173 175//175
+f 156//156 176//176 174//174
+f 153//153 175//175 177//177
+f 156//156 178//178 176//176
+f 153//153 177//177 154//154
+f 156//156 158//158 178//178
+f 239//239 217//217 218//218
+f 240//240 215//215 216//216
+f 239//239 218//218 220//220
+f 240//240 219//219 215//215
+f 239//239 220//220 222//222
+f 240//240 221//221 219//219
+f 239//239 222//222 224//224
+f 240//240 223//223 221//221
+f 239//239 224//224 226//226
+f 240//240 225//225 223//223
+f 239//239 226//226 228//228
+f 240//240 227//227 225//225
+f 239//239 228//228 230//230
+f 240//240 229//229 227//227
+f 239//239 230//230 232//232
+f 240//240 231//231 229//229
+f 239//239 232//232 234//234
+f 240//240 233//233 231//231
+f 239//239 234//234 236//236
+f 240//240 235//235 233//233
+f 239//239 236//236 238//238
+f 240//240 237//237 235//235
+f 239//239 238//238 217//217
+f 240//240 216//216 237//237
+f 241//241 242//242 243//243
+f 244//244 245//245 246//246
+f 241//241 243//243 247//247
+f 244//244 248//248 245//245
+f 241//241 247//247 249//249
+f 244//244 250//250 248//248
+f 241//241 249//249 251//251
+f 244//244 252//252 250//250
+f 241//241 251//251 253//253
+f 244//244 254//254 252//252
+f 241//241 253//253 255//255
+f 244//244 256//256 254//254
+f 241//241 255//255 257//257
+f 244//244 258//258 256//256
+f 241//241 257//257 259//259
+f 244//244 260//260 258//258
+f 241//241 259//259 261//261
+f 244//244 262//262 260//260
+f 241//241 261//261 263//263
+f 244//244 264//264 262//262
+f 241//241 263//263 265//265
+f 244//244 266//266 264//264
+f 241//241 265//265 242//242
+f 244//244 246//246 266//266
+f 300//300 296//296 298//298
+f 296//296 294//294 298//298
+f 291//291 300//300 298//298
+f 291//291 298//298 287//287
+f 299//299 290//290 286//286
+f 299//299 286//286 297//297
+f 295//295 299//299 297//297
+f 295//295 297//297 293//293
+f 300//300 291//291 299//299
+f 291//291 290//290 299//299
+f 296//296 300//300 299//299
+f 296//296 299//299 295//295
+f 297//297 286//286 287//287
+f 297//297 287//287 298//298
+f 293//293 297//297 298//298
+f 293//293 298//298 294//294
+f 296//296 292//292 294//294
+f 292//292 288//288 294//294
+f 293//293 285//285 289//289
+f 293//293 289//289 295//295
+f 292//292 296//296 289//289
+f 296//296 295//295 289//289
+f 285//285 293//293 294//294
+f 285//285 294//294 288//288
+f 289//289 285//285 292//292
+f 285//285 288//288 292//292
+f 286//286 290//290 291//291
+f 286//286 291//291 287//287
+f 265//265 246//246 242//242
+f 265//265 266//266 246//246
+f 263//263 266//266 265//265
+f 263//263 264//264 266//266
+f 261//261 264//264 263//263
+f 261//261 262//262 264//264
+f 259//259 262//262 261//261
+f 259//259 260//260 262//262
+f 257//257 260//260 259//259
+f 257//257 258//258 260//260
+f 255//255 258//258 257//257
+f 255//255 256//256 258//258
+f 253//253 256//256 255//255
+f 253//253 254//254 256//256
+f 251//251 254//254 253//253
+f 251//251 252//252 254//254
+f 249//249 252//252 251//251
+f 249//249 250//250 252//252
+f 247//247 250//250 249//249
+f 247//247 248//248 250//250
+f 243//243 248//248 247//247
+f 243//243 245//245 248//248
+f 242//242 245//245 243//243
+f 242//242 246//246 245//245
+f 216//216 217//217 238//238
+f 216//216 238//238 237//237
+f 237//237 238//238 236//236
+f 237//237 236//236 235//235
+f 235//235 236//236 234//234
+f 235//235 234//234 233//233
+f 233//233 234//234 232//232
+f 233//233 232//232 231//231
+f 231//231 232//232 230//230
+f 231//231 230//230 229//229
+f 229//229 230//230 228//228
+f 229//229 228//228 227//227
+f 227//227 228//228 226//226
+f 227//227 226//226 225//225
+f 225//225 226//226 224//224
+f 225//225 224//224 223//223
+f 223//223 224//224 222//222
+f 223//223 222//222 221//221
+f 221//221 222//222 220//220
+f 221//221 220//220 219//219
+f 219//219 220//220 218//218
+f 219//219 218//218 215//215
+f 215//215 218//218 217//217
+f 215//215 217//217 216//216
+f 177//177 158//158 154//154
+f 177//177 178//178 158//158
+f 175//175 178//178 177//177
+f 175//175 176//176 178//178
+f 173//173 176//176 175//175
+f 173//173 174//174 176//176
+f 171//171 174//174 173//173
+f 171//171 172//172 174//174
+f 169//169 172//172 171//171
+f 169//169 170//170 172//172
+f 167//167 170//170 169//169
+f 167//167 168//168 170//170
+f 165//165 168//168 167//167
+f 165//165 166//166 168//168
+f 163//163 166//166 165//165
+f 163//163 164//164 166//166
+f 161//161 164//164 163//163
+f 161//161 162//162 164//164
+f 159//159 162//162 161//161
+f 159//159 160//160 162//162
+f 155//155 160//160 159//159
+f 155//155 157//157 160//160
+f 154//154 157//157 155//155
+f 154//154 158//158 157//157
+f 118//118 132//132 131//131
+f 118//118 117//117 132//132
+f 131//131 132//132 129//129
+f 129//129 132//132 130//130
+f 129//129 130//130 127//127
+f 127//127 130//130 128//128
+f 127//127 128//128 125//125
+f 125//125 128//128 126//126
+f 125//125 126//126 123//123
+f 123//123 126//126 124//124
+f 123//123 122//122 121//121
+f 123//123 124//124 122//122
+f 121//121 120//120 119//119
+f 121//121 122//122 120//120
+f 117//117 119//119 120//120
+f 117//117 118//118 119//119
+f 103//103 101//101 115//115
+f 103//103 115//115 116//116
+f 113//113 114//114 116//116
+f 113//113 116//116 115//115
+f 111//111 112//112 114//114
+f 111//111 114//114 113//113
+f 109//109 110//110 111//111
+f 110//110 112//112 111//111
+f 107//107 108//108 109//109
+f 108//108 110//110 109//109
+f 105//105 106//106 107//107
+f 106//106 108//108 107//107
+f 100//100 104//104 105//105
+f 104//104 106//106 105//105
+f 101//101 103//103 104//104
+f 101//101 104//104 100//100
+f 82//82 96//96 95//95
+f 82//82 81//81 96//96
+f 95//95 96//96 93//93
+f 93//93 96//96 94//94
+f 93//93 94//94 91//91
+f 91//91 94//94 92//92
+f 91//91 92//92 89//89
+f 89//89 92//92 90//90
+f 89//89 90//90 87//87
+f 87//87 90//90 88//88
+f 87//87 86//86 85//85
+f 87//87 88//88 86//86
+f 85//85 84//84 83//83
+f 85//85 86//86 84//84
+f 81//81 83//83 84//84
+f 81//81 82//82 83//83
+f 71//71 63//63 70//70
+f 71//71 70//70 78//78
+f 69//69 77//77 78//78
+f 69//69 78//78 70//70
+f 68//68 76//76 77//77
+f 68//68 77//77 69//69
+f 67//67 75//75 68//68
+f 75//75 76//76 68//68
+f 66//66 74//74 67//67
+f 74//74 75//75 67//67
+f 65//65 73//73 66//66
+f 73//73 74//74 66//66
+f 64//64 72//72 65//65
+f 72//72 73//73 65//65
+f 63//63 71//71 72//72
+f 63//63 72//72 64//64
+f 23//23 21//21 35//35
+f 23//23 35//35 36//36
+f 33//33 34//34 36//36
+f 33//33 36//36 35//35
+f 31//31 32//32 34//34
+f 31//31 34//34 33//33
+f 29//29 30//30 32//32
+f 29//29 32//32 31//31
+f 27//27 28//28 30//30
+f 27//27 30//30 29//29
+f 25//25 26//26 28//28
+f 25//25 28//28 27//27
+f 20//20 24//24 26//26
+f 20//20 26//26 25//25
+f 24//24 20//20 21//21
+f 24//24 21//21 23//23
+f 2//2 1//1 16//16
+f 16//16 15//15 2//2
+f 15//15 14//14 13//13
+f 15//15 16//16 14//14
+f 13//13 12//12 11//11
+f 13//13 14//14 12//12
+f 11//11 10//10 9//9
+f 11//11 12//12 10//10
+f 9//9 8//8 7//7
+f 9//9 10//10 8//8
+f 7//7 6//6 5//5
+f 7//7 8//8 6//6
+f 5//5 4//4 3//3
+f 5//5 6//6 4//4
+f 1//1 3//3 4//4
+f 1//1 2//2 3//3
+f 138//138 137//137 136//136
+f 136//136 137//137 135//135
+f 138//138 140//140 139//139
+f 139//139 140//140 135//135
+f 138//138 142//142 141//141
+f 141//141 142//142 135//135
+f 138//138 144//144 143//143
+f 143//143 144//144 135//135
+f 138//138 146//146 145//145
+f 145//145 146//146 135//135
+f 138//138 148//148 147//147
+f 147//147 148//148 135//135
+f 138//138 150//150 149//149
+f 149//149 150//150 135//135
+f 138//138 152//152 151//151
+f 151//151 152//152 135//135
+f 179//179 181//181 180//180
+f 182//182 181//181 179//179
+f 184//184 183//183 180//180
+f 182//182 183//183 184//184
+f 186//186 185//185 180//180
+f 182//182 185//185 186//186
+f 188//188 187//187 180//180
+f 182//182 187//187 188//188
+f 190//190 189//189 180//180
+f 182//182 189//189 190//190
+f 192//192 191//191 180//180
+f 182//182 191//191 192//192
+f 194//194 193//193 180//180
+f 182//182 193//193 194//194
+f 196//196 195//195 180//180
+f 182//182 195//195 196//196
+f 200//200 201//201 198//198
+f 198//198 201//201 199//199
+f 200//200 203//203 202//202
+f 202//202 203//203 199//199
+f 200//200 205//205 204//204
+f 204//204 205//205 199//199
+f 200//200 207//207 206//206
+f 206//206 207//207 199//199
+f 200//200 209//209 208//208
+f 208//208 209//209 199//199
+f 200//200 211//211 210//210
+f 210//210 211//211 199//199
+f 200//200 213//213 212//212
+f 212//212 213//213 199//199
+f 200//200 197//197 214//214
+f 214//214 197//197 199//199
+f 267//267 269//269 268//268
+f 270//270 269//269 267//267
+f 272//272 271//271 268//268
+f 270//270 271//271 272//272
+f 274//274 273//273 268//268
+f 270//270 273//273 274//274
+f 276//276 275//275 268//268
+f 270//270 275//275 276//276
+f 278//278 277//277 268//268
+f 270//270 277//277 278//278
+f 280//280 279//279 268//268
+f 270//270 279//279 280//280
+f 282//282 281//281 268//268
+f 270//270 281//281 282//282
+f 284//284 283//283 268//268
+f 270//270 283//283 284//284
+f 61//61 37//37 38//38
+f 62//62 50//50 49//49
+f 61//61 38//38 39//39
+f 62//62 51//51 50//50
+f 61//61 39//39 40//40
+f 62//62 52//52 51//51
+f 61//61 40//40 41//41
+f 62//62 53//53 52//52
+f 61//61 41//41 42//42
+f 62//62 54//54 53//53
+f 61//61 42//42 43//43
+f 62//62 55//55 54//54
+f 61//61 43//43 44//44
+f 62//62 56//56 55//55
+f 61//61 44//44 45//45
+f 62//62 57//57 56//56
+f 61//61 45//45 46//46
+f 62//62 58//58 57//57
+f 61//61 46//46 47//47
+f 62//62 59//59 58//58
+f 61//61 47//47 48//48
+f 62//62 60//60 59//59
+f 48//48 37//37 61//61
+f 62//62 49//49 60//60
+f 49//49 37//37 48//48
+f 49//49 48//48 60//60
+f 47//47 59//59 60//60
+f 47//47 60//60 48//48
+f 46//46 58//58 59//59
+f 46//46 59//59 47//47
+f 45//45 57//57 58//58
+f 45//45 58//58 46//46
+f 44//44 56//56 57//57
+f 44//44 57//57 45//45
+f 43//43 55//55 56//56
+f 43//43 56//56 44//44
+f 42//42 54//54 55//55
+f 42//42 55//55 43//43
+f 41//41 53//53 54//54
+f 41//41 54//54 42//42
+f 40//40 52//52 53//53
+f 40//40 53//53 41//41
+f 39//39 51//51 52//52
+f 39//39 52//52 40//40
+f 38//38 50//50 51//51
+f 38//38 51//51 39//39
+f 37//37 49//49 50//50
+f 37//37 50//50 38//38
+f 152//152 136//136 135//135
+f 138//138 136//136 152//152
+f 137//137 139//139 135//135
+f 138//138 139//139 137//137
+f 140//140 141//141 135//135
+f 138//138 141//141 140//140
+f 142//142 143//143 135//135
+f 138//138 143//143 142//142
+f 144//144 145//145 135//135
+f 138//138 145//145 144//144
+f 146//146 147//147 135//135
+f 138//138 147//147 146//146
+f 148//148 149//149 135//135
+f 138//138 149//149 148//148
+f 150//150 151//151 135//135
+f 138//138 151//151 150//150
+f 182//182 179//179 183//183
+f 183//183 179//179 180//180
+f 182//182 184//184 185//185
+f 185//185 184//184 180//180
+f 182//182 186//186 187//187
+f 187//187 186//186 180//180
+f 182//182 188//188 189//189
+f 189//189 188//188 180//180
+f 182//182 190//190 191//191
+f 191//191 190//190 180//180
+f 182//182 192//192 193//193
+f 193//193 192//192 180//180
+f 182//182 194//194 195//195
+f 195//195 194//194 180//180
+f 182//182 196//196 181//181
+f 181//181 196//196 180//180
+f 197//197 198//198 199//199
+f 200//200 198//198 197//197
+f 201//201 202//202 199//199
+f 200//200 202//202 201//201
+f 203//203 204//204 199//199
+f 200//200 204//204 203//203
+f 205//205 206//206 199//199
+f 200//200 206//206 205//205
+f 207//207 208//208 199//199
+f 200//200 208//208 207//207
+f 209//209 210//210 199//199
+f 200//200 210//210 209//209
+f 211//211 212//212 199//199
+f 200//200 212//212 211//211
+f 213//213 214//214 199//199
+f 200//200 214//214 213//213
+f 270//270 267//267 271//271
+f 271//271 267//267 268//268
+f 270//270 272//272 273//273
+f 273//273 272//272 268//268
+f 270//270 274//274 275//275
+f 275//275 274//274 268//268
+f 270//270 276//276 277//277
+f 277//277 276//276 268//268
+f 270//270 278//278 279//279
+f 279//279 278//278 268//268
+f 270//270 280//280 281//281
+f 281//281 280//280 268//268
+f 270//270 282//282 283//283
+f 283//283 282//282 268//268
+f 270//270 284//284 269//269
+f 269//269 284//284 268//268
+f 17//17 1//1 4//4
+f 3//3 2//2 18//18
+f 17//17 4//4 6//6
+f 18//18 5//5 3//3
+f 17//17 6//6 8//8
+f 18//18 7//7 5//5
+f 17//17 8//8 10//10
+f 18//18 9//9 7//7
+f 17//17 10//10 12//12
+f 18//18 11//11 9//9
+f 17//17 12//12 14//14
+f 18//18 13//13 11//11
+f 17//17 14//14 16//16
+f 18//18 15//15 13//13
+f 16//16 1//1 17//17
+f 18//18 2//2 15//15
+f 19//19 21//21 20//20
+f 22//22 24//24 23//23
+f 19//19 20//20 25//25
+f 22//22 26//26 24//24
+f 19//19 25//25 27//27
+f 22//22 28//28 26//26
+f 19//19 27//27 29//29
+f 22//22 30//30 28//28
+f 19//19 29//29 31//31
+f 22//22 32//32 30//30
+f 19//19 31//31 33//33
+f 22//22 34//34 32//32
+f 19//19 33//33 35//35
+f 22//22 36//36 34//34
+f 35//35 21//21 19//19
+f 36//36 22//22 23//23
+f 79//79 63//63 64//64
+f 80//80 72//72 71//71
+f 79//79 64//64 65//65
+f 80//80 73//73 72//72
+f 79//79 65//65 66//66
+f 80//80 74//74 73//73
+f 79//79 66//66 67//67
+f 80//80 75//75 74//74
+f 79//79 67//67 68//68
+f 80//80 76//76 75//75
+f 79//79 68//68 69//69
+f 80//80 77//77 76//76
+f 79//79 69//69 70//70
+f 80//80 78//78 77//77
+f 70//70 63//63 79//79
+f 80//80 71//71 78//78
+f 97//97 81//81 84//84
+f 83//83 82//82 98//98
+f 97//97 84//84 86//86
+f 98//98 85//85 83//83
+f 97//97 86//86 88//88
+f 98//98 87//87 85//85
+f 97//97 88//88 90//90
+f 98//98 89//89 87//87
+f 97//97 90//90 92//92
+f 98//98 91//91 89//89
+f 97//97 92//92 94//94
+f 98//98 93//93 91//91
+f 97//97 94//94 96//96
+f 98//98 95//95 93//93
+f 97//97 96//96 81//81
+f 98//98 82//82 95//95
+f 99//99 101//101 100//100
+f 102//102 104//104 103//103
+f 99//99 100//100 105//105
+f 102//102 106//106 104//104
+f 99//99 105//105 107//107
+f 102//102 108//108 106//106
+f 99//99 107//107 109//109
+f 102//102 110//110 108//108
+f 99//99 109//109 111//111
+f 102//102 112//112 110//110
+f 99//99 111//111 113//113
+f 102//102 114//114 112//112
+f 99//99 113//113 115//115
+f 102//102 116//116 114//114
+f 115//115 101//101 99//99
+f 102//102 103//103 116//116
+f 133//133 117//117 120//120
+f 119//119 118//118 134//134
+f 133//133 120//120 122//122
+f 134//134 121//121 119//119
+f 133//133 122//122 124//124
+f 134//134 123//123 121//121
+f 133//133 124//124 126//126
+f 134//134 125//125 123//123
+f 133//133 126//126 128//128
+f 134//134 127//127 125//125
+f 133//133 128//128 130//130
+f 134//134 129//129 127//127
+f 133//133 130//130 132//132
+f 134//134 131//131 129//129
+f 133//133 132//132 117//117
+f 134//134 118//118 131//131
+f 153//153 154//154 155//155
+f 156//156 157//157 158//158
+f 153//153 155//155 159//159
+f 156//156 160//160 157//157
+f 153//153 159//159 161//161
+f 156//156 162//162 160//160
+f 153//153 161//161 163//163
+f 156//156 164//164 162//162
+f 153//153 163//163 165//165
+f 156//156 166//166 164//164
+f 153//153 165//165 167//167
+f 156//156 168//168 166//166
+f 153//153 167//167 169//169
+f 156//156 170//170 168//168
+f 153//153 169//169 171//171
+f 156//156 172//172 170//170
+f 153//153 171//171 173//173
+f 156//156 174//174 172//172
+f 153//153 173//173 175//175
+f 156//156 176//176 174//174
+f 153//153 175//175 177//177
+f 156//156 178//178 176//176
+f 153//153 177//177 154//154
+f 156//156 158//158 178//178
+f 239//239 217//217 218//218
+f 240//240 215//215 216//216
+f 239//239 218//218 220//220
+f 240//240 219//219 215//215
+f 239//239 220//220 222//222
+f 240//240 221//221 219//219
+f 239//239 222//222 224//224
+f 240//240 223//223 221//221
+f 239//239 224//224 226//226
+f 240//240 225//225 223//223
+f 239//239 226//226 228//228
+f 240//240 227//227 225//225
+f 239//239 228//228 230//230
+f 240//240 229//229 227//227
+f 239//239 230//230 232//232
+f 240//240 231//231 229//229
+f 239//239 232//232 234//234
+f 240//240 233//233 231//231
+f 239//239 234//234 236//236
+f 240//240 235//235 233//233
+f 239//239 236//236 238//238
+f 240//240 237//237 235//235
+f 239//239 238//238 217//217
+f 240//240 216//216 237//237
+f 241//241 242//242 243//243
+f 244//244 245//245 246//246
+f 241//241 243//243 247//247
+f 244//244 248//248 245//245
+f 241//241 247//247 249//249
+f 244//244 250//250 248//248
+f 241//241 249//249 251//251
+f 244//244 252//252 250//250
+f 241//241 251//251 253//253
+f 244//244 254//254 252//252
+f 241//241 253//253 255//255
+f 244//244 256//256 254//254
+f 241//241 255//255 257//257
+f 244//244 258//258 256//256
+f 241//241 257//257 259//259
+f 244//244 260//260 258//258
+f 241//241 259//259 261//261
+f 244//244 262//262 260//260
+f 241//241 261//261 263//263
+f 244//244 264//264 262//262
+f 241//241 263//263 265//265
+f 244//244 266//266 264//264
+f 241//241 265//265 242//242
+f 244//244 246//246 266//266
+f 300//300 296//296 298//298
+f 296//296 294//294 298//298
+f 291//291 300//300 298//298
+f 291//291 298//298 287//287
+f 299//299 290//290 286//286
+f 299//299 286//286 297//297
+f 295//295 299//299 297//297
+f 295//295 297//297 293//293
+f 300//300 291//291 299//299
+f 291//291 290//290 299//299
+f 296//296 300//300 299//299
+f 296//296 299//299 295//295
+f 297//297 286//286 287//287
+f 297//297 287//287 298//298
+f 293//293 297//297 298//298
+f 293//293 298//298 294//294
+f 296//296 292//292 294//294
+f 292//292 288//288 294//294
+f 293//293 285//285 289//289
+f 293//293 289//289 295//295
+f 292//292 296//296 289//289
+f 296//296 295//295 289//289
+f 285//285 293//293 294//294
+f 285//285 294//294 288//288
+f 289//289 285//285 292//292
+f 285//285 288//288 292//292
+f 286//286 290//290 291//291
+f 286//286 291//291 287//287
+f 265//265 246//246 242//242
+f 265//265 266//266 246//246
+f 263//263 266//266 265//265
+f 263//263 264//264 266//266
+f 261//261 264//264 263//263
+f 261//261 262//262 264//264
+f 259//259 262//262 261//261
+f 259//259 260//260 262//262
+f 257//257 260//260 259//259
+f 257//257 258//258 260//260
+f 255//255 258//258 257//257
+f 255//255 256//256 258//258
+f 253//253 256//256 255//255
+f 253//253 254//254 256//256
+f 251//251 254//254 253//253
+f 251//251 252//252 254//254
+f 249//249 252//252 251//251
+f 249//249 250//250 252//252
+f 247//247 250//250 249//249
+f 247//247 248//248 250//250
+f 243//243 248//248 247//247
+f 243//243 245//245 248//248
+f 242//242 245//245 243//243
+f 242//242 246//246 245//245
+f 216//216 217//217 238//238
+f 216//216 238//238 237//237
+f 237//237 238//238 236//236
+f 237//237 236//236 235//235
+f 235//235 236//236 234//234
+f 235//235 234//234 233//233
+f 233//233 234//234 232//232
+f 233//233 232//232 231//231
+f 231//231 232//232 230//230
+f 231//231 230//230 229//229
+f 229//229 230//230 228//228
+f 229//229 228//228 227//227
+f 227//227 228//228 226//226
+f 227//227 226//226 225//225
+f 225//225 226//226 224//224
+f 225//225 224//224 223//223
+f 223//223 224//224 222//222
+f 223//223 222//222 221//221
+f 221//221 222//222 220//220
+f 221//221 220//220 219//219
+f 219//219 220//220 218//218
+f 219//219 218//218 215//215
+f 215//215 218//218 217//217
+f 215//215 217//217 216//216
+f 177//177 158//158 154//154
+f 177//177 178//178 158//158
+f 175//175 178//178 177//177
+f 175//175 176//176 178//178
+f 173//173 176//176 175//175
+f 173//173 174//174 176//176
+f 171//171 174//174 173//173
+f 171//171 172//172 174//174
+f 169//169 172//172 171//171
+f 169//169 170//170 172//172
+f 167//167 170//170 169//169
+f 167//167 168//168 170//170
+f 165//165 168//168 167//167
+f 165//165 166//166 168//168
+f 163//163 166//166 165//165
+f 163//163 164//164 166//166
+f 161//161 164//164 163//163
+f 161//161 162//162 164//164
+f 159//159 162//162 161//161
+f 159//159 160//160 162//162
+f 155//155 160//160 159//159
+f 155//155 157//157 160//160
+f 154//154 157//157 155//155
+f 154//154 158//158 157//157
+f 118//118 132//132 131//131
+f 118//118 117//117 132//132
+f 131//131 132//132 129//129
+f 129//129 132//132 130//130
+f 129//129 130//130 127//127
+f 127//127 130//130 128//128
+f 127//127 128//128 125//125
+f 125//125 128//128 126//126
+f 125//125 126//126 123//123
+f 123//123 126//126 124//124
+f 123//123 122//122 121//121
+f 123//123 124//124 122//122
+f 121//121 120//120 119//119
+f 121//121 122//122 120//120
+f 117//117 119//119 120//120
+f 117//117 118//118 119//119
+f 103//103 101//101 115//115
+f 103//103 115//115 116//116
+f 113//113 114//114 116//116
+f 113//113 116//116 115//115
+f 111//111 112//112 114//114
+f 111//111 114//114 113//113
+f 109//109 110//110 111//111
+f 110//110 112//112 111//111
+f 107//107 108//108 109//109
+f 108//108 110//110 109//109
+f 105//105 106//106 107//107
+f 106//106 108//108 107//107
+f 100//100 104//104 105//105
+f 104//104 106//106 105//105
+f 101//101 103//103 104//104
+f 101//101 104//104 100//100
+f 82//82 96//96 95//95
+f 82//82 81//81 96//96
+f 95//95 96//96 93//93
+f 93//93 96//96 94//94
+f 93//93 94//94 91//91
+f 91//91 94//94 92//92
+f 91//91 92//92 89//89
+f 89//89 92//92 90//90
+f 89//89 90//90 87//87
+f 87//87 90//90 88//88
+f 87//87 86//86 85//85
+f 87//87 88//88 86//86
+f 85//85 84//84 83//83
+f 85//85 86//86 84//84
+f 81//81 83//83 84//84
+f 81//81 82//82 83//83
+f 71//71 63//63 70//70
+f 71//71 70//70 78//78
+f 69//69 77//77 78//78
+f 69//69 78//78 70//70
+f 68//68 76//76 77//77
+f 68//68 77//77 69//69
+f 67//67 75//75 68//68
+f 75//75 76//76 68//68
+f 66//66 74//74 67//67
+f 74//74 75//75 67//67
+f 65//65 73//73 66//66
+f 73//73 74//74 66//66
+f 64//64 72//72 65//65
+f 72//72 73//73 65//65
+f 63//63 71//71 72//72
+f 63//63 72//72 64//64
+f 23//23 21//21 35//35
+f 23//23 35//35 36//36
+f 33//33 34//34 36//36
+f 33//33 36//36 35//35
+f 31//31 32//32 34//34
+f 31//31 34//34 33//33
+f 29//29 30//30 32//32
+f 29//29 32//32 31//31
+f 27//27 28//28 30//30
+f 27//27 30//30 29//29
+f 25//25 26//26 28//28
+f 25//25 28//28 27//27
+f 20//20 24//24 26//26
+f 20//20 26//26 25//25
+f 24//24 20//20 21//21
+f 24//24 21//21 23//23
+f 2//2 1//1 16//16
+f 16//16 15//15 2//2
+f 15//15 14//14 13//13
+f 15//15 16//16 14//14
+f 13//13 12//12 11//11
+f 13//13 14//14 12//12
+f 11//11 10//10 9//9
+f 11//11 12//12 10//10
+f 9//9 8//8 7//7
+f 9//9 10//10 8//8
+f 7//7 6//6 5//5
+f 7//7 8//8 6//6
+f 5//5 4//4 3//3
+f 5//5 6//6 4//4
+f 1//1 3//3 4//4
+f 1//1 2//2 3//3
+f 138//138 137//137 136//136
+f 136//136 137//137 135//135
+f 138//138 140//140 139//139
+f 139//139 140//140 135//135
+f 138//138 142//142 141//141
+f 141//141 142//142 135//135
+f 138//138 144//144 143//143
+f 143//143 144//144 135//135
+f 138//138 146//146 145//145
+f 145//145 146//146 135//135
+f 138//138 148//148 147//147
+f 147//147 148//148 135//135
+f 138//138 150//150 149//149
+f 149//149 150//150 135//135
+f 138//138 152//152 151//151
+f 151//151 152//152 135//135
+f 179//179 181//181 180//180
+f 182//182 181//181 179//179
+f 184//184 183//183 180//180
+f 182//182 183//183 184//184
+f 186//186 185//185 180//180
+f 182//182 185//185 186//186
+f 188//188 187//187 180//180
+f 182//182 187//187 188//188
+f 190//190 189//189 180//180
+f 182//182 189//189 190//190
+f 192//192 191//191 180//180
+f 182//182 191//191 192//192
+f 194//194 193//193 180//180
+f 182//182 193//193 194//194
+f 196//196 195//195 180//180
+f 182//182 195//195 196//196
+f 200//200 201//201 198//198
+f 198//198 201//201 199//199
+f 200//200 203//203 202//202
+f 202//202 203//203 199//199
+f 200//200 205//205 204//204
+f 204//204 205//205 199//199
+f 200//200 207//207 206//206
+f 206//206 207//207 199//199
+f 200//200 209//209 208//208
+f 208//208 209//209 199//199
+f 200//200 211//211 210//210
+f 210//210 211//211 199//199
+f 200//200 213//213 212//212
+f 212//212 213//213 199//199
+f 200//200 197//197 214//214
+f 214//214 197//197 199//199
+f 267//267 269//269 268//268
+f 270//270 269//269 267//267
+f 272//272 271//271 268//268
+f 270//270 271//271 272//272
+f 274//274 273//273 268//268
+f 270//270 273//273 274//274
+f 276//276 275//275 268//268
+f 270//270 275//275 276//276
+f 278//278 277//277 268//268
+f 270//270 277//277 278//278
+f 280//280 279//279 268//268
+f 270//270 279//279 280//280
+f 282//282 281//281 268//268
+f 270//270 281//281 282//282
+f 284//284 283//283 268//268
+f 270//270 283//283 284//284
+# 1080 faces, 0 coords texture
+
+# End of File
\ No newline at end of file
diff --git a/data/checker_blue.png b/data/checker_blue.png
new file mode 100644
index 000000000..0894b91f1
Binary files /dev/null and b/data/checker_blue.png differ
diff --git a/data/husky/husky.urdf b/data/husky/husky.urdf
new file mode 100644
index 000000000..e9762701b
--- /dev/null
+++ b/data/husky/husky.urdf
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/DarkGrey
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/Grey
+ false
+
+
+
+
+
+
+
+
+ transmission_interface/SimpleTransmission
+
+ 1
+
+
+ VelocityJointInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/Grey
+ false
+
+
+
+
+
+
+
+
+ transmission_interface/SimpleTransmission
+
+ 1
+
+
+ VelocityJointInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/Grey
+ false
+
+
+
+
+
+
+
+
+ transmission_interface/SimpleTransmission
+
+ 1
+
+
+ VelocityJointInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/Grey
+ false
+
+
+
+
+
+
+
+
+ transmission_interface/SimpleTransmission
+
+ 1
+
+
+ VelocityJointInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/Yellow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/DarkGrey
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/DarkGrey
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gazebo/DarkGrey
+
+
+
diff --git a/data/husky/meshes/bumper.stl b/data/husky/meshes/bumper.stl
new file mode 100644
index 000000000..7cccf4b03
Binary files /dev/null and b/data/husky/meshes/bumper.stl differ
diff --git a/data/husky/meshes/top_plate.stl b/data/husky/meshes/top_plate.stl
new file mode 100644
index 000000000..ef4d137b5
Binary files /dev/null and b/data/husky/meshes/top_plate.stl differ
diff --git a/data/husky/meshes/user_rail.stl b/data/husky/meshes/user_rail.stl
new file mode 100644
index 000000000..7542c59bc
Binary files /dev/null and b/data/husky/meshes/user_rail.stl differ
diff --git a/data/husky/meshes/wheel.stl b/data/husky/meshes/wheel.stl
new file mode 100644
index 000000000..0e76151ca
Binary files /dev/null and b/data/husky/meshes/wheel.stl differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_0.stl b/data/kuka_iiwa/meshes/coarse/link_0.stl
deleted file mode 100644
index 84b8ea5d2..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_0.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_1.stl b/data/kuka_iiwa/meshes/coarse/link_1.stl
deleted file mode 100644
index ffe3ec981..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_1.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_2.stl b/data/kuka_iiwa/meshes/coarse/link_2.stl
deleted file mode 100644
index 4a51b27ef..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_2.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_3.stl b/data/kuka_iiwa/meshes/coarse/link_3.stl
deleted file mode 100644
index 32d6d5282..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_3.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_4.stl b/data/kuka_iiwa/meshes/coarse/link_4.stl
deleted file mode 100644
index 35d192181..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_4.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_5.stl b/data/kuka_iiwa/meshes/coarse/link_5.stl
deleted file mode 100644
index 35aa1245d..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_5.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_6.stl b/data/kuka_iiwa/meshes/coarse/link_6.stl
deleted file mode 100644
index bce349eb2..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_6.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/coarse/link_7.stl b/data/kuka_iiwa/meshes/coarse/link_7.stl
deleted file mode 100644
index 2d5d6ecfb..000000000
Binary files a/data/kuka_iiwa/meshes/coarse/link_7.stl and /dev/null differ
diff --git a/data/kuka_iiwa/meshes/link_0.stl b/data/kuka_iiwa/meshes/link_0.stl
index 84b8ea5d2..ed1447056 100644
Binary files a/data/kuka_iiwa/meshes/link_0.stl and b/data/kuka_iiwa/meshes/link_0.stl differ
diff --git a/data/kuka_iiwa/meshes/link_1.stl b/data/kuka_iiwa/meshes/link_1.stl
index e8e37de9f..d9d043e69 100644
Binary files a/data/kuka_iiwa/meshes/link_1.stl and b/data/kuka_iiwa/meshes/link_1.stl differ
diff --git a/data/kuka_iiwa/meshes/link_2.stl b/data/kuka_iiwa/meshes/link_2.stl
index 47c7885fc..282aa787b 100644
Binary files a/data/kuka_iiwa/meshes/link_2.stl and b/data/kuka_iiwa/meshes/link_2.stl differ
diff --git a/data/kuka_iiwa/meshes/link_3.stl b/data/kuka_iiwa/meshes/link_3.stl
index 027eb2211..50d856cb8 100644
Binary files a/data/kuka_iiwa/meshes/link_3.stl and b/data/kuka_iiwa/meshes/link_3.stl differ
diff --git a/data/kuka_iiwa/meshes/link_4.stl b/data/kuka_iiwa/meshes/link_4.stl
index c0c1213c1..ade9b0cf1 100644
Binary files a/data/kuka_iiwa/meshes/link_4.stl and b/data/kuka_iiwa/meshes/link_4.stl differ
diff --git a/data/kuka_iiwa/meshes/link_5.stl b/data/kuka_iiwa/meshes/link_5.stl
index 82a9337a6..663ece5cd 100644
Binary files a/data/kuka_iiwa/meshes/link_5.stl and b/data/kuka_iiwa/meshes/link_5.stl differ
diff --git a/data/kuka_iiwa/meshes/link_6.stl b/data/kuka_iiwa/meshes/link_6.stl
index 10b558dc5..7fb9fcad2 100644
Binary files a/data/kuka_iiwa/meshes/link_6.stl and b/data/kuka_iiwa/meshes/link_6.stl differ
diff --git a/data/kuka_iiwa/meshes/link_7.stl b/data/kuka_iiwa/meshes/link_7.stl
index 5909e7e01..e4e301b53 100644
Binary files a/data/kuka_iiwa/meshes/link_7.stl and b/data/kuka_iiwa/meshes/link_7.stl differ
diff --git a/data/kuka_iiwa/model.urdf b/data/kuka_iiwa/model.urdf
index 56123c36d..d8fe60293 100644
--- a/data/kuka_iiwa/model.urdf
+++ b/data/kuka_iiwa/model.urdf
@@ -77,7 +77,7 @@
-
+
@@ -106,7 +106,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -164,7 +164,7 @@
-
+
@@ -193,7 +193,7 @@
-
+
@@ -222,7 +222,7 @@
-
+
@@ -251,7 +251,7 @@
-
+
@@ -280,7 +280,7 @@
-
+
diff --git a/data/plane.mtl b/data/plane.mtl
index 46c54e4be..cd101528d 100644
--- a/data/plane.mtl
+++ b/data/plane.mtl
@@ -10,6 +10,6 @@ newmtl Material
Ks 0.0000 0.0000 0.0000
Ke 0.0000 0.0000 0.0000
map_Ka cube.tga
- map_Kd checker_grid.jpg
+ map_Kd checker_blue.png
+
-
\ No newline at end of file
diff --git a/data/plane.obj b/data/plane.obj
index 61e8e047c..0b77a9912 100644
--- a/data/plane.obj
+++ b/data/plane.obj
@@ -7,9 +7,9 @@ v 5.000000 5.000000 0.000000
v -5.000000 5.000000 0.000000
v -5.000000 -5.000000 0.000000
-vt 1.000000 0.000000
-vt 1.000000 1.000000
-vt 0.000000 1.000000
+vt 5.000000 0.000000
+vt 5.000000 5.000000
+vt 0.000000 5.000000
vt 0.000000 0.000000
usemtl Material
diff --git a/data/plane100.obj b/data/plane100.obj
index c60a07b05..3a74f590b 100644
--- a/data/plane100.obj
+++ b/data/plane100.obj
@@ -2,11 +2,21 @@
# www.blender.org
mtllib plane.mtl
o Plane
-v 100.000000 0.000000 -100.000000
-v 100.000000 0.000000 100.000000
-v -100.000000 0.000000 100.000000
-v -100.000000 0.000000 -100.000000
+v 100.000000 -100.000000 0.000000
+v 100.000000 100.000000 0.000000
+v -100.000000 100.000000 0.000000
+v -100.000000 -100.000000 0.000000
+
+vt 100.000000 0.000000
+vt 100.000000 100.000000
+vt 0.000000 100.000000
+vt 0.000000 0.000000
+
+
+
usemtl Material
s off
-f 3 2 1
-f 4 3 1
+f 1/1 2/2 3/3
+f 1/1 3/3 4/4
+
+
diff --git a/data/plane100.urdf b/data/plane100.urdf
new file mode 100644
index 000000000..1c6a01cc6
--- /dev/null
+++ b/data/plane100.urdf
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/CommonInterfaces/CommonExampleInterface.h b/examples/CommonInterfaces/CommonExampleInterface.h
index f3fb20047..14d19ec3d 100644
--- a/examples/CommonInterfaces/CommonExampleInterface.h
+++ b/examples/CommonInterfaces/CommonExampleInterface.h
@@ -46,6 +46,8 @@ public:
virtual bool mouseButtonCallback(int button, int state, float x, float y)=0;
virtual bool keyboardCallback(int key, int state)=0;
+ virtual void vrControllerMoveCallback(int controllerId, float pos[4], float orientation[4]) {}
+ virtual void vrControllerButtonCallback(int controllerId, int button, int state, float pos[4], float orientation[4]){}
};
class ExampleEntries
diff --git a/examples/ExampleBrowser/ExampleEntries.cpp b/examples/ExampleBrowser/ExampleEntries.cpp
index 5682275ce..c5901ca34 100644
--- a/examples/ExampleBrowser/ExampleEntries.cpp
+++ b/examples/ExampleBrowser/ExampleEntries.cpp
@@ -187,7 +187,7 @@ static ExampleEntry gDefaultExamples[]=
#endif //INCLUDE_CLOTH_DEMOS
///we disable the benchmarks in debug mode, they are way too slow and benchmarking in debug mode is not recommended
-#ifndef _DEBUG
+//#ifndef _DEBUG
ExampleEntry(0,"Benchmarks"),
ExampleEntry(1,"3000 boxes", "Benchmark a stack of 3000 boxes. It will stress the collision detection, a specialized box-box implementation based on the separating axis test, and the constraint solver. ", BenchmarkCreateFunc, 1),
ExampleEntry(1,"1000 stack", "Benchmark a stack of 3000 boxes. It will stress the collision detection, a specialized box-box implementation based on the separating axis test, and the constraint solver. ",
@@ -197,7 +197,7 @@ static ExampleEntry gDefaultExamples[]=
ExampleEntry(1,"Prim vs Mesh", "Benchmark the performance and stability of rigid bodies using primitive collision shapes (btSphereShape, btBoxShape), resting on a triangle mesh, btBvhTriangleMeshShape.", BenchmarkCreateFunc, 5),
ExampleEntry(1,"Convex vs Mesh", "Benchmark the performance and stability of rigid bodies using convex hull collision shapes (btConvexHullShape), resting on a triangle mesh, btBvhTriangleMeshShape.", BenchmarkCreateFunc, 6),
ExampleEntry(1,"Raycast", "Benchmark the performance of the btCollisionWorld::rayTest. Note that currently the rays are not rendered.", BenchmarkCreateFunc, 7),
-#endif
+//#endif
diff --git a/examples/OpenGLWindow/GLInstancingRenderer.cpp b/examples/OpenGLWindow/GLInstancingRenderer.cpp
index 64503dcc3..e9c5e38fa 100644
--- a/examples/OpenGLWindow/GLInstancingRenderer.cpp
+++ b/examples/OpenGLWindow/GLInstancingRenderer.cpp
@@ -16,9 +16,9 @@ subject to the following restrictions:
///todo: make this configurable in the gui
-bool useShadowMap=true;//false;//true;
+bool useShadowMap = true;// true;//false;//true;
int shadowMapWidth=4096;//8192;
-int shadowMapHeight=4096;
+int shadowMapHeight= 4096;
float shadowMapWorldSize=25;
#define MAX_POINTS_IN_BATCH 1024
@@ -363,7 +363,7 @@ void GLInstancingRenderer::writeSingleInstanceScaleToCPU(double* scale, int srcI
void GLInstancingRenderer::writeSingleInstanceTransformToGPU(float* position, float* orientation, int objectIndex)
{
glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo);
- glFlush();
+ //glFlush();
char* orgBase = (char*)glMapBuffer( GL_ARRAY_BUFFER,GL_READ_WRITE);
//b3GraphicsInstance* gfxObj = m_graphicsInstances[k];
@@ -393,7 +393,7 @@ void GLInstancingRenderer::writeSingleInstanceTransformToGPU(float* position, fl
orientations [objectIndex*4+3] = orientation[3];
glUnmapBuffer( GL_ARRAY_BUFFER);
- glFlush();
+ //glFlush();
}
@@ -500,7 +500,7 @@ void GLInstancingRenderer::writeTransforms()
glUnmapBuffer( GL_ARRAY_BUFFER);
//if this glFinish is removed, the animation is not always working/blocks
//@todo: figure out why
- glFlush();
+ //glFlush();
#endif
@@ -1037,7 +1037,7 @@ void GLInstancingRenderer::renderScene()
//avoid some Intel driver on a Macbook Pro to lock-up
//todo: figure out what is going on on that machine
- glFlush();
+ //glFlush();
if (useShadowMap)
{
@@ -1539,7 +1539,7 @@ b3Assert(glGetError() ==GL_NO_ERROR);
B3_PROFILE("glFlush2");
glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo);
- glFlush();
+ //glFlush();
}
b3Assert(glGetError() ==GL_NO_ERROR);
@@ -1730,7 +1730,7 @@ b3Assert(glGetError() ==GL_NO_ERROR);
{
B3_PROFILE("glFlush");
- glFlush();
+ //glFlush();
}
if (renderMode==B3_CREATE_SHADOWMAP_RENDERMODE)
{
diff --git a/examples/SharedMemory/PhysicsClientC_API.cpp b/examples/SharedMemory/PhysicsClientC_API.cpp
index 5a728b0cb..1ff24b66c 100644
--- a/examples/SharedMemory/PhysicsClientC_API.cpp
+++ b/examples/SharedMemory/PhysicsClientC_API.cpp
@@ -115,6 +115,15 @@ int b3PhysicsParamSetGravity(b3SharedMemoryCommandHandle commandHandle, doub
return 0;
}
+int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation)
+{
+ struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
+ b3Assert(command->m_type == CMD_SEND_PHYSICS_SIMULATION_PARAMETERS);
+ command->m_physSimParamArgs.m_allowRealTimeSimulation = enableRealTimeSimulation;
+ command->m_updateFlags |= SIM_PARAM_UPDATE_REAL_TIME_SIMULATION;
+ return 0;
+}
+
int b3PhysicsParamSetTimeStep(b3SharedMemoryCommandHandle commandHandle, double timeStep)
{
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*) commandHandle;
diff --git a/examples/SharedMemory/PhysicsClientC_API.h b/examples/SharedMemory/PhysicsClientC_API.h
index dcbe9c30c..a3b6dbd5c 100644
--- a/examples/SharedMemory/PhysicsClientC_API.h
+++ b/examples/SharedMemory/PhysicsClientC_API.h
@@ -81,6 +81,7 @@ void b3GetCameraImageData(b3PhysicsClientHandle physClient, struct b3CameraImage
b3SharedMemoryCommandHandle b3InitPhysicsParamCommand(b3PhysicsClientHandle physClient);
int b3PhysicsParamSetGravity(b3SharedMemoryCommandHandle commandHandle, double gravx,double gravy, double gravz);
int b3PhysicsParamSetTimeStep(b3SharedMemoryCommandHandle commandHandle, double timeStep);
+int b3PhysicsParamSetRealTimeSimulation(b3SharedMemoryCommandHandle commandHandle, int enableRealTimeSimulation);
b3SharedMemoryCommandHandle b3InitStepSimulationCommand(b3PhysicsClientHandle physClient);
diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
index 5c82e3381..420fe37b6 100644
--- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
+++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
@@ -374,6 +374,8 @@ struct PhysicsServerCommandProcessorInternalData
///end handle management
+ bool m_allowRealTimeSimulation;
+ bool m_hasGround;
CommandLogger* m_commandLogger;
CommandLogPlayback* m_logPlayback;
@@ -417,7 +419,8 @@ struct PhysicsServerCommandProcessorInternalData
TinyRendererVisualShapeConverter m_visualConverter;
PhysicsServerCommandProcessorInternalData()
- :
+ :m_hasGround(false),
+ m_allowRealTimeSimulation(false),
m_commandLogger(0),
m_logPlayback(0),
m_physicsDeltaTime(1./240.),
@@ -496,6 +499,9 @@ void PhysicsServerCommandProcessor::setGuiHelper(struct GUIHelperInterface* guiH
}
}
m_data->m_guiHelper = guiHelper;
+
+
+
}
@@ -504,6 +510,7 @@ PhysicsServerCommandProcessor::PhysicsServerCommandProcessor()
m_data = new PhysicsServerCommandProcessorInternalData();
createEmptyDynamicsWorld();
+
}
PhysicsServerCommandProcessor::~PhysicsServerCommandProcessor()
@@ -983,7 +990,7 @@ int PhysicsServerCommandProcessor::createBodyInfoStream(int bodyUniqueId, char*
bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryCommand& clientCmd, struct SharedMemoryStatus& serverStatusOut, char* bufferServerToClient, int bufferSizeInBytes )
{
-
+
bool hasStatus = false;
{
@@ -1768,6 +1775,10 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
{
m_data->m_physicsDeltaTime = clientCmd.m_physSimParamArgs.m_deltaTime;
}
+ if (clientCmd.m_updateFlags & SIM_PARAM_UPDATE_REAL_TIME_SIMULATION)
+ {
+ m_data->m_allowRealTimeSimulation = clientCmd.m_physSimParamArgs.m_allowRealTimeSimulation;
+ }
if (clientCmd.m_updateFlags&SIM_PARAM_UPDATE_GRAVITY)
{
btVector3 grav(clientCmd.m_physSimParamArgs.m_gravityAcceleration[0],
@@ -1873,7 +1884,7 @@ bool PhysicsServerCommandProcessor::processCommand(const struct SharedMemoryComm
SharedMemoryStatus& serverCmd =serverStatusOut;
serverCmd.m_type = CMD_RESET_SIMULATION_COMPLETED;
hasStatus = true;
-
+ m_data->m_hasGround = false;
break;
}
case CMD_CREATE_RIGID_BODY:
@@ -2307,6 +2318,26 @@ void PhysicsServerCommandProcessor::replayFromLogFile(const char* fileName)
m_data->m_logPlayback = pb;
}
+void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec)
+{
+ if (m_data->m_allowRealTimeSimulation)
+ {
+ if (!m_data->m_hasGround)
+ {
+ m_data->m_hasGround = true;
+
+ int bodyId = 0;
+ btAlignedObjectArray bufferServerToClient;
+ bufferServerToClient.resize(32768);
+
+
+ loadUrdf("plane.urdf", btVector3(0, 0, 0), btQuaternion(0, 0, 0, 1), true, true, &bodyId, &bufferServerToClient[0], bufferServerToClient.size());
+ }
+
+ m_data->m_dynamicsWorld->stepSimulation(dtInSec);
+ }
+}
+
void PhysicsServerCommandProcessor::applyJointDamping(int bodyUniqueId)
{
InteralBodyData* body = m_data->getHandle(bodyUniqueId);
diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.h b/examples/SharedMemory/PhysicsServerCommandProcessor.h
index bc74a0a27..7cbc87ab4 100644
--- a/examples/SharedMemory/PhysicsServerCommandProcessor.h
+++ b/examples/SharedMemory/PhysicsServerCommandProcessor.h
@@ -53,7 +53,8 @@ public:
void enableCommandLogging(bool enable, const char* fileName);
void replayFromLogFile(const char* fileName);
- void replayLogCommand(char* bufferServerToClient, int bufferSizeInBytes );
+ void replayLogCommand(char* bufferServerToClient, int bufferSizeInBytes );
+ void stepSimulationRealTime(double dtInSec);
void applyJointDamping(int bodyUniqueId);
};
diff --git a/examples/SharedMemory/PhysicsServerExample.cpp b/examples/SharedMemory/PhysicsServerExample.cpp
index a4ac05f67..6ae9a654d 100644
--- a/examples/SharedMemory/PhysicsServerExample.cpp
+++ b/examples/SharedMemory/PhysicsServerExample.cpp
@@ -9,11 +9,12 @@
#include "PhysicsServerSharedMemory.h"
#include "SharedMemoryCommon.h"
-
+#include "Bullet3Common/b3Matrix3x3.h"
#include "../Utils/b3Clock.h"
#include "../MultiThreading/b3ThreadSupportInterface.h"
+
void MotionThreadFunc(void* userPtr,void* lsMemory);
void* MotionlsMemoryFunc();
#define MAX_MOTION_NUM_THREADS 1
@@ -80,13 +81,23 @@ b3ThreadSupportInterface* createMotionThreadSupport(int numThreads)
struct MotionArgs
{
MotionArgs()
- :m_physicsServerPtr(0)
+ :m_physicsServerPtr(0),
+ m_isPicking(false),
+ m_isDragging(false),
+ m_isReleasing(false)
{
}
b3CriticalSection* m_cs;
PhysicsServerSharedMemory* m_physicsServerPtr;
b3AlignedObjectArray m_positions;
+
+ btVector3 m_pos;
+ btQuaternion m_orn;
+ bool m_isPicking;
+ bool m_isDragging;
+ bool m_isReleasing;
+
};
struct MotionThreadLocalStorage
@@ -113,23 +124,58 @@ void MotionThreadFunc(void* userPtr,void* lsMemory)
args->m_cs->setSharedParam(0,eMotionIsInitialized);
args->m_cs->unlock();
+
do
{
//todo(erwincoumans): do we want some sleep to reduce CPU resources in this thread?
-#if 0
+
double deltaTimeInSeconds = double(clock.getTimeMicroseconds())/1000000.;
- if (deltaTimeInSeconds<(1./260.))
+ if (deltaTimeInSeconds<(1./5000.))
{
skip++;
- if (deltaTimeInSeconds<.001)
- continue;
+ } else
+ {
+ //process special controller commands, such as
+ //VR controller button press/release and controller motion
+
+ btVector3 from = args->m_pos;
+ btMatrix3x3 mat(args->m_orn);
+
+ btVector3 toX = args->m_pos+mat.getColumn(0);
+ btVector3 toY = args->m_pos+mat.getColumn(1);
+ btVector3 toZ = args->m_pos+mat.getColumn(2)*50.;
+
+
+ if (args->m_isPicking)
+ {
+ args->m_isPicking = false;
+ args->m_isDragging = true;
+ args->m_physicsServerPtr->pickBody(from,-toZ);
+ //printf("PICK!\n");
+ }
+
+ if (args->m_isDragging)
+ {
+ args->m_physicsServerPtr->movePickedBody(from,-toZ);
+ // printf(".");
+ }
+
+ if (args->m_isReleasing)
+ {
+ args->m_isDragging = false;
+ args->m_isReleasing = false;
+ args->m_physicsServerPtr->removePickingConstraint();
+ //printf("Release pick\n");
+ }
+
+ //don't simulate over a huge timestep if we had some interruption (debugger breakpoint etc)
+ btClamp(deltaTimeInSeconds,0.,0.1);
+ args->m_physicsServerPtr->stepSimulationRealTime(deltaTimeInSeconds);
+ clock.reset();
}
- clock.reset();
-#endif
args->m_physicsServerPtr->processClientCommands();
-
} while (args->m_cs->getSharedParam(0)!=eRequestTerminateMotion);
} else
{
@@ -375,7 +421,7 @@ class PhysicsServerExample : public SharedMemoryCommon
btClock m_clock;
bool m_replay;
int m_options;
-
+
public:
PhysicsServerExample(MultiThreadedOpenGLGuiHelper* helper, SharedMemoryInterface* sharedMem=0, int options=0);
@@ -417,6 +463,9 @@ public:
btVector3 getRayTo(int x,int y);
+ virtual void vrControllerButtonCallback(int controllerId, int button, int state, float pos[4], float orientation[4]);
+ virtual void vrControllerMoveCallback(int controllerId, float pos[4], float orientation[4]);
+
virtual bool mouseMoveCallback(float x,float y)
{
if (m_replay)
@@ -720,6 +769,28 @@ void PhysicsServerExample::renderScene()
//m_args[0].m_cs->lock();
m_physicsServer.renderScene();
+
+ if (m_args[0].m_isPicking || m_args[0].m_isDragging)
+ {
+ btVector3 from = m_args[0].m_pos;
+ btMatrix3x3 mat(m_args[0].m_orn);
+
+ btVector3 toX = m_args[0].m_pos+mat.getColumn(0);
+ btVector3 toY = m_args[0].m_pos+mat.getColumn(1);
+ btVector3 toZ = m_args[0].m_pos+mat.getColumn(2);
+
+ int width = 2;
+
+
+ btVector4 color;
+ color=btVector4(1,0,0,1);
+ m_guiHelper->getAppInterface()->m_renderer->drawLine(from,toX,color,width);
+ color=btVector4(0,1,0,1);
+ m_guiHelper->getAppInterface()->m_renderer->drawLine(from,toY,color,width);
+ color=btVector4(0,0,1,1);
+ m_guiHelper->getAppInterface()->m_renderer->drawLine(from,toZ,color,width);
+
+ }
if (m_guiHelper->getAppInterface()->m_renderer->getActiveCamera()->isVRCamera())
{
@@ -856,4 +927,17 @@ class CommonExampleInterface* PhysicsServerCreateFunc(struct CommonExampleOpt
}
-B3_STANDALONE_EXAMPLE(PhysicsServerCreateFunc)
\ No newline at end of file
+void PhysicsServerExample::vrControllerButtonCallback(int controllerId, int button, int state, float pos[4], float orn[4])
+{
+ m_args[0].m_isPicking = (state!=0);
+ m_args[0].m_isReleasing = (state==0);
+ m_args[0].m_pos.setValue(pos[0],pos[1],pos[2]);
+ m_args[0].m_orn.setValue(orn[0],orn[1],orn[2],orn[3]);
+}
+
+void PhysicsServerExample::vrControllerMoveCallback(int controllerId, float pos[4], float orn[4])
+{
+ m_args[0].m_pos.setValue(pos[0],pos[1],pos[2]);
+ m_args[0].m_orn.setValue(orn[0],orn[1],orn[2],orn[3]);
+}
+B3_STANDALONE_EXAMPLE(PhysicsServerCreateFunc)
diff --git a/examples/SharedMemory/PhysicsServerSharedMemory.cpp b/examples/SharedMemory/PhysicsServerSharedMemory.cpp
index d0b583969..111ac07f5 100644
--- a/examples/SharedMemory/PhysicsServerSharedMemory.cpp
+++ b/examples/SharedMemory/PhysicsServerSharedMemory.cpp
@@ -236,8 +236,10 @@ void PhysicsServerSharedMemory::releaseSharedMemory()
}
-
-
+void PhysicsServerSharedMemory::stepSimulationRealTime(double dtInSec)
+{
+ m_data->m_commandProcessor->stepSimulationRealTime(dtInSec);
+}
void PhysicsServerSharedMemory::processClientCommands()
diff --git a/examples/SharedMemory/PhysicsServerSharedMemory.h b/examples/SharedMemory/PhysicsServerSharedMemory.h
index 2c08124d0..f96e7ca4b 100644
--- a/examples/SharedMemory/PhysicsServerSharedMemory.h
+++ b/examples/SharedMemory/PhysicsServerSharedMemory.h
@@ -26,6 +26,8 @@ public:
virtual void processClientCommands();
+ virtual void stepSimulationRealTime(double dtInSec);
+
//bool supportsJointMotor(class btMultiBody* body, int linkIndex);
//@todo(erwincoumans) Should we have shared memory commands for picking objects?
diff --git a/examples/SharedMemory/SharedMemoryCommands.h b/examples/SharedMemory/SharedMemoryCommands.h
index d5b50d2ba..64ae61991 100644
--- a/examples/SharedMemory/SharedMemoryCommands.h
+++ b/examples/SharedMemory/SharedMemoryCommands.h
@@ -215,6 +215,7 @@ enum EnumSimParamUpdateFlags
SIM_PARAM_UPDATE_GRAVITY=2,
SIM_PARAM_UPDATE_NUM_SOLVER_ITERATIONS=4,
SIM_PARAM_UPDATE_NUM_SIMULATION_SUB_STEPS=8,
+ SIM_PARAM_UPDATE_REAL_TIME_SIMULATION = 16,
};
///Controlling a robot involves sending the desired state to its joint motor controllers.
@@ -225,6 +226,7 @@ struct SendPhysicsSimulationParameters
double m_gravityAcceleration[3];
int m_numSimulationSubSteps;
int m_numSolverIterations;
+ bool m_allowRealTimeSimulation;
};
struct RequestActualStateArgs
diff --git a/examples/StandaloneMain/hellovr_opengl_main.cpp b/examples/StandaloneMain/hellovr_opengl_main.cpp
index dcb7aa22f..630c2d3e8 100644
--- a/examples/StandaloneMain/hellovr_opengl_main.cpp
+++ b/examples/StandaloneMain/hellovr_opengl_main.cpp
@@ -4,6 +4,8 @@
#include "../OpenGLWindow/SimpleOpenGL3App.h"
#include "../OpenGLWindow/OpenGLInclude.h"
#include "Bullet3Common/b3Quaternion.h"
+#include "Bullet3Common/b3Transform.h"
+
#include "../ExampleBrowser/OpenGLGuiHelper.h"
#include "../CommonInterfaces/CommonExampleInterface.h"
#include "../CommonInterfaces/CommonGUIHelperInterface.h"
@@ -28,6 +30,8 @@ int gSharedMemoryKey = -1;
#include "pathtools.h"
CommonExampleInterface* sExample;
+int sIsPressed=-1;
+int sPrevPacketNum=0;
GUIHelperInterface* sGuiPtr = 0;
@@ -82,7 +86,7 @@ public:
bool BInit();
bool BInitGL();
bool BInitCompositor();
-
+ void getControllerTransform(int unDevice, b3Transform& tr);
void SetupRenderModels();
void Shutdown();
@@ -619,6 +623,26 @@ void CMainApplication::Shutdown()
}
+
+void CMainApplication::getControllerTransform(int unDevice, b3Transform& tr)
+{
+ const Matrix4 & matOrg = m_rmat4DevicePose[unDevice];
+ tr.setIdentity();
+ tr.setOrigin(b3MakeVector3(matOrg[12],matOrg[13],matOrg[14]));//pos[1]));
+ b3Matrix3x3 bmat;
+ for (int i=0;i<3;i++)
+ {
+ for (int j=0;j<3;j++)
+ {
+ bmat[i][j] = matOrg[i+4*j];
+ }
+ }
+ tr.setBasis(bmat);
+ b3Transform y2z;
+ y2z.setIdentity();
+ y2z.setRotation(b3Quaternion(0,B3_HALF_PI,0));
+ tr = y2z*tr;
+}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
@@ -639,14 +663,61 @@ bool CMainApplication::HandleInput()
vr::VRControllerState_t state;
if( m_pHMD->GetControllerState( unDevice, &state ) )
{
- if (state.ulButtonPressed)
+ uint64_t trigger = vr::ButtonMaskFromId(vr::k_EButton_SteamVR_Trigger);
+
+ if (sPrevPacketNum != state.unPacketNum)
{
- b3Printf("state.ulButtonPressed=%d\n",state.ulButtonPressed);
- sExample->exitPhysics();
- m_app->m_instancingRenderer->removeAllInstances();
- sExample->initPhysics();
+
+ static int counter=0;
+ sPrevPacketNum = state.unPacketNum;
+ //b3Printf(".");
+ bool isTrigger = (state.ulButtonPressed&trigger)!=0;
+ if (isTrigger)
+ {
+ //printf("unDevice=%d\n",unDevice);
+ b3Transform tr;
+ getControllerTransform(unDevice,tr);
+ float pos[3] = {tr.getOrigin()[0],tr.getOrigin()[1],tr.getOrigin()[2]};
+ b3Quaternion born = tr.getRotation();
+ float orn[4] = {born[0],born[1],born[2],born[3]};
+
+
+ if (sIsPressed!=unDevice)
+ {
+ b3Printf("trigger pressed %d, %d\n",counter++, unDevice);
+ sIsPressed=unDevice;
+
+ sExample->vrControllerButtonCallback(unDevice,1,1,pos, orn);
+
+ //
+ //virtual void vrControllerMoveCallback(int controllerId, float pos[4], float orientation[4]) {}
+ //virtual void vrControllerButtonCallback(int controllerId, int button, int state, float pos[4], float orientation[4]){}
+
+ //sExample->start
+ } else
+ {
+ sExample->vrControllerMoveCallback(unDevice,pos,orn);
+ }
+ //sExample->exitPhysics();
+ //m_app->m_instancingRenderer->removeAllInstances();
+ ///sExample->initPhysics();
+ } else
+ {
+ if (unDevice==sIsPressed)
+ {
+ b3Transform tr;
+ getControllerTransform(unDevice,tr);
+ float pos[3] = {tr.getOrigin()[0],tr.getOrigin()[1],tr.getOrigin()[2]};
+ b3Quaternion born = tr.getRotation();
+ float orn[4] = {born[0],born[1],born[2],born[3]};
+
+ sIsPressed=-1;
+ printf("device released: %d",unDevice);
+ sExample->vrControllerButtonCallback(unDevice,1,0,pos, orn);
+ }
+ }
+ }
- }
m_rbShowTrackedDevice[ unDevice ] = state.ulButtonPressed == 0;
}
}
@@ -1480,7 +1551,7 @@ void CMainApplication::RenderStereoTargets()
rotYtoZ.rotateX(-90);
}
- RenderScene( vr::Eye_Left );
+
// Left Eye
{
@@ -1527,7 +1598,7 @@ void CMainApplication::RenderStereoTargets()
m_app->m_window->startRendering();
-
+ RenderScene( vr::Eye_Left );
@@ -1560,7 +1631,7 @@ void CMainApplication::RenderStereoTargets()
// Right Eye
- RenderScene( vr::Eye_Right );
+
{
Matrix4 viewMatRight = m_mat4eyePosRight * m_mat4HMDPose * rotYtoZ;
@@ -1573,7 +1644,7 @@ void CMainApplication::RenderStereoTargets()
m_app->m_window->startRendering();
-
+ RenderScene( vr::Eye_Right );
m_app->m_instancingRenderer->setRenderFrameBuffer((unsigned int)rightEyeDesc.m_nRenderFramebufferId);
//m_app->m_renderer->renderScene();
diff --git a/examples/Utils/b3ResourcePath.cpp b/examples/Utils/b3ResourcePath.cpp
index 44952d61a..bc50ef5cb 100644
--- a/examples/Utils/b3ResourcePath.cpp
+++ b/examples/Utils/b3ResourcePath.cpp
@@ -33,8 +33,10 @@ int b3ResourcePath::getExePath(char* path, int maxPathLenInBytes)
#else
#ifdef _WIN32
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx
+
HMODULE hModule = GetModuleHandle(NULL);
- numBytes = GetModuleFileName(hModule, path, maxPathLenInBytes);
+ numBytes = GetModuleFileNameA(hModule, path, maxPathLenInBytes);
+
#else
///http://stackoverflow.com/questions/933850/how-to-find-the-location-of-the-executable-in-c
numBytes = (int)readlink("/proc/self/exe", path, maxPathLenInBytes-1);
diff --git a/examples/pybullet/pybullet.c b/examples/pybullet/pybullet.c
index 2a2d9b2d1..be5994c16 100644
--- a/examples/pybullet/pybullet.c
+++ b/examples/pybullet/pybullet.c
@@ -410,6 +410,41 @@ static PyObject* pybullet_setJointMotorControl(PyObject* self, PyObject* args)
}
+
+static PyObject *
+pybullet_setRealTimeSimulation(PyObject* self, PyObject* args)
+{
+ if (0 == sm)
+ {
+ PyErr_SetString(SpamError, "Not connected to physics server.");
+ return NULL;
+ }
+
+ {
+ int enableRealTimeSimulation = 0;
+ int ret;
+
+ b3SharedMemoryCommandHandle command = b3InitPhysicsParamCommand(sm);
+ b3SharedMemoryStatusHandle statusHandle;
+
+ if (!PyArg_ParseTuple(args, "i", &enableRealTimeSimulation))
+ {
+ PyErr_SetString(SpamError, "setRealTimeSimulation expected a single value (integer).");
+ return NULL;
+ }
+ ret = b3PhysicsParamSetRealTimeSimulation(command, enableRealTimeSimulation);
+
+ statusHandle = b3SubmitClientCommandAndWaitStatus(sm, command);
+ //ASSERT_EQ(b3GetStatusType(statusHandle), CMD_CLIENT_COMMAND_COMPLETED);
+ }
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
+
+
// Set the gravity of the world with (x, y, z) arguments
static PyObject *
pybullet_setGravity(PyObject* self, PyObject* args)
@@ -1453,6 +1488,9 @@ static PyMethodDef SpamMethods[] = {
{"setTimeStep", pybullet_setTimeStep, METH_VARARGS,
"Set the amount of time to proceed at each call to stepSimulation. (unit is seconds, typically range is 0.01 or 0.001)"},
+ { "setRealTimeSimulation", pybullet_setRealTimeSimulation, METH_VARARGS,
+ "Enable or disable real time simulation (using the real time clock, RTC) in the physics server. Expects one integer argument, 0 or 1" },
+
{"loadURDF", pybullet_loadURDF, METH_VARARGS,
"Create a multibody by loading a URDF file."},
diff --git a/src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp b/src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp
index 264c7b9f0..369f1d750 100644
--- a/src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp
+++ b/src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp
@@ -636,10 +636,10 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev
FILETIME modtimeBinary;
- CreateDirectory(sCachedBinaryPath,0);
+ CreateDirectoryA(sCachedBinaryPath,0);
{
- HANDLE binaryFileHandle = CreateFile(binaryFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
+ HANDLE binaryFileHandle = CreateFileA(binaryFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (binaryFileHandle ==INVALID_HANDLE_VALUE)
{
DWORD errorCode;
@@ -677,7 +677,7 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev
if (binaryFileValid)
{
- HANDLE srcFileHandle = CreateFile(clFileNameForCaching,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
+ HANDLE srcFileHandle = CreateFileA(clFileNameForCaching,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (srcFileHandle==INVALID_HANDLE_VALUE)
{
@@ -686,7 +686,7 @@ cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_dev
{
char relativeFileName[1024];
sprintf(relativeFileName,"%s%s",prefix[i],clFileNameForCaching);
- srcFileHandle = CreateFile(relativeFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
+ srcFileHandle = CreateFileA(relativeFileName,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
}
}
diff --git a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
index e90d06eb1..93d842ef5 100644
--- a/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
+++ b/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
@@ -26,14 +26,16 @@ class btDispatcher;
#include "btCollisionCreateFunc.h"
///For each triangle in the concave mesh that overlaps with the AABB of a convex (m_convexProxy), processTriangle is called.
-class btConvexTriangleCallback : public btTriangleCallback
+ATTRIBUTE_ALIGNED16(class) btConvexTriangleCallback : public btTriangleCallback
{
- const btCollisionObjectWrapper* m_convexBodyWrap;
- const btCollisionObjectWrapper* m_triBodyWrap;
btVector3 m_aabbMin;
btVector3 m_aabbMax ;
+ const btCollisionObjectWrapper* m_convexBodyWrap;
+ const btCollisionObjectWrapper* m_triBodyWrap;
+
+
btManifoldResult* m_resultOut;
btDispatcher* m_dispatcher;
@@ -41,6 +43,8 @@ class btConvexTriangleCallback : public btTriangleCallback
btScalar m_collisionMarginTriangle;
public:
+ BT_DECLARE_ALIGNED_ALLOCATOR();
+
int m_triangleCount;
btPersistentManifold* m_manifoldPtr;
@@ -75,17 +79,19 @@ int m_triangleCount;
/// btConvexConcaveCollisionAlgorithm supports collision between convex shapes and (concave) trianges meshes.
-class btConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm
+ATTRIBUTE_ALIGNED16(class) btConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm
{
- bool m_isSwapped;
-
btConvexTriangleCallback m_btConvexTriangleCallback;
+ bool m_isSwapped;
+
public:
+ BT_DECLARE_ALIGNED_ALLOCATOR();
+
btConvexConcaveCollisionAlgorithm( const btCollisionAlgorithmConstructionInfo& ci,const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap,bool isSwapped);
virtual ~btConvexConcaveCollisionAlgorithm();
diff --git a/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp b/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
index d42f00a63..9a2e3394d 100644
--- a/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
+++ b/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
@@ -123,6 +123,7 @@ btDefaultCollisionConfiguration::btDefaultCollisionConfiguration(const btDefault
m_persistentManifoldPool = new (mem) btPoolAllocator(sizeof(btPersistentManifold),constructionInfo.m_defaultMaxPersistentManifoldPoolSize);
}
+ collisionAlgorithmMaxElementSize = (collisionAlgorithmMaxElementSize+16)&0xffffffffffff0;
if (constructionInfo.m_collisionAlgorithmPool)
{
m_ownsCollisionAlgorithmPool = false;