From e72f6b3449c39aa53da45cbe0f10207f1c1941ef Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Fri, 29 May 2020 18:32:08 +0200 Subject: [PATCH] [DEV] add base of physic engine and basic of display of aabb box... --- res/person.blend | Bin 492352 -> 594848 bytes res/person_-xfw_zup.mtl | 12 + res/person_-xfw_zup.obj | 1082 +++++++++++++++++ res/person_-yfw_zup.mtl | 12 + res/person_-yfw_zup.obj | 1082 +++++++++++++++++ res/playerTexture.png | Bin 7504 -> 10249 bytes src/org/atriaSoft/etk/Color.java | 4 + src/org/atriaSoft/etk/math/Vector3f.java | 9 +- src/org/atriaSoft/gale/backend3d/OpenGL.java | 20 +- src/org/atriaSoft/gale/context/Context.java | 8 +- .../context/LWJG_AWT/ContextLWJGL_AWT.java | 967 +++++++-------- .../resource/ResourceColored3DObject.java | 559 +++++++++ .../gale/resource/ResourceProgram.java | 102 +- .../resource/ResourceVirtualArrayObject.java | 1 + .../gameEngine/ControlCameraPlayer.java | 123 +- .../gameEngine/ControlCameraPlayerFPS.java | 128 ++ .../atriaSoft/gameEngine/Environement.java | 2 +- .../components/ComponentPhysics.java | 73 ++ .../components/ComponentPlayer.java | 20 +- .../components/ComponentPositionPlayer.java | 2 +- .../components/CoponentPhysics.java | 12 - .../atriaSoft/gameEngine/data/simple3D.frag | 16 + .../atriaSoft/gameEngine/data/simple3D.vert | 21 + .../gameEngine/engines/EnginePhysics.java | 64 +- .../atriaSoft/gameEngine/map/MapVoxel.java | 7 + .../gameEngine/physics/PhysicBox.java | 36 + .../physics/PhysicCollisionAABB.java | 74 ++ .../gameEngine/physics/PhysicMapVoxel.java | 31 + .../gameEngine/physics/PhysicShape.java | 59 + .../gameEngine/physics/PhysicShapeType.java | 13 + .../gameEngine/physics/PhysicSphere.java | 34 + .../gameEngine/sample/LoxelEngine/Log.java | 2 +- .../sample/LoxelEngine/LoxelApplication.java | 33 +- 33 files changed, 3952 insertions(+), 656 deletions(-) create mode 100644 res/person_-xfw_zup.mtl create mode 100644 res/person_-xfw_zup.obj create mode 100644 res/person_-yfw_zup.mtl create mode 100644 res/person_-yfw_zup.obj create mode 100644 src/org/atriaSoft/gale/resource/ResourceColored3DObject.java create mode 100644 src/org/atriaSoft/gameEngine/ControlCameraPlayerFPS.java create mode 100644 src/org/atriaSoft/gameEngine/components/ComponentPhysics.java delete mode 100644 src/org/atriaSoft/gameEngine/components/CoponentPhysics.java create mode 100644 src/org/atriaSoft/gameEngine/data/simple3D.frag create mode 100644 src/org/atriaSoft/gameEngine/data/simple3D.vert create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicBox.java create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicCollisionAABB.java create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicMapVoxel.java create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicShape.java create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicShapeType.java create mode 100644 src/org/atriaSoft/gameEngine/physics/PhysicSphere.java diff --git a/res/person.blend b/res/person.blend index 97edfa1f8733ab208a8ce520f898f6da6a0981c2..5c77c9d9aad979c1b61d56dc310534a1fd5d3ce3 100644 GIT binary patch literal 594848 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 I3b~vA)Y#uflNLKk=Mr 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

2*iYtlI{|t!X4d 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 diff --git a/res/person_-xfw_zup.mtl b/res/person_-xfw_zup.mtl new file mode 100644 index 0000000..036f4e5 --- /dev/null +++ b/res/person_-xfw_zup.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'person.blend' +# Material Count: 1 + +newmtl Material +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/res/person_-xfw_zup.obj b/res/person_-xfw_zup.obj new file mode 100644 index 0000000..625c34a --- /dev/null +++ b/res/person_-xfw_zup.obj @@ -0,0 +1,1082 @@ +# Blender v2.82 (sub 7) OBJ File: 'person.blend' +# www.blender.org +mtllib person_-xfw_zup.mtl +o Cube +v -0.140106 0.137915 1.371506 +v 0.159643 0.137915 1.371506 +v 0.159643 -0.134483 1.371506 +v -0.140106 -0.134483 1.371506 +v -0.140106 0.137915 1.690793 +v 0.159643 0.137915 1.690793 +v 0.159643 -0.134483 1.690793 +v -0.140106 -0.134483 1.690793 +v -0.107544 0.245470 1.159527 +v 0.137664 0.182522 1.164427 +v 0.137664 -0.179090 1.164427 +v -0.107544 -0.242038 1.159527 +v -0.107544 0.245470 1.322872 +v 0.154759 0.182522 1.298842 +v 0.154759 -0.179090 1.298842 +v -0.107544 -0.242038 1.322872 +v -0.109407 0.194088 0.942349 +v 0.111849 0.194088 0.942349 +v 0.111849 -0.190656 0.942349 +v -0.109407 -0.190656 0.942349 +v -0.109407 0.194088 1.128210 +v 0.111849 0.194088 1.128210 +v 0.111849 -0.190656 1.128210 +v -0.109407 -0.190656 1.128210 +v -0.084985 0.194088 0.716899 +v 0.083357 0.194088 0.720969 +v 0.083357 -0.190656 0.720969 +v -0.084985 -0.190656 0.716899 +v -0.109407 0.194088 0.892585 +v 0.103709 0.194088 0.892585 +v 0.103708 -0.190656 0.892585 +v -0.109407 -0.190656 0.892585 +v -0.069651 -0.172616 0.682076 +v 0.052053 -0.172616 0.682076 +v 0.052053 -0.042927 0.682076 +v -0.069651 -0.042926 0.682076 +v -0.045307 -0.173759 0.399351 +v 0.045307 -0.173759 0.399351 +v 0.045307 -0.071915 0.399351 +v -0.045307 -0.071915 0.399351 +v -0.019392 0.254310 0.656924 +v 0.019795 0.272794 0.656135 +v 0.019795 0.379026 0.656135 +v -0.019392 0.381202 0.656924 +v 0.038805 0.280992 0.690410 +v -0.037009 0.280992 0.690410 +v -0.037009 0.368588 0.690410 +v 0.038805 0.368588 0.690410 +v 0.038805 0.280992 0.947029 +v -0.037009 0.280992 0.947029 +v -0.037009 0.368588 0.947029 +v 0.038805 0.368588 0.947029 +v 0.046205 0.264044 0.971325 +v -0.044409 0.264044 0.971325 +v -0.044409 0.378502 0.971325 +v 0.046205 0.378502 0.971325 +v 0.046205 0.264044 1.278038 +v -0.044409 0.264044 1.278038 +v -0.044409 0.378502 1.278038 +v 0.046205 0.378502 1.278038 +v 0.151134 -0.142852 0.053860 +v 0.151134 -0.101650 0.053860 +v 0.151134 -0.142852 0.001768 +v 0.151134 -0.101650 0.001768 +v -0.045307 -0.068399 0.107456 +v 0.045307 -0.068399 0.107456 +v 0.045307 -0.170242 0.107456 +v -0.045307 -0.170242 0.107456 +v -0.045307 -0.068399 0.373509 +v 0.045307 -0.068399 0.373509 +v 0.045307 -0.170242 0.373509 +v -0.045307 -0.170242 0.373509 +v -0.045307 -0.074260 -0.000749 +v 0.037166 -0.074260 -0.000749 +v 0.037166 -0.170242 -0.000749 +v -0.045307 -0.170242 -0.000749 +v -0.045307 -0.074260 0.080799 +v 0.037166 -0.074260 0.080799 +v 0.037166 -0.170242 0.080799 +v -0.045307 -0.170242 0.080799 +v -0.045307 -0.375545 1.280073 +v 0.045307 -0.375545 1.280073 +v 0.045307 -0.261087 1.280073 +v -0.045307 -0.261087 1.280073 +v -0.045307 -0.375545 0.973359 +v 0.045307 -0.375545 0.973359 +v 0.045307 -0.261087 0.973359 +v -0.045307 -0.261087 0.973359 +v -0.037907 -0.365631 0.949064 +v 0.037907 -0.365631 0.949064 +v 0.037907 -0.278035 0.949064 +v -0.037907 -0.278035 0.949064 +v -0.037907 -0.365631 0.692445 +v 0.037907 -0.365631 0.692445 +v 0.037907 -0.278035 0.692445 +v -0.037907 -0.278035 0.692445 +v 0.020290 -0.378245 0.658959 +v -0.018897 -0.376069 0.658170 +v -0.018897 -0.269837 0.658170 +v 0.020290 -0.251353 0.658959 +v 0.020290 -0.378245 0.553501 +v -0.016297 -0.378245 0.553501 +v -0.016297 -0.251353 0.553501 +v 0.020290 -0.251353 0.553501 +v -0.019392 0.381202 0.551466 +v 0.017195 0.381202 0.551466 +v 0.017195 0.254310 0.551466 +v -0.019392 0.254310 0.551466 +v 0.107992 0.167755 0.682076 +v -0.013712 0.167755 0.682076 +v -0.013712 0.038066 0.682076 +v 0.107992 0.038066 0.682076 +v 0.083648 0.168898 0.399351 +v -0.006966 0.168898 0.399351 +v -0.006966 0.067055 0.399351 +v 0.083648 0.067055 0.399351 +v 0.151185 0.096789 0.053860 +v 0.151185 0.137991 0.053860 +v 0.151185 0.096789 0.001768 +v 0.151185 0.137991 0.001768 +v 0.083648 0.063538 0.107456 +v -0.006966 0.063538 0.107456 +v -0.006966 0.165381 0.107456 +v 0.083648 0.165381 0.107456 +v 0.083648 0.063538 0.373509 +v -0.006966 0.063538 0.373509 +v -0.006966 0.165381 0.373509 +v 0.083648 0.165381 0.373509 +v -0.045255 0.165381 -0.000749 +v 0.037218 0.165381 -0.000749 +v 0.037218 0.069399 -0.000749 +v -0.045255 0.069399 -0.000749 +v -0.045255 0.165381 0.080799 +v 0.037218 0.165381 0.080799 +v 0.037218 0.069399 0.080799 +v -0.045255 0.069399 0.080799 +v -0.140106 0.137915 1.371506 +v -0.140106 0.137915 1.371506 +v 0.159643 0.137915 1.371506 +v 0.159643 0.137915 1.371506 +v -0.140106 -0.134483 1.371506 +v -0.140106 -0.134483 1.371506 +v -0.140106 0.137915 1.690793 +v -0.140106 0.137915 1.690793 +v 0.159643 -0.134483 1.371506 +v 0.159643 -0.134483 1.371506 +v 0.159643 0.137915 1.690793 +v 0.159643 0.137915 1.690793 +v 0.159643 -0.134483 1.690793 +v 0.159643 -0.134483 1.690793 +v -0.140106 -0.134483 1.690793 +v -0.140106 -0.134483 1.690793 +v -0.107544 0.245470 1.159527 +v -0.107544 0.245470 1.159527 +v 0.137664 0.182522 1.164427 +v 0.137664 0.182522 1.164427 +v -0.107544 -0.242038 1.159527 +v -0.107544 -0.242038 1.159527 +v -0.107544 0.245470 1.322872 +v -0.107544 0.245470 1.322872 +v 0.137664 -0.179090 1.164427 +v 0.137664 -0.179090 1.164427 +v 0.154759 0.182522 1.298842 +v 0.154759 0.182522 1.298842 +v 0.154759 -0.179090 1.298842 +v 0.154759 -0.179090 1.298842 +v -0.107544 -0.242038 1.322872 +v -0.107544 -0.242038 1.322872 +v -0.109407 0.194088 0.942349 +v -0.109407 0.194088 0.942349 +v 0.111849 0.194088 0.942349 +v 0.111849 0.194088 0.942349 +v -0.109407 -0.190656 0.942349 +v -0.109407 -0.190656 0.942349 +v -0.109407 0.194088 1.128210 +v -0.109407 0.194088 1.128210 +v 0.111849 -0.190656 0.942349 +v 0.111849 -0.190656 0.942349 +v 0.111849 0.194088 1.128210 +v 0.111849 0.194088 1.128210 +v 0.111849 -0.190656 1.128210 +v 0.111849 -0.190656 1.128210 +v -0.109407 -0.190656 1.128210 +v -0.109407 -0.190656 1.128210 +v -0.084985 0.194088 0.716899 +v -0.084985 0.194088 0.716899 +v 0.083357 0.194088 0.720969 +v 0.083357 0.194088 0.720969 +v -0.084985 -0.190656 0.716899 +v -0.084985 -0.190656 0.716899 +v -0.109407 0.194088 0.892585 +v -0.109407 0.194088 0.892585 +v 0.083357 -0.190656 0.720969 +v 0.083357 -0.190656 0.720969 +v 0.103709 0.194088 0.892585 +v 0.103709 0.194088 0.892585 +v 0.103708 -0.190656 0.892585 +v 0.103708 -0.190656 0.892585 +v -0.109407 -0.190656 0.892585 +v -0.109407 -0.190656 0.892585 +v 0.052053 -0.172616 0.682076 +v 0.052053 -0.172616 0.682076 +v -0.069651 -0.172616 0.682076 +v -0.069651 -0.172616 0.682076 +v 0.052053 -0.042927 0.682076 +v 0.052053 -0.042927 0.682076 +v -0.069651 -0.042926 0.682076 +v -0.069651 -0.042926 0.682076 +v -0.045307 -0.173759 0.399351 +v -0.045307 -0.173759 0.399351 +v 0.045307 -0.173759 0.399351 +v 0.045307 -0.173759 0.399351 +v 0.045307 -0.071915 0.399351 +v 0.045307 -0.071915 0.399351 +v -0.045307 -0.071915 0.399351 +v -0.045307 -0.071915 0.399351 +v -0.019392 0.254310 0.656924 +v -0.019392 0.254310 0.656924 +v 0.019795 0.272794 0.656135 +v 0.019795 0.272794 0.656135 +v -0.019392 0.381202 0.656924 +v -0.019392 0.381202 0.656924 +v 0.019795 0.379026 0.656135 +v 0.019795 0.379026 0.656135 +v 0.038805 0.280992 0.690410 +v 0.038805 0.280992 0.690410 +v -0.037009 0.280992 0.690410 +v -0.037009 0.280992 0.690410 +v 0.038805 0.368588 0.690410 +v 0.038805 0.368588 0.690410 +v 0.038805 0.280992 0.947029 +v 0.038805 0.280992 0.947029 +v -0.037009 0.368588 0.690410 +v -0.037009 0.368588 0.690410 +v -0.037009 0.280992 0.947029 +v -0.037009 0.280992 0.947029 +v -0.037009 0.368588 0.947029 +v -0.037009 0.368588 0.947029 +v 0.038805 0.368588 0.947029 +v 0.038805 0.368588 0.947029 +v 0.046205 0.264044 0.971325 +v 0.046205 0.264044 0.971325 +v -0.044409 0.264044 0.971325 +v -0.044409 0.264044 0.971325 +v 0.046205 0.378502 0.971325 +v 0.046205 0.378502 0.971325 +v 0.046205 0.264044 1.278038 +v 0.046205 0.264044 1.278038 +v -0.044409 0.378502 0.971325 +v -0.044409 0.378502 0.971325 +v -0.044409 0.264044 1.278038 +v -0.044409 0.264044 1.278038 +v -0.044409 0.378502 1.278038 +v -0.044409 0.378502 1.278038 +v 0.046205 0.378502 1.278038 +v 0.046205 0.378502 1.278038 +v 0.151134 -0.142852 0.001768 +v 0.151134 -0.142852 0.001768 +v 0.037166 -0.170242 -0.000749 +v 0.037166 -0.170242 -0.000749 +v 0.037166 -0.170242 -0.000749 +v 0.037166 -0.074260 -0.000749 +v 0.037166 -0.074260 -0.000749 +v 0.037166 -0.074260 -0.000749 +v 0.151134 -0.101650 0.001768 +v 0.151134 -0.101650 0.001768 +v 0.151134 -0.101650 0.053860 +v 0.151134 -0.101650 0.053860 +v 0.037166 -0.074260 0.080799 +v 0.037166 -0.074260 0.080799 +v 0.037166 -0.074260 0.080799 +v 0.037166 -0.170242 0.080799 +v 0.037166 -0.170242 0.080799 +v 0.037166 -0.170242 0.080799 +v 0.151134 -0.142852 0.053860 +v 0.151134 -0.142852 0.053860 +v -0.045307 -0.068399 0.107456 +v -0.045307 -0.068399 0.107456 +v 0.045307 -0.068399 0.107456 +v 0.045307 -0.068399 0.107456 +v -0.045307 -0.170242 0.107456 +v -0.045307 -0.170242 0.107456 +v -0.045307 -0.068399 0.373509 +v -0.045307 -0.068399 0.373509 +v 0.045307 -0.170242 0.107456 +v 0.045307 -0.170242 0.107456 +v 0.045307 -0.068399 0.373509 +v 0.045307 -0.068399 0.373509 +v 0.045307 -0.170242 0.373509 +v 0.045307 -0.170242 0.373509 +v -0.045307 -0.170242 0.373509 +v -0.045307 -0.170242 0.373509 +v -0.045307 -0.074260 -0.000749 +v -0.045307 -0.074260 -0.000749 +v -0.045307 -0.170242 -0.000749 +v -0.045307 -0.170242 -0.000749 +v -0.045307 -0.074260 0.080799 +v -0.045307 -0.074260 0.080799 +v -0.045307 -0.170242 0.080799 +v -0.045307 -0.170242 0.080799 +v 0.045307 -0.375545 1.280073 +v 0.045307 -0.375545 1.280073 +v -0.045307 -0.375545 1.280073 +v -0.045307 -0.375545 1.280073 +v 0.045307 -0.261087 1.280073 +v 0.045307 -0.261087 1.280073 +v -0.045307 -0.261087 1.280073 +v -0.045307 -0.261087 1.280073 +v -0.045307 -0.375545 0.973359 +v -0.045307 -0.375545 0.973359 +v 0.045307 -0.375545 0.973359 +v 0.045307 -0.375545 0.973359 +v 0.045307 -0.261087 0.973359 +v 0.045307 -0.261087 0.973359 +v -0.045307 -0.261087 0.973359 +v -0.045307 -0.261087 0.973359 +v 0.037907 -0.365631 0.949064 +v 0.037907 -0.365631 0.949064 +v -0.037907 -0.365631 0.949064 +v -0.037907 -0.365631 0.949064 +v 0.037907 -0.278035 0.949064 +v 0.037907 -0.278035 0.949064 +v -0.037907 -0.278035 0.949064 +v -0.037907 -0.278035 0.949064 +v -0.037907 -0.365631 0.692445 +v -0.037907 -0.365631 0.692445 +v 0.037907 -0.365631 0.692445 +v 0.037907 -0.365631 0.692445 +v 0.037907 -0.278035 0.692445 +v 0.037907 -0.278035 0.692445 +v -0.037907 -0.278035 0.692445 +v -0.037907 -0.278035 0.692445 +v -0.018897 -0.376069 0.658170 +v -0.018897 -0.376069 0.658170 +v 0.020290 -0.378245 0.658959 +v 0.020290 -0.378245 0.658959 +v -0.018897 -0.269837 0.658170 +v -0.018897 -0.269837 0.658170 +v 0.020290 -0.251353 0.658959 +v 0.020290 -0.251353 0.658959 +v 0.020290 -0.378245 0.553501 +v 0.020290 -0.378245 0.553501 +v -0.016297 -0.378245 0.553501 +v -0.016297 -0.378245 0.553501 +v -0.016297 -0.251353 0.553501 +v -0.016297 -0.251353 0.553501 +v 0.020290 -0.251353 0.553501 +v 0.020290 -0.251353 0.553501 +v -0.019392 0.381202 0.551466 +v -0.019392 0.381202 0.551466 +v 0.017195 0.381202 0.551466 +v 0.017195 0.381202 0.551466 +v 0.017195 0.254310 0.551466 +v 0.017195 0.254310 0.551466 +v -0.019392 0.254310 0.551466 +v -0.019392 0.254310 0.551466 +v -0.013712 0.167755 0.682076 +v -0.013712 0.167755 0.682076 +v 0.107992 0.167755 0.682076 +v 0.107992 0.167755 0.682076 +v -0.013712 0.038066 0.682076 +v -0.013712 0.038066 0.682076 +v 0.107992 0.038066 0.682076 +v 0.107992 0.038066 0.682076 +v 0.083648 0.168898 0.399351 +v 0.083648 0.168898 0.399351 +v -0.006966 0.168898 0.399351 +v -0.006966 0.168898 0.399351 +v -0.006966 0.067055 0.399351 +v -0.006966 0.067055 0.399351 +v 0.083648 0.067055 0.399351 +v 0.083648 0.067055 0.399351 +v 0.151185 0.096789 0.001768 +v 0.151185 0.096789 0.001768 +v 0.037218 0.069399 -0.000749 +v 0.037218 0.069399 -0.000749 +v 0.037218 0.069399 -0.000749 +v 0.037218 0.165381 -0.000749 +v 0.037218 0.165381 -0.000749 +v 0.037218 0.165381 -0.000749 +v 0.151185 0.137991 0.001768 +v 0.151185 0.137991 0.001768 +v 0.151185 0.137991 0.053860 +v 0.151185 0.137991 0.053860 +v 0.037218 0.165381 0.080799 +v 0.037218 0.165381 0.080799 +v 0.037218 0.165381 0.080799 +v 0.037218 0.069399 0.080799 +v 0.037218 0.069399 0.080799 +v 0.037218 0.069399 0.080799 +v 0.151185 0.096789 0.053860 +v 0.151185 0.096789 0.053860 +v 0.083648 0.063538 0.107456 +v 0.083648 0.063538 0.107456 +v -0.006966 0.063538 0.107456 +v -0.006966 0.063538 0.107456 +v 0.083648 0.165381 0.107456 +v 0.083648 0.165381 0.107456 +v 0.083648 0.063538 0.373509 +v 0.083648 0.063538 0.373509 +v -0.006966 0.165381 0.107456 +v -0.006966 0.165381 0.107456 +v -0.006966 0.063538 0.373509 +v -0.006966 0.063538 0.373509 +v -0.006966 0.165381 0.373509 +v -0.006966 0.165381 0.373509 +v 0.083648 0.165381 0.373509 +v 0.083648 0.165381 0.373509 +v -0.045255 0.165381 -0.000749 +v -0.045255 0.165381 -0.000749 +v -0.045255 0.069399 -0.000749 +v -0.045255 0.069399 -0.000749 +v -0.045255 0.165381 0.080799 +v -0.045255 0.165381 0.080799 +v -0.045255 0.069399 0.080799 +v -0.045255 0.069399 0.080799 +vt 0.301084 0.898775 +vt 0.263915 0.864997 +vt 0.301084 0.864997 +vt 0.246117 0.945214 +vt 0.210155 0.984786 +vt 0.210155 0.945214 +vt 0.298167 0.990239 +vt 0.168562 0.858032 +vt 0.299105 0.858965 +vt 0.113315 0.996881 +vt 0.003376 0.876869 +vt 0.112768 0.877416 +vt 0.295353 0.991034 +vt 0.170418 0.857237 +vt 0.295711 0.857574 +vt 0.170180 0.858625 +vt 0.296549 0.990344 +vt 0.169461 0.989647 +vt 0.576198 0.825848 +vt 0.599841 0.839506 +vt 0.572693 0.839506 +vt 0.599841 0.839521 +vt 0.576198 0.854189 +vt 0.572693 0.839521 +vt 0.557656 0.830410 +vt 0.571753 0.839233 +vt 0.557656 0.839506 +vt 0.624910 0.967000 +vt 0.412590 0.890282 +vt 0.624910 0.890282 +vt 0.563854 0.811735 +vt 0.572677 0.825833 +vt 0.563581 0.825833 +vt 0.572693 0.816737 +vt 0.599841 0.825833 +vt 0.572693 0.825833 +vt 0.556543 0.853457 +vt 0.576402 0.818924 +vt 0.576402 0.853457 +vt 0.556543 0.818902 +vt 0.591076 0.799043 +vt 0.591076 0.818902 +vt 0.596283 0.852311 +vt 0.576424 0.835629 +vt 0.596283 0.835629 +vt 0.627747 0.871772 +vt 0.414753 0.768879 +vt 0.627747 0.768879 +vt 0.591098 0.818902 +vt 0.610957 0.802220 +vt 0.610957 0.818902 +vt 0.610957 0.835606 +vt 0.576424 0.818924 +vt 0.610957 0.818924 +vt 0.226026 0.626590 +vt 0.196474 0.613656 +vt 0.226026 0.613656 +vt 0.567623 0.819520 +vt 0.617377 0.791961 +vt 0.617377 0.819520 +vt 0.291159 0.690560 +vt 0.033068 0.599186 +vt 0.295337 0.600091 +vt 0.632045 0.700493 +vt 0.362955 0.606258 +vt 0.632045 0.606258 +vt 0.293610 0.596686 +vt 0.034268 0.690560 +vt 0.032591 0.595091 +vt 0.031455 0.596772 +vt 0.296045 0.694323 +vt 0.031455 0.694323 +vt 0.759010 0.705606 +vt 0.783060 0.696962 +vt 0.783105 0.707969 +vt 0.790805 0.696922 +vt 0.782542 0.672926 +vt 0.790232 0.672926 +vt 0.767619 0.672926 +vt 0.759072 0.696929 +vt 0.758975 0.672926 +vt 0.756876 0.697969 +vt 0.748613 0.722091 +vt 0.749185 0.697969 +vt 0.758975 0.718332 +vt 0.769983 0.708002 +vt 0.769983 0.718332 +vt 0.790838 0.681570 +vt 0.798529 0.672926 +vt 0.798529 0.681570 +vt 0.791139 0.570182 +vt 0.794302 0.578756 +vt 0.791088 0.578756 +vt 0.770277 0.578774 +vt 0.778912 0.589164 +vt 0.770277 0.589164 +vt 0.175577 0.338748 +vt 0.187091 0.328783 +vt 0.187091 0.338748 +vt 0.166866 0.426092 +vt 0.150801 0.439997 +vt 0.150801 0.426093 +vt 0.184845 0.502417 +vt 0.120743 0.302583 +vt 0.184845 0.302583 +vt 0.188247 0.500113 +vt 0.120753 0.302387 +vt 0.188247 0.302387 +vt 0.184881 0.502481 +vt 0.121715 0.305019 +vt 0.184881 0.305019 +vt 0.119055 0.303687 +vt 0.187368 0.503813 +vt 0.119055 0.503813 +vt 0.575306 0.820491 +vt 0.579059 0.823462 +vt 0.575306 0.823462 +vt 0.590360 0.817506 +vt 0.586606 0.820478 +vt 0.586606 0.817506 +vt 0.582829 0.827564 +vt 0.579857 0.817506 +vt 0.582829 0.817506 +vt 0.582829 0.817494 +vt 0.579075 0.807436 +vt 0.582829 0.807436 +vt 0.593343 0.827564 +vt 0.590372 0.817506 +vt 0.593343 0.817506 +vt 0.586606 0.807436 +vt 0.590360 0.817494 +vt 0.586606 0.817494 +vt 0.731486 0.888933 +vt 0.733884 0.883787 +vt 0.735067 0.888933 +vt 0.740230 0.888017 +vt 0.735083 0.890415 +vt 0.735083 0.888127 +vt 0.744319 0.882843 +vt 0.739313 0.879832 +vt 0.744318 0.878629 +vt 0.749740 0.882843 +vt 0.747930 0.880556 +vt 0.749740 0.880556 +vt 0.781131 0.598629 +vt 0.768032 0.586975 +vt 0.781131 0.586975 +vt 0.770313 0.709942 +vt 0.794126 0.688754 +vt 0.794126 0.709942 +vt 0.809332 0.729476 +vt 0.744045 0.558024 +vt 0.809332 0.558024 +vt 0.808470 0.725739 +vt 0.740971 0.556761 +vt 0.808470 0.556761 +vt 0.807944 0.733991 +vt 0.746230 0.553509 +vt 0.807944 0.553510 +vt 0.745468 0.553295 +vt 0.808058 0.731706 +vt 0.745468 0.731706 +vt 0.748056 0.895275 +vt 0.743841 0.891654 +vt 0.748056 0.891654 +vt 0.743841 0.891638 +vt 0.748056 0.888017 +vt 0.748056 0.891638 +vt 0.747463 0.898871 +vt 0.743841 0.895290 +vt 0.747463 0.895290 +vt 0.730853 0.878629 +vt 0.733865 0.883771 +vt 0.732055 0.883771 +vt 0.731446 0.893179 +vt 0.735067 0.896760 +vt 0.731446 0.896760 +vt 0.743826 0.893179 +vt 0.739611 0.896760 +vt 0.739611 0.893179 +vt 0.582841 0.807436 +vt 0.586594 0.817494 +vt 0.582841 0.817494 +vt 0.585812 0.827564 +vt 0.582841 0.817506 +vt 0.585812 0.817506 +vt 0.579059 0.817495 +vt 0.575309 0.807436 +vt 0.579063 0.807437 +vt 0.593343 0.817494 +vt 0.590372 0.807436 +vt 0.593343 0.807436 +vt 0.575306 0.820479 +vt 0.579059 0.817507 +vt 0.579059 0.820479 +vt 0.586606 0.824243 +vt 0.589578 0.820490 +vt 0.589578 0.824243 +vt 0.121402 0.304666 +vt 0.185598 0.500333 +vt 0.121402 0.500333 +vt 0.182717 0.501312 +vt 0.121549 0.308688 +vt 0.182717 0.308688 +vt 0.187111 0.301938 +vt 0.119312 0.500562 +vt 0.119312 0.301938 +vt 0.187748 0.503826 +vt 0.118008 0.303674 +vt 0.187748 0.303674 +vt 0.150801 0.453907 +vt 0.166866 0.440003 +vt 0.166866 0.453907 +vt 0.187091 0.338752 +vt 0.175577 0.348717 +vt 0.175577 0.338752 +vt 0.770277 0.578758 +vt 0.780666 0.570124 +vt 0.780666 0.578758 +vt 0.770495 0.589180 +vt 0.773491 0.597814 +vt 0.770277 0.597751 +vt 0.780683 0.578696 +vt 0.789559 0.570124 +vt 0.791072 0.578696 +vt 0.796424 0.578964 +vt 0.792887 0.587391 +vt 0.793435 0.578774 +vt 0.787804 0.593801 +vt 0.778928 0.590592 +vt 0.789317 0.590592 +vt 0.789334 0.593588 +vt 0.799723 0.590592 +vt 0.799723 0.593588 +vt 0.789317 0.578778 +vt 0.780438 0.587347 +vt 0.778928 0.578774 +vt 0.792871 0.578964 +vt 0.789334 0.587391 +vt 0.789881 0.578774 +vt 0.780441 0.587367 +vt 0.789317 0.590576 +vt 0.778928 0.590576 +vt 0.789317 0.593818 +vt 0.778928 0.596813 +vt 0.778928 0.593818 +vt 0.785501 0.696997 +vt 0.794145 0.721047 +vt 0.783138 0.721091 +vt 0.780442 0.696922 +vt 0.772179 0.672926 +vt 0.779870 0.672926 +vt 0.758942 0.673807 +vt 0.747992 0.696813 +vt 0.750343 0.672926 +vt 0.802441 0.696962 +vt 0.794178 0.721084 +vt 0.794751 0.696962 +vt 0.781023 0.708002 +vt 0.770016 0.718332 +vt 0.770016 0.708002 +vt 0.790838 0.689231 +vt 0.799482 0.696922 +vt 0.790838 0.696922 +vt 0.740245 0.893163 +vt 0.742643 0.888017 +vt 0.743826 0.893163 +vt 0.745251 0.883787 +vt 0.740104 0.886185 +vt 0.740104 0.883897 +vt 0.740089 0.888001 +vt 0.735083 0.884990 +vt 0.740088 0.883787 +vt 0.749287 0.897578 +vt 0.747478 0.895290 +vt 0.749287 0.895290 +vt 0.779686 0.573871 +vt 0.768032 0.586970 +vt 0.768032 0.573871 +vt 0.794126 0.667558 +vt 0.770313 0.688745 +vt 0.770313 0.667558 +vt 0.805381 0.731063 +vt 0.745906 0.556437 +vt 0.805381 0.556437 +vt 0.807928 0.729083 +vt 0.745338 0.555917 +vt 0.807928 0.555916 +vt 0.809803 0.730338 +vt 0.744781 0.557162 +vt 0.809803 0.557162 +vt 0.741303 0.554896 +vt 0.811047 0.730104 +vt 0.741303 0.730104 +vt 0.731446 0.893163 +vt 0.735067 0.888949 +vt 0.735067 0.893163 +vt 0.735083 0.895234 +vt 0.739297 0.891613 +vt 0.739297 0.895234 +vt 0.739297 0.898831 +vt 0.735676 0.895250 +vt 0.739297 0.895250 +vt 0.735083 0.878629 +vt 0.738095 0.883771 +vt 0.736286 0.883771 +vt 0.745266 0.883787 +vt 0.748888 0.887367 +vt 0.745266 0.887367 +vt 0.744334 0.878629 +vt 0.747915 0.882843 +vt 0.744334 0.882843 +vt 0.263915 0.898775 +vt 0.246117 0.984786 +vt 0.167624 0.989306 +vt 0.003376 0.999381 +vt 0.170059 0.990697 +vt 0.297268 0.859323 +vt 0.596335 0.825848 +vt 0.596335 0.854189 +vt 0.572677 0.831744 +vt 0.412590 0.967000 +vt 0.571343 0.810811 +vt 0.599841 0.816737 +vt 0.556543 0.818924 +vt 0.556543 0.799043 +vt 0.576424 0.852311 +vt 0.414753 0.871772 +vt 0.591098 0.802220 +vt 0.576424 0.835606 +vt 0.196474 0.626590 +vt 0.567623 0.791961 +vt 0.035091 0.693060 +vt 0.362955 0.700493 +vt 0.295337 0.693060 +vt 0.296045 0.596772 +vt 0.758975 0.696962 +vt 0.780476 0.696922 +vt 0.770080 0.696929 +vt 0.758942 0.722091 +vt 0.758975 0.708002 +vt 0.790838 0.672926 +vt 0.794134 0.570124 +vt 0.778912 0.578774 +vt 0.175577 0.328783 +vt 0.166866 0.439997 +vt 0.120744 0.502417 +vt 0.120753 0.500113 +vt 0.121715 0.502481 +vt 0.187368 0.303687 +vt 0.579059 0.820491 +vt 0.590360 0.820478 +vt 0.579857 0.827564 +vt 0.579075 0.817494 +vt 0.590372 0.827564 +vt 0.590360 0.807436 +vt 0.731597 0.883787 +vt 0.740230 0.891597 +vt 0.739313 0.881641 +vt 0.747930 0.882843 +vt 0.768032 0.598629 +vt 0.770313 0.688754 +vt 0.744045 0.729476 +vt 0.740971 0.725739 +vt 0.746230 0.733990 +vt 0.808059 0.553295 +vt 0.743841 0.895275 +vt 0.743841 0.888017 +vt 0.743841 0.898871 +vt 0.735067 0.878629 +vt 0.735067 0.893179 +vt 0.743826 0.896760 +vt 0.586594 0.807436 +vt 0.582841 0.827564 +vt 0.575306 0.817494 +vt 0.590372 0.817494 +vt 0.575306 0.817507 +vt 0.586606 0.820490 +vt 0.185598 0.304666 +vt 0.121549 0.501312 +vt 0.187111 0.500562 +vt 0.118008 0.503826 +vt 0.150801 0.440003 +vt 0.187091 0.348717 +vt 0.770277 0.570124 +vt 0.773491 0.589180 +vt 0.780861 0.570124 +vt 0.796424 0.587669 +vt 0.779106 0.593801 +vt 0.789334 0.590592 +vt 0.789136 0.587350 +vt 0.792871 0.587669 +vt 0.789139 0.587367 +vt 0.789317 0.596813 +vt 0.794145 0.696962 +vt 0.770113 0.696922 +vt 0.758942 0.697936 +vt 0.804508 0.721084 +vt 0.781023 0.718332 +vt 0.799482 0.689231 +vt 0.740356 0.888017 +vt 0.745251 0.887367 +vt 0.735083 0.886799 +vt 0.747478 0.897578 +vt 0.779686 0.586970 +vt 0.794126 0.688745 +vt 0.745906 0.731063 +vt 0.745338 0.729084 +vt 0.744781 0.730338 +vt 0.811047 0.554896 +vt 0.731446 0.888949 +vt 0.735083 0.891613 +vt 0.735676 0.898831 +vt 0.739297 0.878629 +vt 0.748888 0.883787 +vt 0.747915 0.878629 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0200 -0.0000 -0.9998 +vn 0.0912 -0.0000 0.9958 +vn 0.2486 0.9686 -0.0000 +vn 0.9920 0.0000 -0.1262 +vn 0.2486 -0.9686 -0.0000 +vn 0.0242 -0.0000 -0.9997 +vn 0.9930 -0.0000 -0.1178 +vn -0.9905 0.0000 -0.1377 +vn -0.9963 0.0000 -0.0858 +vn -0.0000 -1.0000 0.0040 +vn 0.9997 -0.0000 -0.0239 +vn 0.0000 0.9948 -0.1020 +vn 0.0558 0.9983 0.0194 +vn 0.2337 -0.9723 -0.0000 +vn 0.2337 0.9723 0.0000 +vn 0.0221 -0.0000 -0.9998 +vn 0.2300 -0.0000 0.9732 +vn -0.0558 -0.9983 0.0194 +vn -0.9997 -0.0000 -0.0248 +vn -0.0201 -0.0000 0.9998 +vn 0.9997 -0.0000 -0.0248 +vn 0.0201 0.0000 0.9998 +vn 0.9963 -0.0000 -0.0858 +vn 0.0000 1.0000 0.0040 +vn -0.9997 0.0000 -0.0239 +vn 0.0000 -0.9948 -0.1020 +vn 0.2307 0.9726 -0.0293 +vn 0.2307 -0.9726 -0.0293 +vn -0.4244 0.8934 0.1472 +vn 0.4244 -0.8934 0.1472 +usemtl Material +s off +f 1/1/1 3/2/1 4/3/1 +f 151/4/2 147/5/2 143/6/2 +f 5/7/3 139/8/3 137/9/3 +f 148/10/4 145/11/4 140/12/4 +f 150/13/5 141/14/5 146/15/5 +f 138/16/6 152/17/6 144/18/6 +f 10/19/7 12/20/7 9/21/7 +f 167/22/8 163/23/8 159/24/8 +f 13/25/9 155/26/9 153/27/9 +f 164/28/10 161/29/10 156/30/10 +f 162/31/11 16/32/11 157/33/11 +f 154/34/6 168/35/6 160/36/6 +f 18/37/1 20/38/1 17/39/1 +f 183/40/2 179/41/2 175/42/2 +f 21/43/3 171/44/3 169/45/3 +f 180/46/4 177/47/4 172/48/4 +f 178/49/5 24/50/5 173/51/5 +f 170/52/6 184/53/6 176/54/6 +f 26/55/12 28/56/12 25/57/12 +f 199/58/2 195/59/2 191/60/2 +f 29/61/3 187/62/3 185/63/3 +f 196/64/13 193/65/13 188/66/13 +f 194/67/5 32/68/5 189/69/5 +f 186/70/14 200/71/14 192/72/14 +f 40/73/15 203/74/15 36/75/15 +f 34/76/16 209/77/16 38/78/16 +f 39/79/17 201/80/17 211/81/17 +f 215/82/18 205/83/18 213/84/18 +f 204/85/2 206/86/2 208/87/2 +f 214/88/1 210/89/1 216/90/1 +f 106/91/19 221/92/19 223/93/19 +f 44/94/6 108/95/6 217/96/6 +f 45/97/1 47/98/1 48/99/1 +f 239/100/2 235/101/2 231/102/2 +f 49/103/5 227/104/5 225/105/5 +f 236/106/6 233/107/6 228/108/6 +f 238/109/3 229/110/3 234/111/3 +f 226/112/4 240/113/4 232/114/4 +f 54/115/1 56/116/1 53/117/1 +f 255/118/2 251/119/2 247/120/2 +f 57/121/5 243/122/5 241/123/5 +f 252/124/6 249/125/6 244/126/6 +f 254/127/3 245/128/3 250/129/3 +f 242/130/4 256/131/4 248/132/4 +f 75/133/20 61/134/20 79/135/20 +f 74/136/21 62/137/21 64/138/21 +f 263/139/22 257/140/22 259/141/22 +f 267/142/4 258/143/4 266/144/4 +f 66/145/1 68/146/1 65/147/1 +f 291/148/2 287/149/2 283/150/2 +f 69/151/3 279/152/3 277/153/3 +f 288/154/4 285/155/4 280/156/4 +f 290/157/5 281/158/5 286/159/5 +f 278/160/6 292/161/6 284/162/6 +f 262/163/1 76/164/1 73/165/1 +f 299/166/2 269/167/2 297/168/2 +f 77/169/3 264/170/3 293/171/3 +f 270/172/23 276/173/23 268/174/23 +f 274/175/5 295/176/5 261/177/5 +f 298/178/6 296/179/6 300/180/6 +f 88/181/6 303/182/6 84/183/6 +f 82/184/5 309/185/5 86/186/5 +f 83/187/4 311/188/4 87/189/4 +f 307/190/3 313/191/3 315/192/3 +f 304/193/2 306/194/2 308/195/2 +f 314/196/1 310/197/1 316/198/1 +f 96/199/6 319/200/6 92/201/6 +f 90/202/5 325/203/5 94/204/5 +f 95/205/4 317/206/4 327/207/4 +f 323/208/3 329/209/3 331/210/3 +f 320/211/2 322/212/2 324/213/2 +f 332/214/1 328/215/1 326/216/1 +f 335/217/4 104/218/4 100/219/4 +f 102/220/24 97/221/24 98/222/24 +f 343/223/25 99/224/25 103/225/25 +f 345/226/3 339/227/3 347/228/3 +f 338/229/26 336/230/26 340/231/26 +f 342/232/1 346/233/1 348/234/1 +f 351/235/27 219/236/27 107/237/27 +f 353/238/5 41/239/5 355/240/5 +f 220/241/28 222/242/28 218/243/28 +f 350/244/1 354/245/1 356/246/1 +f 116/247/29 359/248/29 112/249/29 +f 110/250/30 365/251/30 114/252/30 +f 115/253/31 357/254/31 367/255/31 +f 371/256/32 361/257/32 369/258/32 +f 360/259/2 362/260/2 364/261/2 +f 370/262/1 366/263/1 372/264/1 +f 131/265/20 117/266/20 135/267/20 +f 130/268/21 118/269/21 120/270/21 +f 379/271/22 373/272/22 375/273/22 +f 383/274/4 374/275/4 382/276/4 +f 122/277/1 124/278/1 121/279/1 +f 407/280/2 403/281/2 399/282/2 +f 125/283/5 395/284/5 393/285/5 +f 404/286/6 401/287/6 396/288/6 +f 406/289/3 397/290/3 402/291/3 +f 394/292/4 408/293/4 400/294/4 +f 378/295/1 132/296/1 129/297/1 +f 415/298/2 385/299/2 413/300/2 +f 133/301/3 380/302/3 409/303/3 +f 386/304/23 392/305/23 384/306/23 +f 390/307/5 411/308/5 377/309/5 +f 414/310/6 412/311/6 416/312/6 +f 1/1/1 2/313/1 3/2/1 +f 151/4/2 149/314/2 147/5/2 +f 5/7/3 6/315/3 139/8/3 +f 148/10/4 7/316/4 145/11/4 +f 150/13/5 8/317/5 141/14/5 +f 138/16/6 142/318/6 152/17/6 +f 10/19/7 11/319/7 12/20/7 +f 167/22/8 165/320/8 163/23/8 +f 13/25/33 14/321/33 155/26/33 +f 164/28/10 15/322/10 161/29/10 +f 162/31/34 166/323/34 16/32/34 +f 154/34/6 158/324/6 168/35/6 +f 18/37/1 19/325/1 20/38/1 +f 183/40/2 181/326/2 179/41/2 +f 21/43/3 22/327/3 171/44/3 +f 180/46/4 23/328/4 177/47/4 +f 178/49/5 182/329/5 24/50/5 +f 170/52/6 174/330/6 184/53/6 +f 26/55/12 27/331/12 28/56/12 +f 199/58/2 197/332/2 195/59/2 +f 29/61/3 30/333/3 187/62/3 +f 196/64/13 31/334/13 193/65/13 +f 194/67/5 198/335/5 32/68/5 +f 186/70/14 190/336/14 200/71/14 +f 40/73/15 37/337/15 203/74/15 +f 34/76/16 33/338/16 209/77/16 +f 39/79/17 35/339/17 201/80/17 +f 215/82/18 207/340/18 205/83/18 +f 204/85/2 202/341/2 206/86/2 +f 214/88/1 212/342/1 210/89/1 +f 106/91/3 105/343/3 221/92/3 +f 44/94/6 349/344/6 108/95/6 +f 45/97/1 46/345/1 47/98/1 +f 239/100/2 237/346/2 235/101/2 +f 49/103/5 50/347/5 227/104/5 +f 236/106/6 51/348/6 233/107/6 +f 238/109/3 52/349/3 229/110/3 +f 226/112/4 230/350/4 240/113/4 +f 54/115/1 55/351/1 56/116/1 +f 255/118/2 253/352/2 251/119/2 +f 57/121/5 58/353/5 243/122/5 +f 252/124/6 59/354/6 249/125/6 +f 254/127/3 60/355/3 245/128/3 +f 242/130/4 246/356/4 256/131/4 +f 75/133/20 63/357/20 61/134/20 +f 74/136/21 78/358/21 62/137/21 +f 263/139/22 265/359/22 257/140/22 +f 267/142/4 275/360/4 258/143/4 +f 66/145/1 67/361/1 68/146/1 +f 291/148/2 289/362/2 287/149/2 +f 69/151/3 70/363/3 279/152/3 +f 288/154/4 71/364/4 285/155/4 +f 290/157/5 72/365/5 281/158/5 +f 278/160/6 282/366/6 292/161/6 +f 262/163/1 260/367/1 76/164/1 +f 299/166/2 272/368/2 269/167/2 +f 77/169/3 271/369/3 264/170/3 +f 270/172/23 273/370/23 276/173/23 +f 274/175/5 80/371/5 295/176/5 +f 298/178/6 294/372/6 296/179/6 +f 88/181/6 85/373/6 303/182/6 +f 82/184/5 81/374/5 309/185/5 +f 83/187/4 301/375/4 311/188/4 +f 307/190/3 305/376/3 313/191/3 +f 304/193/2 302/377/2 306/194/2 +f 314/196/1 312/378/1 310/197/1 +f 96/199/6 93/379/6 319/200/6 +f 90/202/5 89/380/5 325/203/5 +f 95/205/4 91/381/4 317/206/4 +f 323/208/3 321/382/3 329/209/3 +f 320/211/2 318/383/2 322/212/2 +f 332/214/1 330/384/1 328/215/1 +f 335/217/4 101/385/4 104/218/4 +f 102/220/5 341/386/5 97/221/5 +f 343/223/25 333/387/25 99/224/25 +f 345/226/35 337/388/35 339/227/35 +f 338/229/26 334/389/26 336/230/26 +f 342/232/1 344/390/1 346/233/1 +f 351/235/27 43/391/27 219/236/27 +f 353/238/36 42/392/36 41/239/36 +f 220/241/28 224/393/28 222/242/28 +f 350/244/1 352/394/1 354/245/1 +f 116/247/29 113/395/29 359/248/29 +f 110/250/30 109/396/30 365/251/30 +f 115/253/31 111/397/31 357/254/31 +f 371/256/32 363/398/32 361/257/32 +f 360/259/2 358/399/2 362/260/2 +f 370/262/1 368/400/1 366/263/1 +f 131/265/20 119/401/20 117/266/20 +f 130/268/21 134/402/21 118/269/21 +f 379/271/22 381/403/22 373/272/22 +f 383/274/4 391/404/4 374/275/4 +f 122/277/1 123/405/1 124/278/1 +f 407/280/2 405/406/2 403/281/2 +f 125/283/5 126/407/5 395/284/5 +f 404/286/6 127/408/6 401/287/6 +f 406/289/3 128/409/3 397/290/3 +f 394/292/4 398/410/4 408/293/4 +f 378/295/1 376/411/1 132/296/1 +f 415/298/2 388/412/2 385/299/2 +f 133/301/3 387/413/3 380/302/3 +f 386/304/23 389/414/23 392/305/23 +f 390/307/5 136/415/5 411/308/5 +f 414/310/6 410/416/6 412/311/6 diff --git a/res/person_-yfw_zup.mtl b/res/person_-yfw_zup.mtl new file mode 100644 index 0000000..036f4e5 --- /dev/null +++ b/res/person_-yfw_zup.mtl @@ -0,0 +1,12 @@ +# Blender MTL File: 'person.blend' +# Material Count: 1 + +newmtl Material +Ns 225.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 diff --git a/res/person_-yfw_zup.obj b/res/person_-yfw_zup.obj new file mode 100644 index 0000000..bb4d59f --- /dev/null +++ b/res/person_-yfw_zup.obj @@ -0,0 +1,1082 @@ +# Blender v2.82 (sub 7) OBJ File: 'person.blend' +# www.blender.org +mtllib person_-yfx_zup.mtl +o Cube +v -0.137915 -0.140106 1.371506 +v -0.137915 0.159643 1.371506 +v 0.134483 0.159643 1.371506 +v 0.134483 -0.140106 1.371506 +v -0.137915 -0.140106 1.690793 +v -0.137915 0.159643 1.690793 +v 0.134483 0.159643 1.690793 +v 0.134483 -0.140106 1.690793 +v -0.245470 -0.107544 1.159527 +v -0.182522 0.137664 1.164427 +v 0.179090 0.137664 1.164427 +v 0.242038 -0.107544 1.159527 +v -0.245470 -0.107544 1.322872 +v -0.182522 0.154759 1.298842 +v 0.179090 0.154759 1.298842 +v 0.242038 -0.107544 1.322872 +v -0.194088 -0.109407 0.942349 +v -0.194088 0.111849 0.942349 +v 0.190656 0.111849 0.942349 +v 0.190656 -0.109407 0.942349 +v -0.194088 -0.109407 1.128210 +v -0.194088 0.111849 1.128210 +v 0.190656 0.111849 1.128210 +v 0.190656 -0.109407 1.128210 +v -0.194088 -0.084985 0.716899 +v -0.194088 0.083357 0.720969 +v 0.190656 0.083357 0.720969 +v 0.190656 -0.084985 0.716899 +v -0.194088 -0.109407 0.892585 +v -0.194088 0.103709 0.892585 +v 0.190656 0.103708 0.892585 +v 0.190656 -0.109407 0.892585 +v 0.172616 -0.069651 0.682076 +v 0.172616 0.052053 0.682076 +v 0.042927 0.052053 0.682076 +v 0.042926 -0.069651 0.682076 +v 0.173759 -0.045307 0.399351 +v 0.173759 0.045307 0.399351 +v 0.071915 0.045307 0.399351 +v 0.071915 -0.045307 0.399351 +v -0.254310 -0.019392 0.656924 +v -0.272794 0.019795 0.656135 +v -0.379026 0.019795 0.656135 +v -0.381202 -0.019392 0.656924 +v -0.280992 0.038805 0.690410 +v -0.280992 -0.037009 0.690410 +v -0.368588 -0.037009 0.690410 +v -0.368588 0.038805 0.690410 +v -0.280992 0.038805 0.947029 +v -0.280992 -0.037009 0.947029 +v -0.368588 -0.037009 0.947029 +v -0.368588 0.038805 0.947029 +v -0.264044 0.046205 0.971325 +v -0.264044 -0.044409 0.971325 +v -0.378502 -0.044409 0.971325 +v -0.378502 0.046205 0.971325 +v -0.264044 0.046205 1.278038 +v -0.264044 -0.044409 1.278038 +v -0.378502 -0.044409 1.278038 +v -0.378502 0.046205 1.278038 +v 0.142852 0.151134 0.053860 +v 0.101650 0.151134 0.053860 +v 0.142852 0.151134 0.001768 +v 0.101650 0.151134 0.001768 +v 0.068399 -0.045307 0.107456 +v 0.068399 0.045307 0.107456 +v 0.170242 0.045307 0.107456 +v 0.170242 -0.045307 0.107456 +v 0.068399 -0.045307 0.373509 +v 0.068399 0.045307 0.373509 +v 0.170242 0.045307 0.373509 +v 0.170242 -0.045307 0.373509 +v 0.074260 -0.045307 -0.000749 +v 0.074260 0.037166 -0.000749 +v 0.170242 0.037166 -0.000749 +v 0.170242 -0.045307 -0.000749 +v 0.074260 -0.045307 0.080799 +v 0.074260 0.037166 0.080799 +v 0.170242 0.037166 0.080799 +v 0.170242 -0.045307 0.080799 +v 0.375545 -0.045307 1.280073 +v 0.375545 0.045307 1.280073 +v 0.261087 0.045307 1.280073 +v 0.261087 -0.045307 1.280073 +v 0.375545 -0.045307 0.973359 +v 0.375545 0.045307 0.973359 +v 0.261087 0.045307 0.973359 +v 0.261087 -0.045307 0.973359 +v 0.365631 -0.037907 0.949064 +v 0.365631 0.037907 0.949064 +v 0.278035 0.037907 0.949064 +v 0.278035 -0.037907 0.949064 +v 0.365631 -0.037907 0.692445 +v 0.365631 0.037907 0.692445 +v 0.278035 0.037907 0.692445 +v 0.278035 -0.037907 0.692445 +v 0.378245 0.020290 0.658959 +v 0.376069 -0.018897 0.658170 +v 0.269837 -0.018897 0.658170 +v 0.251353 0.020290 0.658959 +v 0.378245 0.020290 0.553501 +v 0.378245 -0.016297 0.553501 +v 0.251353 -0.016297 0.553501 +v 0.251353 0.020290 0.553501 +v -0.381202 -0.019392 0.551466 +v -0.381202 0.017195 0.551466 +v -0.254310 0.017195 0.551466 +v -0.254310 -0.019392 0.551466 +v -0.167755 0.107992 0.682076 +v -0.167755 -0.013712 0.682076 +v -0.038066 -0.013712 0.682076 +v -0.038066 0.107992 0.682076 +v -0.168898 0.083648 0.399351 +v -0.168898 -0.006966 0.399351 +v -0.067055 -0.006966 0.399351 +v -0.067055 0.083648 0.399351 +v -0.096789 0.151185 0.053860 +v -0.137991 0.151185 0.053860 +v -0.096789 0.151185 0.001768 +v -0.137991 0.151185 0.001768 +v -0.063538 0.083648 0.107456 +v -0.063538 -0.006966 0.107456 +v -0.165381 -0.006966 0.107456 +v -0.165381 0.083648 0.107456 +v -0.063538 0.083648 0.373509 +v -0.063538 -0.006966 0.373509 +v -0.165381 -0.006966 0.373509 +v -0.165381 0.083648 0.373509 +v -0.165381 -0.045255 -0.000749 +v -0.165381 0.037218 -0.000749 +v -0.069399 0.037218 -0.000749 +v -0.069399 -0.045255 -0.000749 +v -0.165381 -0.045255 0.080799 +v -0.165381 0.037218 0.080799 +v -0.069399 0.037218 0.080799 +v -0.069399 -0.045255 0.080799 +v -0.137915 -0.140106 1.371506 +v -0.137915 -0.140106 1.371506 +v -0.137915 0.159643 1.371506 +v -0.137915 0.159643 1.371506 +v 0.134483 -0.140106 1.371506 +v 0.134483 -0.140106 1.371506 +v -0.137915 -0.140106 1.690793 +v -0.137915 -0.140106 1.690793 +v 0.134483 0.159643 1.371506 +v 0.134483 0.159643 1.371506 +v -0.137915 0.159643 1.690793 +v -0.137915 0.159643 1.690793 +v 0.134483 0.159643 1.690793 +v 0.134483 0.159643 1.690793 +v 0.134483 -0.140106 1.690793 +v 0.134483 -0.140106 1.690793 +v -0.245470 -0.107544 1.159527 +v -0.245470 -0.107544 1.159527 +v -0.182522 0.137664 1.164427 +v -0.182522 0.137664 1.164427 +v 0.242038 -0.107544 1.159527 +v 0.242038 -0.107544 1.159527 +v -0.245470 -0.107544 1.322872 +v -0.245470 -0.107544 1.322872 +v 0.179090 0.137664 1.164427 +v 0.179090 0.137664 1.164427 +v -0.182522 0.154759 1.298842 +v -0.182522 0.154759 1.298842 +v 0.179090 0.154759 1.298842 +v 0.179090 0.154759 1.298842 +v 0.242038 -0.107544 1.322872 +v 0.242038 -0.107544 1.322872 +v -0.194088 -0.109407 0.942349 +v -0.194088 -0.109407 0.942349 +v -0.194088 0.111849 0.942349 +v -0.194088 0.111849 0.942349 +v 0.190656 -0.109407 0.942349 +v 0.190656 -0.109407 0.942349 +v -0.194088 -0.109407 1.128210 +v -0.194088 -0.109407 1.128210 +v 0.190656 0.111849 0.942349 +v 0.190656 0.111849 0.942349 +v -0.194088 0.111849 1.128210 +v -0.194088 0.111849 1.128210 +v 0.190656 0.111849 1.128210 +v 0.190656 0.111849 1.128210 +v 0.190656 -0.109407 1.128210 +v 0.190656 -0.109407 1.128210 +v -0.194088 -0.084985 0.716899 +v -0.194088 -0.084985 0.716899 +v -0.194088 0.083357 0.720969 +v -0.194088 0.083357 0.720969 +v 0.190656 -0.084985 0.716899 +v 0.190656 -0.084985 0.716899 +v -0.194088 -0.109407 0.892585 +v -0.194088 -0.109407 0.892585 +v 0.190656 0.083357 0.720969 +v 0.190656 0.083357 0.720969 +v -0.194088 0.103709 0.892585 +v -0.194088 0.103709 0.892585 +v 0.190656 0.103708 0.892585 +v 0.190656 0.103708 0.892585 +v 0.190656 -0.109407 0.892585 +v 0.190656 -0.109407 0.892585 +v 0.172616 0.052053 0.682076 +v 0.172616 0.052053 0.682076 +v 0.172616 -0.069651 0.682076 +v 0.172616 -0.069651 0.682076 +v 0.042927 0.052053 0.682076 +v 0.042927 0.052053 0.682076 +v 0.042926 -0.069651 0.682076 +v 0.042926 -0.069651 0.682076 +v 0.173759 -0.045307 0.399351 +v 0.173759 -0.045307 0.399351 +v 0.173759 0.045307 0.399351 +v 0.173759 0.045307 0.399351 +v 0.071915 0.045307 0.399351 +v 0.071915 0.045307 0.399351 +v 0.071915 -0.045307 0.399351 +v 0.071915 -0.045307 0.399351 +v -0.254310 -0.019392 0.656924 +v -0.254310 -0.019392 0.656924 +v -0.272794 0.019795 0.656135 +v -0.272794 0.019795 0.656135 +v -0.381202 -0.019392 0.656924 +v -0.381202 -0.019392 0.656924 +v -0.379026 0.019795 0.656135 +v -0.379026 0.019795 0.656135 +v -0.280992 0.038805 0.690410 +v -0.280992 0.038805 0.690410 +v -0.280992 -0.037009 0.690410 +v -0.280992 -0.037009 0.690410 +v -0.368588 0.038805 0.690410 +v -0.368588 0.038805 0.690410 +v -0.280992 0.038805 0.947029 +v -0.280992 0.038805 0.947029 +v -0.368588 -0.037009 0.690410 +v -0.368588 -0.037009 0.690410 +v -0.280992 -0.037009 0.947029 +v -0.280992 -0.037009 0.947029 +v -0.368588 -0.037009 0.947029 +v -0.368588 -0.037009 0.947029 +v -0.368588 0.038805 0.947029 +v -0.368588 0.038805 0.947029 +v -0.264044 0.046205 0.971325 +v -0.264044 0.046205 0.971325 +v -0.264044 -0.044409 0.971325 +v -0.264044 -0.044409 0.971325 +v -0.378502 0.046205 0.971325 +v -0.378502 0.046205 0.971325 +v -0.264044 0.046205 1.278038 +v -0.264044 0.046205 1.278038 +v -0.378502 -0.044409 0.971325 +v -0.378502 -0.044409 0.971325 +v -0.264044 -0.044409 1.278038 +v -0.264044 -0.044409 1.278038 +v -0.378502 -0.044409 1.278038 +v -0.378502 -0.044409 1.278038 +v -0.378502 0.046205 1.278038 +v -0.378502 0.046205 1.278038 +v 0.142852 0.151134 0.001768 +v 0.142852 0.151134 0.001768 +v 0.170242 0.037166 -0.000749 +v 0.170242 0.037166 -0.000749 +v 0.170242 0.037166 -0.000749 +v 0.074260 0.037166 -0.000749 +v 0.074260 0.037166 -0.000749 +v 0.074260 0.037166 -0.000749 +v 0.101650 0.151134 0.001768 +v 0.101650 0.151134 0.001768 +v 0.101650 0.151134 0.053860 +v 0.101650 0.151134 0.053860 +v 0.074260 0.037166 0.080799 +v 0.074260 0.037166 0.080799 +v 0.074260 0.037166 0.080799 +v 0.170242 0.037166 0.080799 +v 0.170242 0.037166 0.080799 +v 0.170242 0.037166 0.080799 +v 0.142852 0.151134 0.053860 +v 0.142852 0.151134 0.053860 +v 0.068399 -0.045307 0.107456 +v 0.068399 -0.045307 0.107456 +v 0.068399 0.045307 0.107456 +v 0.068399 0.045307 0.107456 +v 0.170242 -0.045307 0.107456 +v 0.170242 -0.045307 0.107456 +v 0.068399 -0.045307 0.373509 +v 0.068399 -0.045307 0.373509 +v 0.170242 0.045307 0.107456 +v 0.170242 0.045307 0.107456 +v 0.068399 0.045307 0.373509 +v 0.068399 0.045307 0.373509 +v 0.170242 0.045307 0.373509 +v 0.170242 0.045307 0.373509 +v 0.170242 -0.045307 0.373509 +v 0.170242 -0.045307 0.373509 +v 0.074260 -0.045307 -0.000749 +v 0.074260 -0.045307 -0.000749 +v 0.170242 -0.045307 -0.000749 +v 0.170242 -0.045307 -0.000749 +v 0.074260 -0.045307 0.080799 +v 0.074260 -0.045307 0.080799 +v 0.170242 -0.045307 0.080799 +v 0.170242 -0.045307 0.080799 +v 0.375545 0.045307 1.280073 +v 0.375545 0.045307 1.280073 +v 0.375545 -0.045307 1.280073 +v 0.375545 -0.045307 1.280073 +v 0.261087 0.045307 1.280073 +v 0.261087 0.045307 1.280073 +v 0.261087 -0.045307 1.280073 +v 0.261087 -0.045307 1.280073 +v 0.375545 -0.045307 0.973359 +v 0.375545 -0.045307 0.973359 +v 0.375545 0.045307 0.973359 +v 0.375545 0.045307 0.973359 +v 0.261087 0.045307 0.973359 +v 0.261087 0.045307 0.973359 +v 0.261087 -0.045307 0.973359 +v 0.261087 -0.045307 0.973359 +v 0.365631 0.037907 0.949064 +v 0.365631 0.037907 0.949064 +v 0.365631 -0.037907 0.949064 +v 0.365631 -0.037907 0.949064 +v 0.278035 0.037907 0.949064 +v 0.278035 0.037907 0.949064 +v 0.278035 -0.037907 0.949064 +v 0.278035 -0.037907 0.949064 +v 0.365631 -0.037907 0.692445 +v 0.365631 -0.037907 0.692445 +v 0.365631 0.037907 0.692445 +v 0.365631 0.037907 0.692445 +v 0.278035 0.037907 0.692445 +v 0.278035 0.037907 0.692445 +v 0.278035 -0.037907 0.692445 +v 0.278035 -0.037907 0.692445 +v 0.376069 -0.018897 0.658170 +v 0.376069 -0.018897 0.658170 +v 0.378245 0.020290 0.658959 +v 0.378245 0.020290 0.658959 +v 0.269837 -0.018897 0.658170 +v 0.269837 -0.018897 0.658170 +v 0.251353 0.020290 0.658959 +v 0.251353 0.020290 0.658959 +v 0.378245 0.020290 0.553501 +v 0.378245 0.020290 0.553501 +v 0.378245 -0.016297 0.553501 +v 0.378245 -0.016297 0.553501 +v 0.251353 -0.016297 0.553501 +v 0.251353 -0.016297 0.553501 +v 0.251353 0.020290 0.553501 +v 0.251353 0.020290 0.553501 +v -0.381202 -0.019392 0.551466 +v -0.381202 -0.019392 0.551466 +v -0.381202 0.017195 0.551466 +v -0.381202 0.017195 0.551466 +v -0.254310 0.017195 0.551466 +v -0.254310 0.017195 0.551466 +v -0.254310 -0.019392 0.551466 +v -0.254310 -0.019392 0.551466 +v -0.167755 -0.013712 0.682076 +v -0.167755 -0.013712 0.682076 +v -0.167755 0.107992 0.682076 +v -0.167755 0.107992 0.682076 +v -0.038066 -0.013712 0.682076 +v -0.038066 -0.013712 0.682076 +v -0.038066 0.107992 0.682076 +v -0.038066 0.107992 0.682076 +v -0.168898 0.083648 0.399351 +v -0.168898 0.083648 0.399351 +v -0.168898 -0.006966 0.399351 +v -0.168898 -0.006966 0.399351 +v -0.067055 -0.006966 0.399351 +v -0.067055 -0.006966 0.399351 +v -0.067055 0.083648 0.399351 +v -0.067055 0.083648 0.399351 +v -0.096789 0.151185 0.001768 +v -0.096789 0.151185 0.001768 +v -0.069399 0.037218 -0.000749 +v -0.069399 0.037218 -0.000749 +v -0.069399 0.037218 -0.000749 +v -0.165381 0.037218 -0.000749 +v -0.165381 0.037218 -0.000749 +v -0.165381 0.037218 -0.000749 +v -0.137991 0.151185 0.001768 +v -0.137991 0.151185 0.001768 +v -0.137991 0.151185 0.053860 +v -0.137991 0.151185 0.053860 +v -0.165381 0.037218 0.080799 +v -0.165381 0.037218 0.080799 +v -0.165381 0.037218 0.080799 +v -0.069399 0.037218 0.080799 +v -0.069399 0.037218 0.080799 +v -0.069399 0.037218 0.080799 +v -0.096789 0.151185 0.053860 +v -0.096789 0.151185 0.053860 +v -0.063538 0.083648 0.107456 +v -0.063538 0.083648 0.107456 +v -0.063538 -0.006966 0.107456 +v -0.063538 -0.006966 0.107456 +v -0.165381 0.083648 0.107456 +v -0.165381 0.083648 0.107456 +v -0.063538 0.083648 0.373509 +v -0.063538 0.083648 0.373509 +v -0.165381 -0.006966 0.107456 +v -0.165381 -0.006966 0.107456 +v -0.063538 -0.006966 0.373509 +v -0.063538 -0.006966 0.373509 +v -0.165381 -0.006966 0.373509 +v -0.165381 -0.006966 0.373509 +v -0.165381 0.083648 0.373509 +v -0.165381 0.083648 0.373509 +v -0.165381 -0.045255 -0.000749 +v -0.165381 -0.045255 -0.000749 +v -0.069399 -0.045255 -0.000749 +v -0.069399 -0.045255 -0.000749 +v -0.165381 -0.045255 0.080799 +v -0.165381 -0.045255 0.080799 +v -0.069399 -0.045255 0.080799 +v -0.069399 -0.045255 0.080799 +vt 0.301084 0.898775 +vt 0.263915 0.864997 +vt 0.301084 0.864997 +vt 0.246117 0.945214 +vt 0.210155 0.984786 +vt 0.210155 0.945214 +vt 0.298167 0.990239 +vt 0.168562 0.858032 +vt 0.299105 0.858965 +vt 0.113315 0.996881 +vt 0.003376 0.876869 +vt 0.112768 0.877416 +vt 0.295353 0.991034 +vt 0.170418 0.857237 +vt 0.295711 0.857574 +vt 0.170180 0.858625 +vt 0.296549 0.990344 +vt 0.169461 0.989647 +vt 0.576198 0.825848 +vt 0.599841 0.839506 +vt 0.572693 0.839506 +vt 0.599841 0.839521 +vt 0.576198 0.854189 +vt 0.572693 0.839521 +vt 0.557656 0.830410 +vt 0.571753 0.839233 +vt 0.557656 0.839506 +vt 0.624910 0.967000 +vt 0.412590 0.890282 +vt 0.624910 0.890282 +vt 0.563854 0.811735 +vt 0.572677 0.825833 +vt 0.563581 0.825833 +vt 0.572693 0.816737 +vt 0.599841 0.825833 +vt 0.572693 0.825833 +vt 0.556543 0.853457 +vt 0.576402 0.818924 +vt 0.576402 0.853457 +vt 0.556543 0.818902 +vt 0.591076 0.799043 +vt 0.591076 0.818902 +vt 0.596283 0.852311 +vt 0.576424 0.835629 +vt 0.596283 0.835629 +vt 0.627747 0.871772 +vt 0.414753 0.768879 +vt 0.627747 0.768879 +vt 0.591098 0.818902 +vt 0.610957 0.802220 +vt 0.610957 0.818902 +vt 0.610957 0.835606 +vt 0.576424 0.818924 +vt 0.610957 0.818924 +vt 0.226026 0.626590 +vt 0.196474 0.613656 +vt 0.226026 0.613656 +vt 0.567623 0.819520 +vt 0.617377 0.791961 +vt 0.617377 0.819520 +vt 0.291159 0.690560 +vt 0.033068 0.599186 +vt 0.295337 0.600091 +vt 0.632045 0.700493 +vt 0.362955 0.606258 +vt 0.632045 0.606258 +vt 0.293610 0.596686 +vt 0.034268 0.690560 +vt 0.032591 0.595091 +vt 0.031455 0.596772 +vt 0.296045 0.694323 +vt 0.031455 0.694323 +vt 0.759010 0.705606 +vt 0.783060 0.696962 +vt 0.783105 0.707969 +vt 0.790805 0.696922 +vt 0.782542 0.672926 +vt 0.790232 0.672926 +vt 0.767619 0.672926 +vt 0.759072 0.696929 +vt 0.758975 0.672926 +vt 0.756876 0.697969 +vt 0.748613 0.722091 +vt 0.749185 0.697969 +vt 0.758975 0.718332 +vt 0.769983 0.708002 +vt 0.769983 0.718332 +vt 0.790838 0.681570 +vt 0.798529 0.672926 +vt 0.798529 0.681570 +vt 0.791139 0.570182 +vt 0.794302 0.578756 +vt 0.791088 0.578756 +vt 0.770277 0.578774 +vt 0.778912 0.589164 +vt 0.770277 0.589164 +vt 0.175577 0.338748 +vt 0.187091 0.328783 +vt 0.187091 0.338748 +vt 0.166866 0.426092 +vt 0.150801 0.439997 +vt 0.150801 0.426093 +vt 0.184845 0.502417 +vt 0.120743 0.302583 +vt 0.184845 0.302583 +vt 0.188247 0.500113 +vt 0.120753 0.302387 +vt 0.188247 0.302387 +vt 0.184881 0.502481 +vt 0.121715 0.305019 +vt 0.184881 0.305019 +vt 0.119055 0.303687 +vt 0.187368 0.503813 +vt 0.119055 0.503813 +vt 0.575306 0.820491 +vt 0.579059 0.823462 +vt 0.575306 0.823462 +vt 0.590360 0.817506 +vt 0.586606 0.820478 +vt 0.586606 0.817506 +vt 0.582829 0.827564 +vt 0.579857 0.817506 +vt 0.582829 0.817506 +vt 0.582829 0.817494 +vt 0.579075 0.807436 +vt 0.582829 0.807436 +vt 0.593343 0.827564 +vt 0.590372 0.817506 +vt 0.593343 0.817506 +vt 0.586606 0.807436 +vt 0.590360 0.817494 +vt 0.586606 0.817494 +vt 0.731486 0.888933 +vt 0.733884 0.883787 +vt 0.735067 0.888933 +vt 0.740230 0.888017 +vt 0.735083 0.890415 +vt 0.735083 0.888127 +vt 0.744319 0.882843 +vt 0.739313 0.879832 +vt 0.744318 0.878629 +vt 0.749740 0.882843 +vt 0.747930 0.880556 +vt 0.749740 0.880556 +vt 0.781131 0.598629 +vt 0.768032 0.586975 +vt 0.781131 0.586975 +vt 0.770313 0.709942 +vt 0.794126 0.688754 +vt 0.794126 0.709942 +vt 0.809332 0.729476 +vt 0.744045 0.558024 +vt 0.809332 0.558024 +vt 0.808470 0.725739 +vt 0.740971 0.556761 +vt 0.808470 0.556761 +vt 0.807944 0.733991 +vt 0.746230 0.553509 +vt 0.807944 0.553510 +vt 0.745468 0.553295 +vt 0.808058 0.731706 +vt 0.745468 0.731706 +vt 0.748056 0.895275 +vt 0.743841 0.891654 +vt 0.748056 0.891654 +vt 0.743841 0.891638 +vt 0.748056 0.888017 +vt 0.748056 0.891638 +vt 0.747463 0.898871 +vt 0.743841 0.895290 +vt 0.747463 0.895290 +vt 0.730853 0.878629 +vt 0.733865 0.883771 +vt 0.732055 0.883771 +vt 0.731446 0.893179 +vt 0.735067 0.896760 +vt 0.731446 0.896760 +vt 0.743826 0.893179 +vt 0.739611 0.896760 +vt 0.739611 0.893179 +vt 0.582841 0.807436 +vt 0.586594 0.817494 +vt 0.582841 0.817494 +vt 0.585812 0.827564 +vt 0.582841 0.817506 +vt 0.585812 0.817506 +vt 0.579059 0.817495 +vt 0.575309 0.807436 +vt 0.579063 0.807437 +vt 0.593343 0.817494 +vt 0.590372 0.807436 +vt 0.593343 0.807436 +vt 0.575306 0.820479 +vt 0.579059 0.817507 +vt 0.579059 0.820479 +vt 0.586606 0.824243 +vt 0.589578 0.820490 +vt 0.589578 0.824243 +vt 0.121402 0.304666 +vt 0.185598 0.500333 +vt 0.121402 0.500333 +vt 0.182717 0.501312 +vt 0.121549 0.308688 +vt 0.182717 0.308688 +vt 0.187111 0.301938 +vt 0.119312 0.500562 +vt 0.119312 0.301938 +vt 0.187748 0.503826 +vt 0.118008 0.303674 +vt 0.187748 0.303674 +vt 0.150801 0.453907 +vt 0.166866 0.440003 +vt 0.166866 0.453907 +vt 0.187091 0.338752 +vt 0.175577 0.348717 +vt 0.175577 0.338752 +vt 0.770277 0.578758 +vt 0.780666 0.570124 +vt 0.780666 0.578758 +vt 0.770495 0.589180 +vt 0.773491 0.597814 +vt 0.770277 0.597751 +vt 0.780683 0.578696 +vt 0.789559 0.570124 +vt 0.791072 0.578696 +vt 0.796424 0.578964 +vt 0.792887 0.587391 +vt 0.793435 0.578774 +vt 0.787804 0.593801 +vt 0.778928 0.590592 +vt 0.789317 0.590592 +vt 0.789334 0.593588 +vt 0.799723 0.590592 +vt 0.799723 0.593588 +vt 0.789317 0.578778 +vt 0.780438 0.587347 +vt 0.778928 0.578774 +vt 0.792871 0.578964 +vt 0.789334 0.587391 +vt 0.789881 0.578774 +vt 0.780441 0.587367 +vt 0.789317 0.590576 +vt 0.778928 0.590576 +vt 0.789317 0.593818 +vt 0.778928 0.596813 +vt 0.778928 0.593818 +vt 0.785501 0.696997 +vt 0.794145 0.721047 +vt 0.783138 0.721091 +vt 0.780442 0.696922 +vt 0.772179 0.672926 +vt 0.779870 0.672926 +vt 0.758942 0.673807 +vt 0.747992 0.696813 +vt 0.750343 0.672926 +vt 0.802441 0.696962 +vt 0.794178 0.721084 +vt 0.794751 0.696962 +vt 0.781023 0.708002 +vt 0.770016 0.718332 +vt 0.770016 0.708002 +vt 0.790838 0.689231 +vt 0.799482 0.696922 +vt 0.790838 0.696922 +vt 0.740245 0.893163 +vt 0.742643 0.888017 +vt 0.743826 0.893163 +vt 0.745251 0.883787 +vt 0.740104 0.886185 +vt 0.740104 0.883897 +vt 0.740089 0.888001 +vt 0.735083 0.884990 +vt 0.740088 0.883787 +vt 0.749287 0.897578 +vt 0.747478 0.895290 +vt 0.749287 0.895290 +vt 0.779686 0.573871 +vt 0.768032 0.586970 +vt 0.768032 0.573871 +vt 0.794126 0.667558 +vt 0.770313 0.688745 +vt 0.770313 0.667558 +vt 0.805381 0.731063 +vt 0.745906 0.556437 +vt 0.805381 0.556437 +vt 0.807928 0.729083 +vt 0.745338 0.555917 +vt 0.807928 0.555916 +vt 0.809803 0.730338 +vt 0.744781 0.557162 +vt 0.809803 0.557162 +vt 0.741303 0.554896 +vt 0.811047 0.730104 +vt 0.741303 0.730104 +vt 0.731446 0.893163 +vt 0.735067 0.888949 +vt 0.735067 0.893163 +vt 0.735083 0.895234 +vt 0.739297 0.891613 +vt 0.739297 0.895234 +vt 0.739297 0.898831 +vt 0.735676 0.895250 +vt 0.739297 0.895250 +vt 0.735083 0.878629 +vt 0.738095 0.883771 +vt 0.736286 0.883771 +vt 0.745266 0.883787 +vt 0.748888 0.887367 +vt 0.745266 0.887367 +vt 0.744334 0.878629 +vt 0.747915 0.882843 +vt 0.744334 0.882843 +vt 0.263915 0.898775 +vt 0.246117 0.984786 +vt 0.167624 0.989306 +vt 0.003376 0.999381 +vt 0.170059 0.990697 +vt 0.297268 0.859323 +vt 0.596335 0.825848 +vt 0.596335 0.854189 +vt 0.572677 0.831744 +vt 0.412590 0.967000 +vt 0.571343 0.810811 +vt 0.599841 0.816737 +vt 0.556543 0.818924 +vt 0.556543 0.799043 +vt 0.576424 0.852311 +vt 0.414753 0.871772 +vt 0.591098 0.802220 +vt 0.576424 0.835606 +vt 0.196474 0.626590 +vt 0.567623 0.791961 +vt 0.035091 0.693060 +vt 0.362955 0.700493 +vt 0.295337 0.693060 +vt 0.296045 0.596772 +vt 0.758975 0.696962 +vt 0.780476 0.696922 +vt 0.770080 0.696929 +vt 0.758942 0.722091 +vt 0.758975 0.708002 +vt 0.790838 0.672926 +vt 0.794134 0.570124 +vt 0.778912 0.578774 +vt 0.175577 0.328783 +vt 0.166866 0.439997 +vt 0.120744 0.502417 +vt 0.120753 0.500113 +vt 0.121715 0.502481 +vt 0.187368 0.303687 +vt 0.579059 0.820491 +vt 0.590360 0.820478 +vt 0.579857 0.827564 +vt 0.579075 0.817494 +vt 0.590372 0.827564 +vt 0.590360 0.807436 +vt 0.731597 0.883787 +vt 0.740230 0.891597 +vt 0.739313 0.881641 +vt 0.747930 0.882843 +vt 0.768032 0.598629 +vt 0.770313 0.688754 +vt 0.744045 0.729476 +vt 0.740971 0.725739 +vt 0.746230 0.733990 +vt 0.808059 0.553295 +vt 0.743841 0.895275 +vt 0.743841 0.888017 +vt 0.743841 0.898871 +vt 0.735067 0.878629 +vt 0.735067 0.893179 +vt 0.743826 0.896760 +vt 0.586594 0.807436 +vt 0.582841 0.827564 +vt 0.575306 0.817494 +vt 0.590372 0.817494 +vt 0.575306 0.817507 +vt 0.586606 0.820490 +vt 0.185598 0.304666 +vt 0.121549 0.501312 +vt 0.187111 0.500562 +vt 0.118008 0.503826 +vt 0.150801 0.440003 +vt 0.187091 0.348717 +vt 0.770277 0.570124 +vt 0.773491 0.589180 +vt 0.780861 0.570124 +vt 0.796424 0.587669 +vt 0.779106 0.593801 +vt 0.789334 0.590592 +vt 0.789136 0.587350 +vt 0.792871 0.587669 +vt 0.789139 0.587367 +vt 0.789317 0.596813 +vt 0.794145 0.696962 +vt 0.770113 0.696922 +vt 0.758942 0.697936 +vt 0.804508 0.721084 +vt 0.781023 0.718332 +vt 0.799482 0.689231 +vt 0.740356 0.888017 +vt 0.745251 0.887367 +vt 0.735083 0.886799 +vt 0.747478 0.897578 +vt 0.779686 0.586970 +vt 0.794126 0.688745 +vt 0.745906 0.731063 +vt 0.745338 0.729084 +vt 0.744781 0.730338 +vt 0.811047 0.554896 +vt 0.731446 0.888949 +vt 0.735083 0.891613 +vt 0.735676 0.898831 +vt 0.739297 0.878629 +vt 0.748888 0.883787 +vt 0.747915 0.878629 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 0.0200 -0.9998 +vn -0.0000 0.0912 0.9958 +vn -0.9686 0.2486 -0.0000 +vn 0.0000 0.9920 -0.1262 +vn 0.9686 0.2486 -0.0000 +vn -0.0000 0.0242 -0.9997 +vn 0.0000 0.9930 -0.1178 +vn -0.0000 -0.9905 -0.1377 +vn -0.0000 -0.9963 -0.0858 +vn 1.0000 -0.0000 0.0040 +vn 0.0000 0.9997 -0.0239 +vn -0.9948 0.0000 -0.1020 +vn -0.9983 0.0558 0.0194 +vn 0.9723 0.2337 -0.0000 +vn -0.9723 0.2337 0.0000 +vn 0.0000 0.0221 -0.9998 +vn 0.0000 0.2300 0.9732 +vn 0.9983 -0.0558 0.0194 +vn 0.0000 -0.9997 -0.0248 +vn 0.0000 -0.0201 0.9998 +vn 0.0000 0.9997 -0.0248 +vn 0.0000 0.0201 0.9998 +vn 0.0000 0.9963 -0.0858 +vn -1.0000 0.0000 0.0040 +vn -0.0000 -0.9997 -0.0239 +vn 0.9948 0.0000 -0.1020 +vn -0.9726 0.2307 -0.0293 +vn 0.9726 0.2307 -0.0293 +vn -0.8934 -0.4244 0.1472 +vn 0.8934 0.4244 0.1472 +usemtl Material +s off +f 1/1/1 3/2/1 4/3/1 +f 151/4/2 147/5/2 143/6/2 +f 5/7/3 139/8/3 137/9/3 +f 148/10/4 145/11/4 140/12/4 +f 150/13/5 141/14/5 146/15/5 +f 138/16/6 152/17/6 144/18/6 +f 10/19/7 12/20/7 9/21/7 +f 167/22/8 163/23/8 159/24/8 +f 13/25/9 155/26/9 153/27/9 +f 164/28/10 161/29/10 156/30/10 +f 162/31/11 16/32/11 157/33/11 +f 154/34/6 168/35/6 160/36/6 +f 18/37/1 20/38/1 17/39/1 +f 183/40/2 179/41/2 175/42/2 +f 21/43/3 171/44/3 169/45/3 +f 180/46/4 177/47/4 172/48/4 +f 178/49/5 24/50/5 173/51/5 +f 170/52/6 184/53/6 176/54/6 +f 26/55/12 28/56/12 25/57/12 +f 199/58/2 195/59/2 191/60/2 +f 29/61/3 187/62/3 185/63/3 +f 196/64/13 193/65/13 188/66/13 +f 194/67/5 32/68/5 189/69/5 +f 186/70/14 200/71/14 192/72/14 +f 40/73/15 203/74/15 36/75/15 +f 34/76/16 209/77/16 38/78/16 +f 39/79/17 201/80/17 211/81/17 +f 215/82/18 205/83/18 213/84/18 +f 204/85/2 206/86/2 208/87/2 +f 214/88/1 210/89/1 216/90/1 +f 106/91/19 221/92/19 223/93/19 +f 44/94/6 108/95/6 217/96/6 +f 45/97/1 47/98/1 48/99/1 +f 239/100/2 235/101/2 231/102/2 +f 49/103/5 227/104/5 225/105/5 +f 236/106/6 233/107/6 228/108/6 +f 238/109/3 229/110/3 234/111/3 +f 226/112/4 240/113/4 232/114/4 +f 54/115/1 56/116/1 53/117/1 +f 255/118/2 251/119/2 247/120/2 +f 57/121/5 243/122/5 241/123/5 +f 252/124/6 249/125/6 244/126/6 +f 254/127/3 245/128/3 250/129/3 +f 242/130/4 256/131/4 248/132/4 +f 75/133/20 61/134/20 79/135/20 +f 74/136/21 62/137/21 64/138/21 +f 263/139/22 257/140/22 259/141/22 +f 267/142/4 258/143/4 266/144/4 +f 66/145/1 68/146/1 65/147/1 +f 291/148/2 287/149/2 283/150/2 +f 69/151/3 279/152/3 277/153/3 +f 288/154/4 285/155/4 280/156/4 +f 290/157/5 281/158/5 286/159/5 +f 278/160/6 292/161/6 284/162/6 +f 262/163/1 76/164/1 73/165/1 +f 299/166/2 269/167/2 297/168/2 +f 77/169/3 264/170/3 293/171/3 +f 270/172/23 276/173/23 268/174/23 +f 274/175/5 295/176/5 261/177/5 +f 298/178/6 296/179/6 300/180/6 +f 88/181/6 303/182/6 84/183/6 +f 82/184/5 309/185/5 86/186/5 +f 83/187/4 311/188/4 87/189/4 +f 307/190/3 313/191/3 315/192/3 +f 304/193/2 306/194/2 308/195/2 +f 314/196/1 310/197/1 316/198/1 +f 96/199/6 319/200/6 92/201/6 +f 90/202/5 325/203/5 94/204/5 +f 95/205/4 317/206/4 327/207/4 +f 323/208/3 329/209/3 331/210/3 +f 320/211/2 322/212/2 324/213/2 +f 332/214/1 328/215/1 326/216/1 +f 335/217/4 104/218/4 100/219/4 +f 102/220/24 97/221/24 98/222/24 +f 343/223/25 99/224/25 103/225/25 +f 345/226/3 339/227/3 347/228/3 +f 338/229/26 336/230/26 340/231/26 +f 342/232/1 346/233/1 348/234/1 +f 351/235/27 219/236/27 107/237/27 +f 353/238/5 41/239/5 355/240/5 +f 220/241/28 222/242/28 218/243/28 +f 350/244/1 354/245/1 356/246/1 +f 116/247/29 359/248/29 112/249/29 +f 110/250/30 365/251/30 114/252/30 +f 115/253/31 357/254/31 367/255/31 +f 371/256/32 361/257/32 369/258/32 +f 360/259/2 362/260/2 364/261/2 +f 370/262/1 366/263/1 372/264/1 +f 131/265/20 117/266/20 135/267/20 +f 130/268/21 118/269/21 120/270/21 +f 379/271/22 373/272/22 375/273/22 +f 383/274/4 374/275/4 382/276/4 +f 122/277/1 124/278/1 121/279/1 +f 407/280/2 403/281/2 399/282/2 +f 125/283/5 395/284/5 393/285/5 +f 404/286/6 401/287/6 396/288/6 +f 406/289/3 397/290/3 402/291/3 +f 394/292/4 408/293/4 400/294/4 +f 378/295/1 132/296/1 129/297/1 +f 415/298/2 385/299/2 413/300/2 +f 133/301/3 380/302/3 409/303/3 +f 386/304/23 392/305/23 384/306/23 +f 390/307/5 411/308/5 377/309/5 +f 414/310/6 412/311/6 416/312/6 +f 1/1/1 2/313/1 3/2/1 +f 151/4/2 149/314/2 147/5/2 +f 5/7/3 6/315/3 139/8/3 +f 148/10/4 7/316/4 145/11/4 +f 150/13/5 8/317/5 141/14/5 +f 138/16/6 142/318/6 152/17/6 +f 10/19/7 11/319/7 12/20/7 +f 167/22/8 165/320/8 163/23/8 +f 13/25/33 14/321/33 155/26/33 +f 164/28/10 15/322/10 161/29/10 +f 162/31/34 166/323/34 16/32/34 +f 154/34/6 158/324/6 168/35/6 +f 18/37/1 19/325/1 20/38/1 +f 183/40/2 181/326/2 179/41/2 +f 21/43/3 22/327/3 171/44/3 +f 180/46/4 23/328/4 177/47/4 +f 178/49/5 182/329/5 24/50/5 +f 170/52/6 174/330/6 184/53/6 +f 26/55/12 27/331/12 28/56/12 +f 199/58/2 197/332/2 195/59/2 +f 29/61/3 30/333/3 187/62/3 +f 196/64/13 31/334/13 193/65/13 +f 194/67/5 198/335/5 32/68/5 +f 186/70/14 190/336/14 200/71/14 +f 40/73/15 37/337/15 203/74/15 +f 34/76/16 33/338/16 209/77/16 +f 39/79/17 35/339/17 201/80/17 +f 215/82/18 207/340/18 205/83/18 +f 204/85/2 202/341/2 206/86/2 +f 214/88/1 212/342/1 210/89/1 +f 106/91/3 105/343/3 221/92/3 +f 44/94/6 349/344/6 108/95/6 +f 45/97/1 46/345/1 47/98/1 +f 239/100/2 237/346/2 235/101/2 +f 49/103/5 50/347/5 227/104/5 +f 236/106/6 51/348/6 233/107/6 +f 238/109/3 52/349/3 229/110/3 +f 226/112/4 230/350/4 240/113/4 +f 54/115/1 55/351/1 56/116/1 +f 255/118/2 253/352/2 251/119/2 +f 57/121/5 58/353/5 243/122/5 +f 252/124/6 59/354/6 249/125/6 +f 254/127/3 60/355/3 245/128/3 +f 242/130/4 246/356/4 256/131/4 +f 75/133/20 63/357/20 61/134/20 +f 74/136/21 78/358/21 62/137/21 +f 263/139/22 265/359/22 257/140/22 +f 267/142/4 275/360/4 258/143/4 +f 66/145/1 67/361/1 68/146/1 +f 291/148/2 289/362/2 287/149/2 +f 69/151/3 70/363/3 279/152/3 +f 288/154/4 71/364/4 285/155/4 +f 290/157/5 72/365/5 281/158/5 +f 278/160/6 282/366/6 292/161/6 +f 262/163/1 260/367/1 76/164/1 +f 299/166/2 272/368/2 269/167/2 +f 77/169/3 271/369/3 264/170/3 +f 270/172/23 273/370/23 276/173/23 +f 274/175/5 80/371/5 295/176/5 +f 298/178/6 294/372/6 296/179/6 +f 88/181/6 85/373/6 303/182/6 +f 82/184/5 81/374/5 309/185/5 +f 83/187/4 301/375/4 311/188/4 +f 307/190/3 305/376/3 313/191/3 +f 304/193/2 302/377/2 306/194/2 +f 314/196/1 312/378/1 310/197/1 +f 96/199/6 93/379/6 319/200/6 +f 90/202/5 89/380/5 325/203/5 +f 95/205/4 91/381/4 317/206/4 +f 323/208/3 321/382/3 329/209/3 +f 320/211/2 318/383/2 322/212/2 +f 332/214/1 330/384/1 328/215/1 +f 335/217/4 101/385/4 104/218/4 +f 102/220/5 341/386/5 97/221/5 +f 343/223/25 333/387/25 99/224/25 +f 345/226/35 337/388/35 339/227/35 +f 338/229/26 334/389/26 336/230/26 +f 342/232/1 344/390/1 346/233/1 +f 351/235/27 43/391/27 219/236/27 +f 353/238/36 42/392/36 41/239/36 +f 220/241/28 224/393/28 222/242/28 +f 350/244/1 352/394/1 354/245/1 +f 116/247/29 113/395/29 359/248/29 +f 110/250/30 109/396/30 365/251/30 +f 115/253/31 111/397/31 357/254/31 +f 371/256/32 363/398/32 361/257/32 +f 360/259/2 358/399/2 362/260/2 +f 370/262/1 368/400/1 366/263/1 +f 131/265/20 119/401/20 117/266/20 +f 130/268/21 134/402/21 118/269/21 +f 379/271/22 381/403/22 373/272/22 +f 383/274/4 391/404/4 374/275/4 +f 122/277/1 123/405/1 124/278/1 +f 407/280/2 405/406/2 403/281/2 +f 125/283/5 126/407/5 395/284/5 +f 404/286/6 127/408/6 401/287/6 +f 406/289/3 128/409/3 397/290/3 +f 394/292/4 398/410/4 408/293/4 +f 378/295/1 376/411/1 132/296/1 +f 415/298/2 388/412/2 385/299/2 +f 133/301/3 387/413/3 380/302/3 +f 386/304/23 389/414/23 392/305/23 +f 390/307/5 136/415/5 411/308/5 +f 414/310/6 410/416/6 412/311/6 diff --git a/res/playerTexture.png b/res/playerTexture.png index cf0cf2d74fe230463bdd4cdd499e78ab7ed6f03f..d972e6a5f3f7f85cf1767c232c8c70c2587f23be 100644 GIT binary patch literal 10249 zcmbt)byOVPvTx4}GB||bIw44c1PGo0gS!UzAi>>&4;D!9KoSV<65L&aJHZ`-y9Aek z$M?N+-o5Akao=6{^jfoat?H_p-`=}qcXfYMR+PfQB*z2*07phzTonMo4@KColC$T@k5OQX5|TA@e{yJY*QpuV_B~#9kk!0j)28fdh-N~_ zaR1JYXK~5i@b2uu{V?$Y@3lRuLHmiw_VAD0#?16eQCnfZHI4r6^hon0w`SZ%F%RSba^Po^UC#YrH?J{Fmf2D5$QOOF zxn=idz|pOX@1qtUBV}*$!=;&{&jEfBK?rZ&CVS8wY1(j`yHe@Gu<#|N_mbgZh*H^r zy>`FweQS0q`u&H?_K5bI(Ax`|y`4V1F%M)?#SZ^Xf__v&=!T}mf`F6#x8JQIJ?(<5 zC;FE%xB3U}s|~YujL!_+X4@`Y20hB1!o%$94kG6+TEFb2ZxW= zKH9r`W3Uz~_s*Qo1+~uI`LG-;)-2p8Xx5!LQSMNYI4AvCueq8C@jI~{O2CY%I1|(e z@BdLw`hhcdiBdvz-eaA00ci1Q;VnW&Ps7p1aGcEo79uwv(bd^k5!t0cy6Fv4iJfu^ zr%<5;7mCSiNTEVHchJD_Szj=4(RY!aWGN-WO=wCeWG0l^;`0{JFJWg-SwR zO*lL;p^u%I)^dUs%Z=s7l|FtU-+7i5uiBTNWu+=77((gX$N!BbdY3*?6kqoZlGxM<+bcipD- z-vt*%)|f)LhkW^Q3SERSY7c@r)lpLB%LGj~k4TLV&unowhZkW}b^Xs_gR`p}Ym(x) zY5bg;y$fH&sXtp|;|VSF;ucE={Yjf;>LDk|Ov(Qu;QgeQJDXc^=#=kmNT?#jcGncl zcvh!@$q^G-?_}_}+oGR0Q#3D)o2WvdtdxoiL^oS#v^O6EV`HFhU1`e(n?}oMGb}$J z24JVt76g5;aSur>%g3pn4z?V#V%l9ieNV^Q_jyL$EFlL~_4_1nuCXoK2`;zPCNlg~ z@%o|PF;06Cr9)r6Uu#rMaet(YXxxQ5?k{Wh=8nlH@PE22!h2)8h~ zS^Ki2eI}i*K6+8UT!P}v03+FT`IcKph5HwY{W#T1GusjS$h=$F_eAfRY6gT^^%fEkeAXb*eaitwdhzu_6TCmNLQ_{)qvZS@!X%221hxF#> z+Jz~Ok@i`5z1lVyO{qJJpjS}_NC)`{y{B6(w%#c$EkrKTtbwH}Rl?>3S%gRBUvcD- zi|LvTBo!oLA�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 diff --git a/src/org/atriaSoft/etk/Color.java b/src/org/atriaSoft/etk/Color.java index 16abb43..7b9aaf9 100644 --- a/src/org/atriaSoft/etk/Color.java +++ b/src/org/atriaSoft/etk/Color.java @@ -1,6 +1,10 @@ package org.atriaSoft.etk; public class Color { + @Override + public String toString() { + return "Color [r=" + r + ", g=" + g + ", b=" + b + ", a=" + a + "]"; + } public float r; public float g; public float b; diff --git a/src/org/atriaSoft/etk/math/Vector3f.java b/src/org/atriaSoft/etk/math/Vector3f.java index 4dd413b..2956ddf 100644 --- a/src/org/atriaSoft/etk/math/Vector3f.java +++ b/src/org/atriaSoft/etk/math/Vector3f.java @@ -1,13 +1,16 @@ package org.atriaSoft.etk.math; public class Vector3f { - public float x = 0; - public float y = 0; - public float z = 0; + public float x; + public float y; + public float z; /** * @brief Default contructor */ public Vector3f() { + this.x = 0; + this.y = 0; + this.z = 0; } /** * @brief Constructor from scalars diff --git a/src/org/atriaSoft/gale/backend3d/OpenGL.java b/src/org/atriaSoft/gale/backend3d/OpenGL.java index 2354921..b955091 100644 --- a/src/org/atriaSoft/gale/backend3d/OpenGL.java +++ b/src/org/atriaSoft/gale/backend3d/OpenGL.java @@ -15,6 +15,7 @@ import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; +import org.lwjgl.opengl.GL40; import org.atriaSoft.etk.math.Matrix4f; import org.atriaSoft.etk.math.Vector2f; import org.atriaSoft.etk.math.Vector2i; @@ -492,13 +493,13 @@ public class OpenGL { /** * @brief draw a specific array == > this enable mode difference ... */ -// public static void drawArrays(RenderMode mode, int first, int count) { -// if (this.programId >= 0) { -// updateAllFlags(); -// GL20.glDrawArrays(convertRenderMode.get(mode), first, count); -// checkGlError("glDrawArrays"); -// } -// } + public static void drawArrays(RenderMode mode, int first, int count) { + if (programId >= 0) { + updateAllFlags(); + GL20.glDrawArrays(convertRenderMode.get(mode), first, count); + checkGlError("glDrawArrays"); + } + } // public static void drawElements(RenderMode mode, List indices) { // if (this.programId >= 0) { // updateAllFlags(); @@ -837,7 +838,7 @@ public class OpenGL { } public static void programLoadUniformColor(int location, Color value) { - GL20.glUniform3f(location, value.r, value.g, value.b); + GL20.glUniform4f(location, value.r, value.g, value.b, value.a); } public static void programLoadUniformVector(int location, Vector3f value) { @@ -868,5 +869,8 @@ public class OpenGL { public static void drawElements(RenderMode mode, int vertexCount) { GL11.glDrawElements(convertRenderMode.get(mode), vertexCount, GL11.GL_UNSIGNED_INT, 0); } + public static void setDeathMask(boolean state) { + GL40.glDepthMask(state); + } } diff --git a/src/org/atriaSoft/gale/context/Context.java b/src/org/atriaSoft/gale/context/Context.java index e794da5..82bf34d 100644 --- a/src/org/atriaSoft/gale/context/Context.java +++ b/src/org/atriaSoft/gale/context/Context.java @@ -531,7 +531,7 @@ public abstract class Context { public void stop() { Log.warning("stop: NOT implemented for this platform..."); } - protected Vector2f windowsSize; //!< current size of the system + protected Vector2f windowsSize = new Vector2f(0,0); //!< current size of the system /** * @brief get the current windows size * @return the current size ... @@ -568,12 +568,16 @@ public abstract class Context { public void setSize( Vector2f _size){ Log.info("setSize: NOT implemented ..."); }; + protected boolean fullscreen = false; /** * @brief The application request a change of his current size force the fullscreen mode. * @param[in] _status status of the fullscreen mode. */ public void setFullScreen(boolean _status){ - Log.info("setFullScreen: NOT implemented ..."); + fullscreen = _status; + }; + public boolean getFullScreen(){ + return fullscreen; }; protected Vector2f windowsPos; //!< current size of the system /** diff --git a/src/org/atriaSoft/gale/context/LWJG_AWT/ContextLWJGL_AWT.java b/src/org/atriaSoft/gale/context/LWJG_AWT/ContextLWJGL_AWT.java index b7b69f7..8158eb1 100644 --- a/src/org/atriaSoft/gale/context/LWJG_AWT/ContextLWJGL_AWT.java +++ b/src/org/atriaSoft/gale/context/LWJG_AWT/ContextLWJGL_AWT.java @@ -1,16 +1,32 @@ package org.atriaSoft.gale.context.LWJG_AWT; +import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.Frame; +import java.awt.Image; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.awt.image.MemoryImageSource; +import java.util.ArrayList; +import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.awt.Robot; + import javax.swing.JFrame; import javax.swing.SwingUtilities; @@ -27,6 +43,7 @@ import org.atriaSoft.gale.key.KeySpecial; import org.atriaSoft.gale.key.KeyStatus; import org.atriaSoft.gale.key.KeyType; import org.atriaSoft.gameEngine.Log; +import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.awt.AWTGLCanvas; //import org.lwjgl.Version; //import org.lwjgl.glfw.GLFWErrorCallback; @@ -40,17 +57,17 @@ import renderEngine.DisplayManagerDraw; import static org.lwjgl.opengl.GL.*; import static org.lwjgl.opengl.GL11.*; - -public class ContextLWJGL_AWT extends Context implements MouseListener{ +public class ContextLWJGL_AWT extends Context implements MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { private boolean[] inputIsPressed = new boolean[MAX_MANAGE_INPUT]; + private Vector2f decoratedWindowsSize = new Vector2f(0, 0); private Vector2f cursorPos = new Vector2f(0, 0); + private Vector2f cursorSize = new Vector2f(0, 0); private static final int WIDTH = 800; private static final int HEIGHT = 600; private static final String TITLE = "Gale basic UI"; private static long lastFrameTime; private static float delta; - private Vector2f lastPositionGrab = null; // is null when grabbing is disable ... private Fps fps = new Fps("Main Loop", true); @@ -72,24 +89,11 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ private JFrame frame; private GLData glData; private AWTGLCanvas canvas; - + private Robot robot = null; public ContextLWJGL_AWT(Application application, String[] args) { super(application, args); System.out.println("Hello JOGL !"); - - - - initWindows(); -// // This line is critical for LWJGL's interoperation with GLFW's -// // OpenGL context, or any context that is managed externally. -// // LWJGL detects the context that is current in the current thread, -// // creates the GLCapabilities instance and makes the OpenGL -// // bindings available for use. -// GL.createCapabilities(); -// // Set the clear color -// glClearColor(0.0f, 1.0f, 0.0f, 0.0f); -// glViewport(0, 0, (int)application.getSize().x, (int)application.getSize().y); start2ndThreadProcessing(); } @@ -97,549 +101,400 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ public void setDrawer(DisplayManagerDraw drawer) { this.drawer = drawer; } - -// public static Vector2f getSize() { -// return new Vector2f(WIDTH, HEIGHT); -// } - public void unInit() { - -// // Free the window callbacks and destroy the window -// glfwFreeCallbacks(window); -// glfwDestroyWindow(window); -// -// // Terminate GLFW and free the error callback -// glfwTerminate(); -// glfwSetErrorCallback(null).free(); + } + @SuppressWarnings("serial") private void initWindows() { frame = new JFrame("Gale base"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setLayout(new BorderLayout()); - frame.setPreferredSize(new Dimension(600, 600)); + frame.setPreferredSize(new Dimension(800, 600)); glData = new GLData(); glData.samples = 4; glData.swapInterval = 0; - frame.addMouseListener(this); - frame.add(canvas = new AWTGLCanvas(glData) { public void initGL() { System.out.println("OpenGL version: " + effective.majorVersion + "." + effective.minorVersion + " (Profile: " + effective.profile + ")"); createCapabilities(); glClearColor(0.3f, 0.4f, 0.5f, 1); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); } public void paintGL() { //Log.warning("Draw ... "); int w = getWidth(); int h = getHeight(); - float aspect = (float) w / h; - double now = System.currentTimeMillis() * 0.001; - float width = (float) Math.abs(Math.sin(now * 0.3)); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, w, h); - glBegin(GL_QUADS); - glColor3f(0.4f, 0.6f, 0.8f); - glVertex2f(-0.75f * width / aspect, 0.0f); - glVertex2f(0, -0.75f); - glVertex2f(+0.75f * width/ aspect, 0); - glVertex2f(0, +0.75f); - glEnd(); + if (decoratedWindowsSize.x != w || decoratedWindowsSize.y != h) { + decoratedWindowsSize.x = w; + decoratedWindowsSize.y = h; + Rectangle bounds = canvas.getBounds(); + windowsSize.x = bounds.width; + windowsSize.y = bounds.height; + OS_Resize(windowsSize); + } + OS_Draw(true); swapBuffers(); } }, BorderLayout.CENTER); frame.pack(); + frame.setLocationRelativeTo(null); frame.setVisible(true); + canvas.requestFocus(); + canvas.addMouseListener(this); + canvas.addMouseMotionListener(this); + canvas.addKeyListener(this); + canvas.addMouseWheelListener(this); frame.transferFocus(); - Runnable renderLoop = new Runnable() { - public void run() { - if (!canvas.isValid()) - return; - canvas.render(); - SwingUtilities.invokeLater(this); - } - }; - SwingUtilities.invokeLater(renderLoop); - - //OpenGL.setGlobalGLContext(glcanvas.getGL()); -// // Make the new window -// -// frame = new Frame("CMSC427 - Project 1"); -// -// GLProfile glp = GLProfile.getDefault(); -// GLCapabilities caps = new GLCapabilities(glp); -// caps.setHardwareAccelerated(true); -// caps.setDoubleBuffered(false); -// caps.setAlphaBits(8); -// caps.setRedBits(8); -// caps.setBlueBits(8); -// caps.setGreenBits(8); -// caps.setOnscreen(false); -// GLDrawableFactory factory = GLDrawableFactory.getFactory(glp); -// drawable = factory.createOffscreenAutoDrawable( -// factory.getDefaultDevice(), -// caps, -// new DefaultGLCapabilitiesChooser(), -// 100, -// 100); -// drawable.display(); -// drawable.getContext().makeCurrent(); -// gl = drawable.getGL().getGL2(); -// gl.glClearDepth(1.0f); -// gl.glDepthFunc(GL_LEQUAL); -// gl.glEnable(GL_DEPTH_TEST); -// gl.glShadeModel(GL_FLAT); -// gl.glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); -// glu = GLU.createGLU(gl); -// GLUquadric quadratic = glu.gluNewQuadric(); -// glu.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH); -// glu.gluQuadricTexture(quadratic, true); -// gl.glEnable(GL_COLOR_MATERIAL); -// gl.glDisable(GL_TEXTURE_2D); -// -// frame.add(drawable); - - -// // Setup an error callback. The default implementation -// // will print the error message in System.err. -// GLFWErrorCallback.createPrint(System.err).set(); -// -// // Initialize GLFW. Most GLFW functions will not work before doing this. -// if ( !glfwInit() ) { -// throw new IllegalStateException("Unable to initialize GLFW"); -// } -// // Configure GLFW -// glfwDefaultWindowHints(); // optional, the current window hints are already the default -// glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation -// glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable -// -// // Create the window -// window = glfwCreateWindow((int)application.getSize().x, (int)application.getSize().y, application.getTitle(), NULL, NULL); -// if ( window == 0 ) { -// throw new RuntimeException("Failed to create the GLFW window"); -// } -// // Setup a key callback. It will be called every time a key is pressed, repeated or released. -// // https://www.glfw.org/docs/latest/input_guide.html -// glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { -// this.keyCallback(window, key, scancode, action, mods); -// }); -// glfwSetWindowSizeCallback(window, (windows, sizeX, sizeY) -> { -// this.windowSizeCallback(window, sizeX, sizeY); -// }); -// -// glfwSetCharCallback(window, (window, key) -> { -// this.charCallback(window, key); -// }); -// -// glfwSetCursorPosCallback(window, (window, xpos, ypos) -> { -// this.cursorPosCallback(window, xpos, ypos); -// }); -// -// glfwSetMouseButtonCallback(window, (window, button, action, mods) -> { -// this.mouseCallback(window, button, action, mods); -// }); -// -// glfwSetScrollCallback(window, (window, xoffset, yoffset) -> { -// this.scrollCallback(window, xoffset, yoffset); -// }); -// -// -// // Get the thread stack and push a new frame -// try ( MemoryStack stack = stackPush() ) { -// IntBuffer pWidth = stack.mallocInt(1); // int* -// IntBuffer pHeight = stack.mallocInt(1); // int* -// -// // Get the window size passed to glfwCreateWindow -// glfwGetWindowSize(window, pWidth, pHeight); -// -// // Get the resolution of the primary monitor -// GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); -// -// // Center the window -// glfwSetWindowPos( -// window, -// (vidmode.width() - pWidth.get(0)) / 2, -// (vidmode.height() - pHeight.get(0)) / 2 -// ); -// } // the stack frame is popped automatically -// -// // Make the OpenGL context current -// glfwMakeContextCurrent(window); -// // Enable v-sync -// glfwSwapInterval(1); -// -// // Make the window visible -// glfwShowWindow(window); - lastFrameTime = getCurrentTime(); } @Override public void mouseClicked(MouseEvent e) { - System.out.println(e.getX()); - System.out.println(e.getY()); +// System.out.println(e.getX()); +// System.out.println(e.getY()); Log.info("Mouse clicked:" + e.getX() + " " + e.getY()); } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub - Log.info("Mouse entered:" + e.getX() + " " + e.getY()); + //Log.info("Mouse entered:" + e.getX() + " " + e.getY()); + cursorPos.x = e.getX(); + cursorPos.y = e.getY(); + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.enter, + 0, + cursorPos); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub - Log.info("Mouse exited:" + e.getX() + " " + e.getY()); + //Log.info("Mouse exited:" + e.getX() + " " + e.getY()); + cursorPos.x = e.getX(); + cursorPos.y = e.getY(); + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.leave, + 0, + cursorPos); + //this.frame.mouseMove(e, 200, 200); } @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub Log.info("Mouse pressed:" + e.getX() + " " + e.getY()); + int button = e.getButton(); + cursorPos.x = e.getX(); + cursorPos.y = e.getY(); + if (button < MAX_MANAGE_INPUT) { + inputIsPressed[button] = true; + } + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.down, + button, + cursorPos); } @Override public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - Log.info("Mouse release:" + e.getX() + " " + e.getY()); + //Log.info("Mouse release:" + e.getX() + " " + e.getY()); +// Log.info("mouse value: GLFW_RELEASE" + action + " bt=" + button); + int button = e.getButton(); + cursorPos.x = e.getX(); + cursorPos.y = e.getY(); + if (button < MAX_MANAGE_INPUT) { + inputIsPressed[button] = false; + } + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.up, + button, + cursorPos); } + + @Override + public void mouseDragged(MouseEvent e) { + //Log.error("mouse drag ... " + e); + mouseMoved(e); + } + public void mouseMoved(MouseEvent e) { + //Log.info("Mouse moved:" + e.getX() + " " + e.getY() + " " + e); + if (this.robot != null) { + Rectangle bounds = frame.getBounds(); + //Log.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); + float refPosX = bounds.x + bounds.width/2; + float refPosY = bounds.y + bounds.height/2; + if (e.getXOnScreen() == (int)refPosX + && e.getYOnScreen() == (int)refPosY) { + cursorPos.x = 0; + cursorPos.y = 0; + return; + } else { + //Log.error(" " + bounds + " windows=" + windowsSize + " deco= " + decoratedWindowsSize); + cursorPos.x = -((float)e.getXOnScreen() - refPosX); + cursorPos.y = (float)e.getYOnScreen() - refPosY; + robot.mouseMove((int)refPosX, (int)refPosY); + } + Log.info("delta moved:" + cursorPos); + } else { + // TODO: use real size ... !!!! + cursorPos.x = (float)e.getX(); + cursorPos.y = cursorSize.y - (float)e.getY(); + } + // For compatibility of the Android system : + boolean findOne = false; + for (int iii=0; iii pressedKey = new ArrayList(); -// private void windowSizeCallback(long window2, int sizeX, int sizeY) { -// OS_Resize(new Vector2f(sizeX, sizeY)); -// } -// -// -// private void charCallback(long window, int key) {; -// Log.error("keyboard char " + key + " " + (char)key); -// } -// private void keyCallback(long window, int key, int scancode, int action, int mods) { -// boolean find = true; -// boolean thisIsAReapeateKey = false; // TODO detect this ... -// KeyKeyboard keyInput = KeyKeyboard.unknow; -// Log.error("keyboard input " + key + " " + scancode); -// switch (key) { -// //case 328: // keypad -// case GLFW_KEY_UP: keyInput = KeyKeyboard.up; break; -// //case 324: // keypad -// case GLFW_KEY_LEFT: keyInput = KeyKeyboard.left; break; -// //case 326: // keypad -// case GLFW_KEY_RIGHT: keyInput = KeyKeyboard.right; break; -// //case 323: // keypad -// case GLFW_KEY_DOWN: keyInput = KeyKeyboard.down; break; -// case 329: // keypad -// case GLFW_KEY_PAGE_UP: keyInput = KeyKeyboard.pageUp; break; -// case 323: // keypad -// case GLFW_KEY_PAGE_DOWN: keyInput = KeyKeyboard.pageDown; break; -// case 327: // keypad -// case GLFW_KEY_HOME: keyInput = KeyKeyboard.start; break; -// case 321: // keypad -// case GLFW_KEY_END: keyInput = KeyKeyboard.end; break; -// case GLFW_KEY_PRINT_SCREEN: keyInput = KeyKeyboard.stopDefil; break; -// case GLFW_KEY_PAUSE: keyInput = KeyKeyboard.wait; break; -// case 320: // keypad -// case GLFW_KEY_INSERT: -// keyInput = KeyKeyboard.insert; -// if(action == GLFW_RELEASE) { -// if (guiKeyBoardMode.getInsert() == true) { -// guiKeyBoardMode.setInsert(false); -// } else { -// guiKeyBoardMode.setInsert(true); -// } -// } -// break; -// //case 84: keyInput = KeyboardCenter; break; // Keypad -// case GLFW_KEY_F1: keyInput = KeyKeyboard.f1; break; -// case GLFW_KEY_F2: keyInput = KeyKeyboard.f2; break; -// case GLFW_KEY_F3: keyInput = KeyKeyboard.f3; break; -// case GLFW_KEY_F4: keyInput = KeyKeyboard.f4; break; -// case GLFW_KEY_F5: keyInput = KeyKeyboard.f5; break; -// case GLFW_KEY_F6: keyInput = KeyKeyboard.f6; break; -// case GLFW_KEY_F7: keyInput = KeyKeyboard.f7; break; -// case GLFW_KEY_F8: keyInput = KeyKeyboard.f8; break; -// case GLFW_KEY_F9: keyInput = KeyKeyboard.f9; break; -// case GLFW_KEY_F10: keyInput = KeyKeyboard.f10; break; -// case GLFW_KEY_F11: keyInput = KeyKeyboard.f11; break; -// case GLFW_KEY_F12: keyInput = KeyKeyboard.f12; break; -// case GLFW_KEY_CAPS_LOCK: keyInput = KeyKeyboard.capLock; guiKeyBoardMode.setCapsLock (action == GLFW_PRESS); break; -// case GLFW_KEY_LEFT_SHIFT: keyInput = KeyKeyboard.shiftLeft; guiKeyBoardMode.setShiftLeft (action == GLFW_PRESS); break; -// case GLFW_KEY_RIGHT_SHIFT: keyInput = KeyKeyboard.shiftRight; guiKeyBoardMode.setShiftRight(action == GLFW_PRESS); break; -// case GLFW_KEY_LEFT_CONTROL: keyInput = KeyKeyboard.ctrlLeft; guiKeyBoardMode.setCtrlLeft (action == GLFW_PRESS); break; -// case GLFW_KEY_RIGHT_CONTROL: keyInput = KeyKeyboard.ctrlRight; guiKeyBoardMode.setCtrlRight (action == GLFW_PRESS); break; -// case GLFW_KEY_LEFT_SUPER: keyInput = KeyKeyboard.metaLeft; guiKeyBoardMode.setMetaLeft (action == GLFW_PRESS); break; -// case GLFW_KEY_RIGHT_SUPER: keyInput = KeyKeyboard.metaRight; guiKeyBoardMode.setMetaRight (action == GLFW_PRESS); break; -// case GLFW_KEY_LEFT_ALT: keyInput = KeyKeyboard.altLeft; guiKeyBoardMode.setAltLeft (action == GLFW_PRESS); break; -// case GLFW_KEY_RIGHT_ALT: keyInput = KeyKeyboard.altRight; guiKeyBoardMode.setAltRight (action == GLFW_PRESS); break; -// case GLFW_KEY_MENU: keyInput = KeyKeyboard.contextMenu; break; -// case GLFW_KEY_NUM_LOCK: keyInput = KeyKeyboard.numLock; guiKeyBoardMode.setNumLock (action == GLFW_PRESS); break; -// case GLFW_KEY_DELETE: // Suppr on keypad -// find = false; -// if(guiKeyBoardMode.getNumLock() == true){ -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action == GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// '.'); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action != GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// '.'); -// } -// } else { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action == GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)0x7F); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action != GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)0x7F); -// } -// } -// break; -// case GLFW_KEY_TAB: // special case for TAB -// find = false; -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action == GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)0x09); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action!=GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)0x09); -// } -// break; -// case GLFW_KEY_A: -// case GLFW_KEY_B: -// case GLFW_KEY_C: -// case GLFW_KEY_D: -// case GLFW_KEY_E: -// case GLFW_KEY_F: -// case GLFW_KEY_G: -// case GLFW_KEY_H: -// case GLFW_KEY_I: -// case GLFW_KEY_J: -// case GLFW_KEY_K: -// case GLFW_KEY_L: -// case GLFW_KEY_M: -// case GLFW_KEY_N: -// case GLFW_KEY_O: -// case GLFW_KEY_P: -// case GLFW_KEY_Q: -// case GLFW_KEY_R: -// case GLFW_KEY_S: -// case GLFW_KEY_T: -// case GLFW_KEY_U: -// case GLFW_KEY_V: -// case GLFW_KEY_W: -// case GLFW_KEY_X: -// case GLFW_KEY_Y: -// case GLFW_KEY_Z: -// { -// find = false; -// int tmpKey = key-GLFW_KEY_A + (int)'a'; -// if (guiKeyBoardMode.getCapsLock() == true || guiKeyBoardMode.getShift() == true) { -// tmpKey += (int)'A' - (int)'a'; -// } -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action==GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)tmpKey); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action!=GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)tmpKey); -// } -// break; -// } -// case GLFW_KEY_1: -// case GLFW_KEY_2: -// case GLFW_KEY_3: -// case GLFW_KEY_4: -// case GLFW_KEY_5: -// case GLFW_KEY_6: -// case GLFW_KEY_7: -// case GLFW_KEY_8: -// case GLFW_KEY_9: -// case GLFW_KEY_0: -// { -// find = false; -// int tmpKey = key-GLFW_KEY_0 + (int)'0'; -//// if (guiKeyBoardMode.getCapsLock() == true || guiKeyBoardMode.getShift() == true) { -//// tmpKey += (int)'A' - (int)'a'; -//// } -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action==GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)tmpKey); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// KeyKeyboard.character, -// (action!=GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey, -// (char)tmpKey); -// } -// } -// default: -// find = false; -//// { -//// char buf[11]; -//// //GALE_DEBUG("Keycode: " << event.xkey.keycode); -//// // change keystate for simple reson of the ctrl error... -//// int32_t keyStateSave = event.xkey.state; -//// if (event.xkey.state & (1<<2) ) { -//// event.xkey.state = event.xkey.state & 0xFFFFFFFB; -//// } -//// KeySym keysym; -//// Status status = 0; -//// //int count = Xutf8LookupString(m_xic, (XKeyPressedEvent*)&event, buf, 10, &keysym, &status); -//// int count = Xutf8LookupString(m_xic, &event.xkey, buf, 10, &keysym, &status); -//// // retreave real keystate -//// event.xkey.state = keyStateSave; -//// buf[count] = '\0'; -//// // Replace \r error ... -//// if (buf[0] == '\r') { -//// buf[0] = '\n'; -//// buf[1] = '\0'; -//// } -//// if (count >= 0) { -//// // repeated kay from previous element : -//// if (count > 0) { -//// // transform it in unicode -//// m_lastKeyPressed = utf8::convertChar32(buf); -//// } -//// X11_INFO("event Key : " << event.xkey.keycode << " char=\"" << buf << "\"'len=" << strlen(buf) << " unicode=" << m_lastKeyPressed); -//// OS_setKeyboard(m_guiKeyBoardMode, -//// gale::key::keyboard::character, -//// (event.type==KeyPress?gale::key::status::down:gale::key::status::up), -//// thisIsAReapeateKey, -//// m_lastKeyPressed); -//// if (thisIsAReapeateKey == true) { -//// OS_setKeyboard(m_guiKeyBoardMode, -//// gale::key::keyboard::character, -//// (event.type!=KeyPress?gale::key::status::down:gale::key::status::up), -//// thisIsAReapeateKey, -//// m_lastKeyPressed); -//// } -//// } else { -//// GALE_WARNING("Unknow event Key : " << event.xkey.keycode << " res='" << buf << "' repeate=" << thisIsAReapeateKey); -//// } -//// } -//// break; -// } -// if (find == true) { -// OS_setKeyboard(guiKeyBoardMode, -// keyInput, -// (action == GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey); -// if (thisIsAReapeateKey == true) { -// OS_setKeyboard(guiKeyBoardMode, -// keyInput, -// (action!=GLFW_PRESS?KeyStatus.down:KeyStatus.up), -// thisIsAReapeateKey); -// } -// } -//// if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) { -//// glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop -//// } -// } -// private void cursorPosCallback(long window, double xpos, double ypos) { -// if (lastPositionGrab != null) { -// cursorPos.x = lastPositionGrab.x - (float)xpos; -// cursorPos.y = -(lastPositionGrab.y - (float)ypos); -// lastPositionGrab.x = (float)xpos; -// lastPositionGrab.y = (float)ypos; -// } else { -// // TODO: use real size ... !!!! -// cursorPos.x = (float)xpos; -// cursorPos.y = /*m_currentHeight*/800.0f-(float)ypos; -// } -// // For compatibility of the Android system : -// boolean findOne = false; -// for (int iii=0; iii0) { -// inputIsPressed[4] = true; -// OS_SetInput(guiKeyBoardMode,KeyType.mouse, -// KeyStatus.down, -// 4, -// cursorPos); -// inputIsPressed[4] = false; -// OS_SetInput(guiKeyBoardMode,KeyType.mouse, -// KeyStatus.up, -// 4, -// cursorPos); -// } -// } -// private void mouseCallback(long window, int button, int action, int mods) { -// if (action == GLFW_PRESS) { -//// Log.info("mouse value: GLFW_PRESS " + action + " bt=" + button); -// if (button < MAX_MANAGE_INPUT) { -// inputIsPressed[button] = true; -// } -// OS_SetInput(guiKeyBoardMode,KeyType.mouse, -// KeyStatus.down, -// button, -// cursorPos); -// } else if (action == GLFW_RELEASE) { -//// Log.info("mouse value: GLFW_RELEASE" + action + " bt=" + button); -// leftButtonStateDown = false; -// if (button < MAX_MANAGE_INPUT) { -// inputIsPressed[button] = false; -// } -// OS_SetInput(guiKeyBoardMode,KeyType.mouse, -// KeyStatus.up, -// button, -// cursorPos); -//// } else { -//// Log.info("mouse value: ???" + action + " bt=" + button); -// } -// } + private int getUniqueIndex(KeyEvent e) { + int internalKeyValue = e.getKeyCode(); + if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { + internalKeyValue += 100000000; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { + internalKeyValue += 200000000; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD) { + internalKeyValue += 300000000; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_STANDARD) { + internalKeyValue += 400000000; + } + return internalKeyValue; + } + public void keyPressed(KeyEvent e) { + int internalKeyValue = getUniqueIndex(e); + int index = pressedKey.indexOf(internalKeyValue); + if (index == -1) { + pressedKey.add(internalKeyValue); + } + keyEvent(e, true, index != -1); + } + public void keyReleased(KeyEvent e) { + int internalKeyValue = getUniqueIndex(e); + int index = pressedKey.indexOf(internalKeyValue); + if (index == -1) { + pressedKey.remove(internalKeyValue); + } + keyEvent(e, false, false); + } + public void keyEvent(KeyEvent e, boolean pressed, boolean thisIsAReapeateKey) { + //Log.info("event " + thisIsAReapeateKey + " " + e.getKeyCode() + " " + e); + boolean find = true; + KeyKeyboard keyInput = KeyKeyboard.unknow; + //Log.error("keyboard input " + e.getWhen() + " " + e.getKeyCode() + " " + e.getKeyLocation()); + switch (e.getKeyCode()) { + //case 328: // keypad + case KeyEvent.VK_UP: keyInput = KeyKeyboard.up; break; + //case 324: // keypad + case KeyEvent.VK_LEFT: keyInput = KeyKeyboard.left; break; + //case 326: // keypad + case KeyEvent.VK_RIGHT: keyInput = KeyKeyboard.right; break; + //case 323: // keypad + case KeyEvent.VK_DOWN: keyInput = KeyKeyboard.down; break; + //case 329: // keypad + case KeyEvent.VK_PAGE_UP: keyInput = KeyKeyboard.pageUp; break; + //case 323: // keypad + case KeyEvent.VK_PAGE_DOWN: keyInput = KeyKeyboard.pageDown; break; + //case 327: // keypad + case KeyEvent.VK_HOME: keyInput = KeyKeyboard.start; break; + //case 321: // keypad + case KeyEvent.VK_END: keyInput = KeyKeyboard.end; break; + case KeyEvent.VK_PRINTSCREEN:keyInput = KeyKeyboard.stopDefil; break; + case KeyEvent.VK_PAUSE: keyInput = KeyKeyboard.wait; break; + //case 320: // keypad + case KeyEvent.VK_INSERT: + keyInput = KeyKeyboard.insert; + if(pressed == false) { + if (guiKeyBoardMode.getInsert() == true) { + guiKeyBoardMode.setInsert(false); + } else { + guiKeyBoardMode.setInsert(true); + } + } + break; + //case 84: keyInput = KeyboardCenter; break; // Keypad + case KeyEvent.VK_F1: keyInput = KeyKeyboard.f1; break; + case KeyEvent.VK_F2: keyInput = KeyKeyboard.f2; break; + case KeyEvent.VK_F3: keyInput = KeyKeyboard.f3; break; + case KeyEvent.VK_F4: keyInput = KeyKeyboard.f4; break; + case KeyEvent.VK_F5: keyInput = KeyKeyboard.f5; break; + case KeyEvent.VK_F6: keyInput = KeyKeyboard.f6; break; + case KeyEvent.VK_F7: keyInput = KeyKeyboard.f7; break; + case KeyEvent.VK_F8: keyInput = KeyKeyboard.f8; break; + case KeyEvent.VK_F9: keyInput = KeyKeyboard.f9; break; + case KeyEvent.VK_F10: keyInput = KeyKeyboard.f10; break; + case KeyEvent.VK_F11: keyInput = KeyKeyboard.f11; break; + case KeyEvent.VK_F12: keyInput = KeyKeyboard.f12; break; + case KeyEvent.VK_CAPS_LOCK: + keyInput = KeyKeyboard.capLock; + guiKeyBoardMode.setCapsLock(pressed == true); + break; + case KeyEvent.VK_SHIFT: + if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { + keyInput = KeyKeyboard.shiftLeft; guiKeyBoardMode.setShiftLeft (pressed == true); break; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT) { + keyInput = KeyKeyboard.shiftLeft; guiKeyBoardMode.setShiftRight (pressed == true); break; + } + case KeyEvent.VK_CONTROL: + if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { + keyInput = KeyKeyboard.ctrlLeft; guiKeyBoardMode.setCtrlLeft (pressed == true); break; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT) { + keyInput = KeyKeyboard.ctrlRight; guiKeyBoardMode.setCtrlRight (pressed == true); break; + } + case KeyEvent.VK_META: + if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT) { + keyInput = KeyKeyboard.metaLeft; guiKeyBoardMode.setMetaLeft (pressed == true); break; + } else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT) { + keyInput = KeyKeyboard.metaRight; guiKeyBoardMode.setMetaRight (pressed == true); break; + } + case KeyEvent.VK_ALT: + keyInput = KeyKeyboard.altLeft; + guiKeyBoardMode.setAltLeft(pressed == true); + break; + case KeyEvent.VK_ALT_GRAPH: + keyInput = KeyKeyboard.altRight; + guiKeyBoardMode.setAltRight(pressed == true); + break; + case KeyEvent.VK_CONTEXT_MENU: + keyInput = KeyKeyboard.contextMenu; + break; + case KeyEvent.VK_NUM_LOCK: + keyInput = KeyKeyboard.numLock; + guiKeyBoardMode.setNumLock(pressed == true); + break; + case KeyEvent.VK_DELETE: // Suppr on keypad + find = false; + if(guiKeyBoardMode.getNumLock() == true){ + if (thisIsAReapeateKey == true) { + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed != true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + '.'); + } + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed == true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + '.'); + } else { + if (thisIsAReapeateKey == true) { + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed != true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + (char)0x7F); + } + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed == true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + (char)0x7F); + } + break; + case KeyEvent.VK_TAB: // special case for TAB + find = false; + if (thisIsAReapeateKey == true) { + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed==false?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + (char)0x09); + } + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed == true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + (char)0x09); + break; + default: + find = false; + if (thisIsAReapeateKey == true) { + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed==false?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + e.getKeyChar()); + } + OS_setKeyboard(guiKeyBoardMode, + KeyKeyboard.character, + (pressed==true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey, + e.getKeyChar()); + } + if (find == true) { + if (thisIsAReapeateKey == true) { + OS_setKeyboard(guiKeyBoardMode, + keyInput, + (pressed==false?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey); + } + OS_setKeyboard(guiKeyBoardMode, + keyInput, + (pressed == true?KeyStatus.down:KeyStatus.up), + thisIsAReapeateKey); + } + } + + public void keyTyped(KeyEvent e) { + // not needed with my model ... + //Log.info(" typed " + e.getKeyChar() + " " + e); + } + + + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + //Log.info("wheel_event : " + e); + cursorPos.x = e.getX(); + cursorPos.y = e.getY(); + if (e.getWheelRotation()<0) { + inputIsPressed[5] = true; + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.down, + 5, + cursorPos); + inputIsPressed[5] = false; + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.up, + 5, + cursorPos); + } else if (e.getWheelRotation()>0) { + inputIsPressed[4] = true; + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.down, + 4, + cursorPos); + inputIsPressed[4] = false; + OS_SetInput(guiKeyBoardMode, + KeyType.mouse, + KeyStatus.up, + 4, + cursorPos); + } + } public static float getFrameTimeSecconds() { return delta; } @@ -648,30 +503,34 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ return System.currentTimeMillis(); } - - public static boolean isButtonRightDown() { - return rightButtonStateDown; - } - public static boolean isButtonLeftDown() { - return leftButtonStateDown; - } - - - public static float getDX() { - return (float) (currentMousePositionX-lastMousePositionX); - } - public static float getDY() { - return (float) (currentMousePositionY-lastMousePositionY); - } - - - public static float getDWheel() { - // TODO Auto-generated method stub - return (float) whellOffsetY; - } - @Override public int run() { + Runnable renderLoop = new Runnable() { + public void run() { +// fps.tic(); + if (!canvas.isValid()) { + System.exit(0); + return; + } + canvas.render(); +// fps.toc(); +// fps.draw(); + SwingUtilities.invokeLater(this); + } + }; + SwingUtilities.invokeLater(renderLoop); + + +// while (canvas != null && canvas.isValid()) { +// canvas.render(); +// try { +// Thread.sleep(10); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } + // Run the rendering loop until the user has attempted to close // the window or has pressed the ESCAPE key. // while ( !glfwWindowShouldClose(window) ) { @@ -696,7 +555,7 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ // fps.toc(); // fps.draw(); // */ -// OS_Draw(true); +// // glfwSwapBuffers(window); // swap the color buffers // glfwPollEvents(); // /* @@ -710,7 +569,7 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ // } // */ // } -// System.exit(0); + //System.exit(0); return 0; } /****************************************************************************************/ @@ -721,26 +580,50 @@ public class ContextLWJGL_AWT extends Context implements MouseListener{ @Override public void setIcon(Uri inputFile) { + } + private void hideCursor() { + int[] pixels = new int[16 * 16]; + Image image = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(16, 16, pixels, 0, 16)); + Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisiblecursor"); + frame.setCursor(transparentCursor); + } + private void showCursor() { + frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } @Override public void grabPointerEvents(boolean _status, Vector2f _forcedPosition) { if (_status == true) { - // permit to leave the windows - //glfwSetInputMode(this.window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); - // Not permit to leave the windows -// glfwSetInputMode(this.window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); - lastPositionGrab = _forcedPosition.clone(); + try { + this.robot = new Robot(); + hideCursor(); + } catch (AWTException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } else { -// glfwSetInputMode(this.window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); - lastPositionGrab = null; + this.robot = null; + showCursor(); } }; @Override - public boolean isGrabPointerEvents() { return lastPositionGrab != null; }; - + public boolean isGrabPointerEvents() { return this.robot != null; }; + @Override + public void setFullScreen(boolean status){ + super.setFullScreen(status); + if (status == true) { + frame.setExtendedState(JFrame.MAXIMIZED_BOTH); + frame.setUndecorated(true); + } else { + frame.setExtendedState(JFrame.NORMAL); + frame.setUndecorated(false); + } + }; + public static Context create(Application application, String[] arg) { // TODO Auto-generated method stub return new ContextLWJGL_AWT(application, arg); } + + } diff --git a/src/org/atriaSoft/gale/resource/ResourceColored3DObject.java b/src/org/atriaSoft/gale/resource/ResourceColored3DObject.java new file mode 100644 index 0000000..c5e952e --- /dev/null +++ b/src/org/atriaSoft/gale/resource/ResourceColored3DObject.java @@ -0,0 +1,559 @@ +package org.atriaSoft.gale.resource; + +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.List; + +import org.atriaSoft.etk.Color; +import org.atriaSoft.etk.Uri; +import org.atriaSoft.etk.math.Matrix4f; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.Log; +import org.atriaSoft.gale.backend3d.OpenGL; +import org.atriaSoft.gale.backend3d.OpenGL.RenderMode; +import org.atriaSoft.gameEngine.resource.ResourceListTexturedMesh; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL40; + +public class ResourceColored3DObject extends Resource { + private ResourceProgram program; + private int GLPosition; + private int GLColor; + private int GLMatrixTransformation; + private int GLMatrixProjection; + private int GLMatrixView; + protected ResourceColored3DObject() { + super(); + addResourceType("ResourceColored3DObject"); + // get the shader resource : + this.GLPosition = 0; + this.program = ResourceProgram.create(new Uri("DATA_EGE", "simple3D.vert"), new Uri("DATA_EGE", "simple3D.frag")); + if (this.program != null) { + this.GLMatrixTransformation = this.program.getUniform("in_matrixTransformation"); + this.GLMatrixProjection = this.program.getUniform("in_matrixProjection"); + this.GLMatrixView = this.program.getUniform("in_matrixView"); + this.GLPosition = this.program.getAttribute("in_position"); + this.GLColor = this.program.getUniform("in_colors"); + } + } + public void draw(List vertices, + Color color, + boolean updateDepthBuffer, + boolean depthtest) { + if (vertices.size() <= 0) { + return; + } + if (this.program == null) { + Log.error("No shader ..."); + return; + } + if (true == depthtest) { + OpenGL.enable(OpenGL.Flag.flag_depthTest); + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(false); + } + } + //Log.debug(" display " << this.coord.size() << " elements" ); + this.program.use(); + Matrix4f projectionMatrix = OpenGL.getMatrix(); + Matrix4f viewMatrix = OpenGL.getCameraMatrix(); + Matrix4f transformationMatrix = Matrix4f.identity(); + this.program.uniformMatrix(this.GLMatrixView, viewMatrix); + this.program.uniformMatrix(this.GLMatrixProjection, projectionMatrix); + this.program.uniformMatrix(this.GLMatrixTransformation, transformationMatrix); + // color : + this.program.uniformColor(this.GLColor, color); + // position : + FloatBuffer buffer = storeDataInFloatBuffer(convertInFloat(vertices)); + this.program.sendAttribute(this.GLPosition, 3, buffer, 3); + if (color.a < 1.0f) { + OpenGL.enable(OpenGL.Flag.flag_blend); + } + // Request the draw of the elements: + OpenGL.drawArrays(OpenGL.RenderMode.triangle, 0, vertices.size()); + if (color.a < 1.0f) { + OpenGL.disable(OpenGL.Flag.flag_blend); + } + this.program.unUse(); + // Request the draw od the elements: + //glDrawArrays(GLLINES, 0, vertices.size()); + //this.GLprogram.UnUse(); + if (true == depthtest) { + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(true); + } + OpenGL.disable(OpenGL.Flag.flag_depthTest); + } + } + private float[] convertInFloat(List data) { + float[] out = new float[data.size()*3]; + for (int iii=0; iii vertices, + Color color, + Matrix4f transformationMatrix, + boolean updateDepthBuffer, + boolean depthtest) { + if (vertices.size() <= 0) { + return; + } + if (this.program == null) { + Log.error("No shader ..."); + return; + } + if (true == depthtest) { + OpenGL.enable(OpenGL.Flag.flag_depthTest); + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(false); + } + } + //Log.debug(" display " << this.coord.size() << " elements" ); + this.program.use(); + // set Matrix: translation/positionMatrix + Matrix4f projectionMatrix = OpenGL.getMatrix(); + Matrix4f viewMatrix = OpenGL.getCameraMatrix(); + this.program.uniformMatrix(this.GLMatrixView, viewMatrix); + this.program.uniformMatrix(this.GLMatrixProjection, projectionMatrix); + this.program.uniformMatrix(this.GLMatrixTransformation, transformationMatrix); + // position : + FloatBuffer buffer = storeDataInFloatBuffer(convertInFloat(vertices)); + this.program.sendAttribute(this.GLPosition, 3, buffer, 3); + // color : + Log.info("color= " + color + " " + this.GLPosition); + this.program.uniformColor(this.GLColor, color); + if (color.a < 1.0f) { + OpenGL.enable(OpenGL.Flag.flag_blend); + } + // Request the draw of the elements: + OpenGL.drawArrays(OpenGL.RenderMode.triangle, 0, vertices.size()); + if (color.a < 1.0f) { + OpenGL.disable(OpenGL.Flag.flag_blend); + } + this.program.unUse(); + if (true == depthtest) { + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(true); + } + OpenGL.disable(OpenGL.Flag.flag_depthTest); + } + } + public void drawLine(List vertices, + Color color, + Matrix4f transformationMatrix, + boolean updateDepthBuffer, + boolean depthtest) { + if (vertices.size() <= 0) { + return; + } + if (this.program == null) { + Log.error("No shader ..."); + return; + } + if (true == depthtest) { + OpenGL.enable(OpenGL.Flag.flag_depthTest); + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(false); + } + } + //Log.debug(" display " << this.coord.size() << " elements" ); + this.program.use(); + // set Matrix: translation/positionMatrix + Matrix4f projectionMatrix = OpenGL.getMatrix(); + Matrix4f viewMatrix = OpenGL.getCameraMatrix(); + this.program.uniformMatrix(this.GLMatrixView, viewMatrix); + this.program.uniformMatrix(this.GLMatrixProjection, projectionMatrix); + this.program.uniformMatrix(this.GLMatrixTransformation, transformationMatrix); + // position : + FloatBuffer buffer = storeDataInFloatBuffer(convertInFloat(vertices)); + this.program.sendAttribute(this.GLPosition, 3, buffer, 3); + // color : + this.program.uniformColor(this.GLColor, color); + if (color.a < 1.0f) { + OpenGL.enable(OpenGL.Flag.flag_blend); + } + // Request the draw od the elements: + OpenGL.drawArrays(OpenGL.RenderMode.line, 0, vertices.size()); + if (color.a < 1.0f) { + OpenGL.disable(OpenGL.Flag.flag_blend); + } + this.program.unUse(); + if (true == depthtest) { + if (false == updateDepthBuffer) { + OpenGL.setDeathMask(true); + } + OpenGL.disable(OpenGL.Flag.flag_depthTest); + } + } + public void drawCubeLine(Vector3f min, + Vector3f max, + Color color, + Matrix4f transformationMatrix, + boolean updateDepthBuffer, + boolean depthtest) { + List vertices = new ArrayList(); + vertices.add(new Vector3f(min.x, min.y,min.z)); + vertices.add(new Vector3f(max.x, min.y,min.z)); + + vertices.add(new Vector3f(max.x, min.y,min.z)); + vertices.add(new Vector3f(max.x, min.y,max.z)); + + vertices.add(new Vector3f(max.x, min.y,max.z)); + vertices.add(new Vector3f(min.x, min.y,max.z)); + + vertices.add(new Vector3f(min.x, min.y,max.z)); + vertices.add(new Vector3f(min.x, min.y,min.z)); + + + vertices.add(new Vector3f(min.x, max.y,min.z)); + vertices.add(new Vector3f(max.x, max.y,min.z)); + + vertices.add(new Vector3f(max.x, max.y,min.z)); + vertices.add(new Vector3f(max.x, max.y,max.z)); + + vertices.add(new Vector3f(max.x, max.y,max.z)); + vertices.add(new Vector3f(min.x, max.y,max.z)); + + vertices.add(new Vector3f(min.x, max.y,max.z)); + vertices.add(new Vector3f(min.x, max.y,min.z)); + + + vertices.add(new Vector3f(min.x, min.y,min.z)); + vertices.add(new Vector3f(min.x, max.y,min.z)); + + vertices.add(new Vector3f(max.x, min.y,min.z)); + vertices.add(new Vector3f(max.x, max.y,min.z)); + + vertices.add(new Vector3f(max.x, min.y,max.z)); + vertices.add(new Vector3f(max.x, max.y,max.z)); + + vertices.add(new Vector3f(min.x, min.y,max.z)); + vertices.add(new Vector3f(min.x, max.y,max.z)); + drawLine(vertices, color, transformationMatrix, updateDepthBuffer, depthtest); + } + public void drawSquare(Vector3f size, + Matrix4f transformationMatrix, + Color tmpColor) { + List tmpVertices = new ArrayList(); + int indices[] = { 0,1,2, 3,2,1, 4,0,6, + 6,0,2, 5,1,4, 4,1,0, + 7,3,1, 7,1,5, 5,4,7, + 7,4,6, 7,2,3, 7,6,2}; + Vector3f vertices[]={ new Vector3f(size.x,size.y,size.z), + new Vector3f(-size.x,size.y,size.z), + new Vector3f(size.x,-size.y,size.z), + new Vector3f(-size.x,-size.y,size.z), + new Vector3f(size.x,size.y,-size.z), + new Vector3f(-size.x,size.y,-size.z), + new Vector3f(size.x,-size.y,-size.z), + new Vector3f(-size.x,-size.y,-size.z)}; + tmpVertices.clear(); + for (int iii=0 ; iii<36 ; iii+=3) { + // normal calculation : + //btVector3 normal = (vertices[indices[iii+2]]-vertices[indices[iii]]).cross(vertices[indices[iii+1]]-vertices[indices[iii]]); + //normal.normalize (); + tmpVertices.add(vertices[indices[iii]]); + tmpVertices.add(vertices[indices[iii+1]]); + tmpVertices.add(vertices[indices[iii+2]]); + } + draw(tmpVertices, tmpColor, transformationMatrix, true, true); + } + public void drawSphere(float radius, + int lats, + int longs, + Matrix4f transformationMatrix, + Color tmpColor) { + List tmpVertices = new ArrayList();; + for(int iii=0; iii<=lats; ++iii) { + float lat0 = (float)Math.PI * (-0.5f + (float)(iii - 1) / lats); + float z0 = radius*(float)Math.sin(lat0); + float zr0 = radius*(float)Math.cos(lat0); + + float lat1 = (float)Math.PI * (-0.5f + (float)(iii) / lats); + float z1 = radius*(float)Math.sin(lat1); + float zr1 = radius*(float)Math.cos(lat1); + + for(int jjj=0; jjj tmpVertices = new ArrayList();; + // center to border (TOP) + + // center to border (TOP) + for(int jjj=0; jjj tmpVertices = new ArrayList();; + lats = (int)(lats / 2)*2; + + // center to border (TOP) + float offset = size*0.5f; + for(int iii=lats/2+1; iii<=lats; ++iii) { + float lat0 = (float)Math.PI * (-0.5f + (float)(iii - 1) / lats); + float z0 = radius*(float)Math.sin(lat0); + float zr0 = radius*(float)Math.cos(lat0); + + float lat1 = (float)Math.PI * (-0.5f + (float)(iii) / lats); + float z1 = radius*(float)Math.sin(lat1); + float zr1 = radius*(float)Math.cos(lat1); + + for(int jjj=0; jjj tmpVertices = new ArrayList(); + // center to border (TOP) + for(int jjj=0; jjj vertex, + List indice, + Matrix4f transformationMatrix, + Color tmpColor, + Vector3f offset) {// = new Vector3f(0,0,0.1f) + List tmpVertices = new ArrayList();; + for (int iii=0; iii elementList = new ArrayList(); //!< List of all the attribute requested by the user - private List listOfVBOUsed = new ArrayList(); //!< retain the list of VBO used to disable it when unuse program ... - private boolean hasTexture = false; //!< A texture has been set to the current shader - private boolean hasTexture1 = false; //!< A texture has been set to the current shader +// private List listOfVBOUsed = new ArrayList(); //!< retain the list of VBO used to disable it when unuse program ... +// private boolean hasTexture = false; //!< A texture has been set to the current shader +// private boolean hasTexture1 = false; //!< A texture has been set to the current shader /** * @brief Contructor of an opengl Program. * @param[in] uri Uri of the file @@ -85,8 +79,8 @@ public class ResourceProgram extends Resource { this.shaderVertex = null; } this.elementList.clear(); - this.hasTexture = false; - this.hasTexture1 = false; +// this.hasTexture = false; +// this.hasTexture1 = false; } /** * @brief Check If an Id is valid in the shader or not (sometime the shader have not some attribute, then we need to display some error) @@ -240,18 +234,24 @@ public class ResourceProgram extends Resource { // GL20.glVertexAttribPointer(attributeNumber, coordinateSize, GL11.GL_FLOAT, false, 0, 0); // GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // } + + private float[] convertInFloat(List data) { + float[] out = new float[data.size()*3]; + for (int iii=0; iii data) { -// sendAttribute(idElem, 2/*u,v / x,y*/, data[0]); -// } -// public void sendAttribute(int idElem, etk::Vector data) { -// sendAttribute(idElem, 3/*x,y,z,unused*/, data[0], 4*sizeof(btScalar)); +//// public void sendAttribute(int idElem, etk::Vector data) { +//// sendAttribute(idElem, 2/*u,v / x,y*/, data[0]); +//// } +// public void sendAttribute(int idElem, List data) { +// sendAttribute3fv(idElem, convertInFloat(data)); // } + public void sendAttribute(int idElem, int nbElement, FloatBuffer data, int jumpBetweenSample) { + if (this.exist == false) { + return; + } + if ( idElem < 0 + || (long)idElem > this.elementList.size()) { + Log.error("idElem = " + idElem + " not in [0.." + (this.elementList.size()-1) + "]"); + return; + } + if (this.elementList.get(idElem).isLinked == false) { + return; + } + //GL40.glBindVertexArray(this.elementList.get(idElem).elementId); + Log.error("[" + this.elementList.get(idElem).name + "] send " + 3 + " element"); + GL40.glVertexAttribPointer( + this.elementList.get(idElem).elementId, + nbElement, + GL40.GL_FLOAT, + false, + jumpBetweenSample*4, /* 4 is the size of float in the generic system...*/ + data); + //checkGlError("glVertexAttribPointer", LINE, idElem); + GL40.glEnableVertexAttribArray(this.elementList.get(idElem).elementId); + //checkGlError("glEnableVertexAttribArray", LINE, idElem); + } // public void sendAttribute(int idElem, etk::Vector> data) { // sendAttribute(idElem, 4/*r,g,b,a*/, data[0]); // } diff --git a/src/org/atriaSoft/gale/resource/ResourceVirtualArrayObject.java b/src/org/atriaSoft/gale/resource/ResourceVirtualArrayObject.java index 002fca6..75e7f94 100644 --- a/src/org/atriaSoft/gale/resource/ResourceVirtualArrayObject.java +++ b/src/org/atriaSoft/gale/resource/ResourceVirtualArrayObject.java @@ -42,6 +42,7 @@ public class ResourceVirtualArrayObject extends Resource { GL30.glBindVertexArray(vaoID); if (positions != null) { GL20.glEnableVertexAttribArray(INDICE_VBO_POSITIONS); + //Log.info("unbind POSITION"); } if (textureCoordinates != null) { GL20.glEnableVertexAttribArray(INDICE_VBO_TEXTURE_COORDINATES); diff --git a/src/org/atriaSoft/gameEngine/ControlCameraPlayer.java b/src/org/atriaSoft/gameEngine/ControlCameraPlayer.java index 161eb64..ab31603 100644 --- a/src/org/atriaSoft/gameEngine/ControlCameraPlayer.java +++ b/src/org/atriaSoft/gameEngine/ControlCameraPlayer.java @@ -18,17 +18,16 @@ import renderEngine.DisplayManager; public class ControlCameraPlayer implements ControlInterface { private Camera camera; - private float distanceFromCenter = 20; - private float angleZ = 0; - private float pitch = 0; + private float distanceFromCenter = 2.5f; + private boolean fpsMode = false; private Entity playerEntity; - private Vector2f lastMousePosition = null; private ComponentPositionPlayer playerPosition; private ComponentPlayer player; private boolean moveUp = false; private boolean moveDown = false; private boolean moveLeft = false; private boolean moveRight = false; + private boolean walk = false; public ControlCameraPlayer(Camera camera, Entity playerEntity) { this.camera = camera; @@ -47,18 +46,36 @@ public class ControlCameraPlayer implements ControlInterface { } @Override public boolean onEventEntry(EventEntry event) { - if(event.getType() == KeyKeyboard.up) { + if(event.getType() == KeyKeyboard.up + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'z' || event.getChar() == 'Z' ))) { moveUp = getState(event.getStatus(), moveUp); } - if(event.getType() == KeyKeyboard.left) { + if(event.getType() == KeyKeyboard.left + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'q' || event.getChar() == 'Q' ))) { moveLeft = getState(event.getStatus(), moveLeft); } - if(event.getType() == KeyKeyboard.right) { + if(event.getType() == KeyKeyboard.right + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'd' || event.getChar() == 'D' ))) { moveRight = getState(event.getStatus(), moveRight); } - if(event.getType() == KeyKeyboard.down) { + if(event.getType() == KeyKeyboard.down + || (event.getType() == KeyKeyboard.character && (event.getChar() == 's' || event.getChar() == 'S' ))) { moveDown = getState(event.getStatus(), moveDown); } + if(event.getType() == KeyKeyboard.shiftLeft || event.getType() == KeyKeyboard.shiftRight) { + walk = event.getSpecialKey().getShift(); + } + if(event.getType() == KeyKeyboard.f10) { + if (event.getStatus() == KeyStatus.up) { + if (fpsMode == false) { + fpsMode = true; + distanceFromCenter = 0; + } else { + fpsMode = false; + distanceFromCenter = 2.5f; + } + } + } return false; } @@ -66,16 +83,26 @@ public class ControlCameraPlayer implements ControlInterface { public boolean onEventInput(EventInput event, Vector2f relativePosition) { // Log.info("" + event); // TODO Auto-generated method stub - if (event.getInputId() == 4) { - if (event.getStatus() == KeyStatus.down) { - distanceFromCenter -= 1; + if (fpsMode == false) { + if (event.getInputId() == 4) { + if (event.getStatus() == KeyStatus.down) { + distanceFromCenter -= 0.2; + } + if (distanceFromCenter < 0.0) { + distanceFromCenter = 0.0f; + } + return true; + } else if (event.getInputId() == 5) { + if (event.getStatus() == KeyStatus.down) { + distanceFromCenter += 0.2; + } + if (distanceFromCenter < 0.3) { + distanceFromCenter = 0.3f; + } + return true; } - return true; - } else if (event.getInputId() == 5) { - if (event.getStatus() == KeyStatus.down) { - distanceFromCenter += 1; - } - return true; + } else { + distanceFromCenter = 0; } // TODO: check if grabbing is enable ... // in grabbing mouse only: @@ -86,14 +113,15 @@ public class ControlCameraPlayer implements ControlInterface { Vector2f delta = event.getPosition().clone(); //angleZ += delta.x; //this.camera.setYaw(this.camera.getYaw() + (float)Math.toRadians(delta.x)); - this.camera.setPitch(this.camera.getPitch() + (float)Math.toRadians(delta.y)); + this.camera.setPitch(this.camera.getPitch() + (float)Math.toRadians(delta.y * this.player.getTurnSpeed())); if (this.camera.getPitch()>0) { this.camera.setPitch(0); } if (this.camera.getPitch()<-Math.PI) { this.camera.setPitch((float)-Math.PI); } - this.camera.setRoll(this.camera.getRoll() - (float)Math.toRadians(delta.x)); + /* + this.camera.setRoll(this.camera.getRoll() - (float)Math.toRadians(delta.x * this.player.getTurnSpeed())); Log.info("Change camera: " + this.camera.getYaw() + " " + this.camera.getPitch()); if (this.camera.getRoll()>Math.PI) { this.camera.setRoll(this.camera.getRoll()-(float)Math.PI*2.0f); @@ -101,7 +129,19 @@ public class ControlCameraPlayer implements ControlInterface { if (this.camera.getRoll()<-Math.PI) { this.camera.setRoll(this.camera.getRoll()+(float)Math.PI*2.0f); } - this.playerPosition.setAngles(new Vector3f(0,0,this.camera.getRoll())); + this.playerPosition.setAngles(new Vector3f(0,0,-this.camera.getRoll())); + */ + float tmpAngle = this.playerPosition.getAngles().z + (float)Math.toRadians(delta.x * this.player.getTurnSpeed()); + + if (tmpAngle > Math.PI) { + tmpAngle -= (float)Math.PI*2.0f; + } + if (tmpAngle < -Math.PI) { + tmpAngle += (float)Math.PI*2.0f; + } + this.playerPosition.setAngles(new Vector3f(0,0,tmpAngle)); + this.camera.setRoll(-this.playerPosition.getAngles().z); + Log.info("Change camera: " + this.camera.getYaw() + " " + this.camera.getPitch()); } return false; } @@ -109,6 +149,11 @@ public class ControlCameraPlayer implements ControlInterface { @Override public void periodicCall(EventTime event) { float speed = 0; + float walkFactor = 1; + if (this.walk == true) { + walkFactor = this.player.getWalkFactor(); + } + //distanceFromCenter = 6; if (moveUp != moveDown) { if (moveUp) { speed = this.player.getRunSpeed(); @@ -116,16 +161,36 @@ public class ControlCameraPlayer implements ControlInterface { speed = -this.player.getRunSpeed(); } } - float distance = speed * event.getTimeDeltaCallSecond(); - float dx = (float) (distance * Math.sin(this.playerPosition.getAngles().z)); + float distance = speed * walkFactor * event.getTimeDeltaCallSecond(); + float dx = -(float) (distance * Math.sin(this.playerPosition.getAngles().z)); float dy = (float) (distance * Math.cos(this.playerPosition.getAngles().z)); - - Log.error("update position ..." + dx + " " + dy); - this.playerPosition.getTransform().getPosition().x += dx; - this.playerPosition.getTransform().getPosition().y += dy; - this.camera.getPosition().x = this.playerPosition.getTransform().getPosition().x; - this.camera.getPosition().y = this.playerPosition.getTransform().getPosition().y; - this.camera.getPosition().z = this.playerPosition.getTransform().getPosition().z; + speed = 0; + if (moveRight != moveLeft) { + if (moveRight) { + speed = this.player.getStrafSpeed(); + } else { + speed = -this.player.getStrafSpeed(); + } + } + distance = speed * walkFactor * event.getTimeDeltaCallSecond(); + float dxStraf = (float) (distance * Math.sin((float)Math.PI*0.5f + this.playerPosition.getAngles().z)); + float dyStraf = -(float) (distance * Math.cos((float)Math.PI*0.5f + this.playerPosition.getAngles().z)); + //Log.error("update position ..." + dx + " " + dy); + this.playerPosition.getTransform().getPosition().x += dx + dxStraf; + this.playerPosition.getTransform().getPosition().y += dy + dyStraf; + // here the camera is behind the player, we need to move the camera ... + //Log.info(" pitch: " + Math.toDegrees(this.camera.getPitch()) + " " + Math.toDegrees(this.playerPosition.getAngles().z)); + float horinzontalDistance = (float) (distanceFromCenter * Math.sin(this.camera.getPitch())); + float verticalDistance = (float) (distanceFromCenter * Math.cos(this.camera.getPitch())); + //Log.info(" distanceFromCenter " + distanceFromCenter); + float tmp = -horinzontalDistance; + float theta = (float)Math.PI + this.playerPosition.getAngles().z;// - (float)Math.PI*0.5f; + float offsetX = (float) (tmp * Math.sin(-theta)); + float offsetY = (float) (tmp * Math.cos(-theta)); + //Log.info(" res" + offsetX + " " + offsetY); + this.camera.getPosition().x = this.playerPosition.getTransform().getPosition().x + offsetX; + this.camera.getPosition().y = this.playerPosition.getTransform().getPosition().y + offsetY; + this.camera.getPosition().z = this.playerPosition.getTransform().getPosition().z + 1.6f + verticalDistance; } } diff --git a/src/org/atriaSoft/gameEngine/ControlCameraPlayerFPS.java b/src/org/atriaSoft/gameEngine/ControlCameraPlayerFPS.java new file mode 100644 index 0000000..e366e41 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/ControlCameraPlayerFPS.java @@ -0,0 +1,128 @@ +package org.atriaSoft.gameEngine; + +import org.atriaSoft.etk.math.Vector2f; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.Gale; +import org.atriaSoft.gale.event.EventEntry; +import org.atriaSoft.gale.event.EventInput; +import org.atriaSoft.gale.event.EventTime; +import org.atriaSoft.gale.key.KeyKeyboard; +import org.atriaSoft.gale.key.KeyStatus; +import org.atriaSoft.gameEngine.camera.Camera; +import org.atriaSoft.gameEngine.components.ComponentPlayer; +import org.atriaSoft.gameEngine.components.ComponentPosition; +import org.atriaSoft.gameEngine.components.ComponentPositionPlayer; + +import renderEngine.DisplayManager; + + +public class ControlCameraPlayerFPS implements ControlInterface { + private Camera camera; + private Entity playerEntity; + private ComponentPositionPlayer playerPosition; + private ComponentPlayer player; + private boolean moveUp = false; + private boolean moveDown = false; + private boolean moveLeft = false; + private boolean moveRight = false; + + public ControlCameraPlayerFPS(Camera camera, Entity playerEntity) { + this.camera = camera; + this.playerEntity = playerEntity; + this.playerPosition = (ComponentPositionPlayer)this.playerEntity.getComponent("position"); + this.player = (ComponentPlayer)this.playerEntity.getComponent("player"); + } + private boolean getState(KeyStatus state, boolean previousState) { + if (state == KeyStatus.down) { + return true; + } + if (state == KeyStatus.up) { + return false; + } + return previousState; + } + @Override + public boolean onEventEntry(EventEntry event) { + if(event.getType() == KeyKeyboard.up + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'z' || event.getChar() == 'z' ))) { + moveUp = getState(event.getStatus(), moveUp); + } + if(event.getType() == KeyKeyboard.left + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'q' || event.getChar() == 'Q' ))) { + moveLeft = getState(event.getStatus(), moveLeft); + } + if(event.getType() == KeyKeyboard.right + || (event.getType() == KeyKeyboard.character && (event.getChar() == 'd' || event.getChar() == 'D' ))) { + moveRight = getState(event.getStatus(), moveRight); + } + if(event.getType() == KeyKeyboard.down + || (event.getType() == KeyKeyboard.character && (event.getChar() == 's' || event.getChar() == 'S' ))) { + moveDown = getState(event.getStatus(), moveDown); + } + return false; + } + + @Override + public boolean onEventInput(EventInput event, Vector2f relativePosition) { + // Log.info("" + event); + // in grabbing mouse only: + if (Gale.getContext().isGrabPointerEvents() == false) { + return false; + } + if (event.getStatus() == KeyStatus.move) { + Vector2f delta = event.getPosition().clone(); + //angleZ += delta.x; + //this.camera.setYaw(this.camera.getYaw() + (float)Math.toRadians(delta.x)); + this.camera.setPitch(this.camera.getPitch() + (float)Math.toRadians(delta.y * this.player.getTurnSpeed())); + if (this.camera.getPitch()>0) { + this.camera.setPitch(0); + } + if (this.camera.getPitch()<-Math.PI) { + this.camera.setPitch((float)-Math.PI); + } + this.camera.setRoll(this.camera.getRoll() - (float)Math.toRadians(delta.x * this.player.getTurnSpeed())); + Log.info("Change camera: " + this.camera.getYaw() + " " + this.camera.getPitch()); + if (this.camera.getRoll()>Math.PI) { + this.camera.setRoll(this.camera.getRoll()-(float)Math.PI*2.0f); + } + if (this.camera.getRoll()<-Math.PI) { + this.camera.setRoll(this.camera.getRoll()+(float)Math.PI*2.0f); + } + this.playerPosition.setAngles(new Vector3f(0,0,this.camera.getRoll())); + } + return false; + } + + @Override + public void periodicCall(EventTime event) { + float speed = 0; + if (moveUp != moveDown) { + if (moveUp) { + speed = this.player.getRunSpeed(); + } else { + speed = -this.player.getRunSpeed(); + } + } + float distance = speed * event.getTimeDeltaCallSecond(); + float dx = (float) (distance * Math.sin(this.playerPosition.getAngles().z)); + float dy = (float) (distance * Math.cos(this.playerPosition.getAngles().z)); + speed = 0; + if (moveRight != moveLeft) { + if (moveRight) { + speed = this.player.getStrafSpeed(); + } else { + speed = -this.player.getStrafSpeed(); + } + } + distance = speed * event.getTimeDeltaCallSecond(); + float dxStraf = (float) (distance * Math.sin((float)Math.PI*0.5f + this.playerPosition.getAngles().z)); + float dyStraf = (float) (distance * Math.cos((float)Math.PI*0.5f + this.playerPosition.getAngles().z)); + //Log.error("update position ..." + dx + " " + dy); + this.playerPosition.getTransform().getPosition().x += dx + dxStraf; + this.playerPosition.getTransform().getPosition().y += dy + dyStraf; + this.camera.getPosition().x = this.playerPosition.getTransform().getPosition().x; + this.camera.getPosition().y = this.playerPosition.getTransform().getPosition().y; + this.camera.getPosition().z = this.playerPosition.getTransform().getPosition().z; + } + +} diff --git a/src/org/atriaSoft/gameEngine/Environement.java b/src/org/atriaSoft/gameEngine/Environement.java index 02521bb..f7b9800 100644 --- a/src/org/atriaSoft/gameEngine/Environement.java +++ b/src/org/atriaSoft/gameEngine/Environement.java @@ -43,10 +43,10 @@ public class Environement { public Environement() { // we add the 4 classical engines (the order is used to the global rendering cycle ... addEngine(new EnginePlayer(this)); - addEngine(new EnginePhysics(this)); addEngine(new EngineAI(this)); addEngine(new EngineDynamicMeshs(this)); addEngine(new EngineRender(this)); + addEngine(new EnginePhysics(this)); addEngine(new EngineParticle(this)); addEngine(new EngineLight(this)); } diff --git a/src/org/atriaSoft/gameEngine/components/ComponentPhysics.java b/src/org/atriaSoft/gameEngine/components/ComponentPhysics.java new file mode 100644 index 0000000..9c42779 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/components/ComponentPhysics.java @@ -0,0 +1,73 @@ +package org.atriaSoft.gameEngine.components; + +import java.util.ArrayList; +import java.util.List; + +import org.atriaSoft.etk.Color; +import org.atriaSoft.etk.math.Matrix4f; +import org.atriaSoft.gale.backend3d.OpenGL; +import org.atriaSoft.gale.resource.ResourceColored3DObject; +import org.atriaSoft.gale.test.sample2.Log; +import org.atriaSoft.gameEngine.Component; +import org.atriaSoft.gameEngine.physics.PhysicCollisionAABB; +import org.atriaSoft.gameEngine.physics.PhysicShape; + +import entities.Entity; + +public class ComponentPhysics extends Component { + private PhysicCollisionAABB aabb; + private List shapes = new ArrayList(); + private ComponentPosition position; + @Override + public String getType() { + return "physics"; + } + @Override + public void addFriendComponent(Component component) { + if (component.getType().contentEquals("position")) { + position = (ComponentPosition)component; + } + } + @Override + public void removeFriendComponent(Component component) { + // nothing to do. + } + + public void updateAABB() { + if (position == null) { + Log.info("No position in Entity "); + return; + } + // TODO: Add a flag to check if it is needed to update the AABB... + PhysicCollisionAABB aabb_new = PhysicCollisionAABB.beforeCalculated(); + for (PhysicShape shape : shapes) { + shape.updateAABB(position.getTransform(), aabb_new); + } + aabb = aabb_new; + } + + public PhysicCollisionAABB getcurrentAABB() { + return aabb; + } + public void applyForces(float timeStep) { + // TODO Auto-generated method stub + + } + public void renderDebug(ResourceColored3DObject debugDrawProperty) { + if (aabb != null) { + debugDrawProperty.drawCubeLine(aabb.getMin(), aabb.getMax(), new Color(1,1,1,1), Matrix4f.identity(), true, true); + //debugDrawProperty.drawCubeLine(new Vector3f(0,0,0), new Vector3f(32,32,32), new Color(1,0,1,1), Matrix4f.identity(), true, true); + } else { + Log.error("no AABB"); + } + for (PhysicShape shape : shapes) { + shape.renderDebug(position.getTransform(), debugDrawProperty); + } + } + public void addShape(PhysicShape shape) { + shapes.add(shape); + } + public void clearShape() { + shapes.clear(); + } +} diff --git a/src/org/atriaSoft/gameEngine/components/ComponentPlayer.java b/src/org/atriaSoft/gameEngine/components/ComponentPlayer.java index d5c2494..1a15078 100644 --- a/src/org/atriaSoft/gameEngine/components/ComponentPlayer.java +++ b/src/org/atriaSoft/gameEngine/components/ComponentPlayer.java @@ -5,8 +5,10 @@ import org.atriaSoft.gameEngine.engines.EnginePlayer; public class ComponentPlayer extends Component { private float runSpeed = 35; - private float turnSpeed = (float)Math.toRadians(120); + private float strafSpeed = 25; + private float turnSpeed = 0.45f; private float jumpPower = 30; + private float walkFactor = 0.37f; public ComponentPlayer() { @@ -46,5 +48,21 @@ public class ComponentPlayer extends Component { this.jumpPower = jumpPower; } + public float getStrafSpeed() { + return strafSpeed; + } + + public void setStrafSpeed(float strafSpeed) { + this.strafSpeed = strafSpeed; + } + + public float getWalkFactor() { + return walkFactor; + } + + public void setWalkFactor(float walkFactor) { + this.walkFactor = walkFactor; + } + } diff --git a/src/org/atriaSoft/gameEngine/components/ComponentPositionPlayer.java b/src/org/atriaSoft/gameEngine/components/ComponentPositionPlayer.java index d018b42..29df55c 100644 --- a/src/org/atriaSoft/gameEngine/components/ComponentPositionPlayer.java +++ b/src/org/atriaSoft/gameEngine/components/ComponentPositionPlayer.java @@ -21,7 +21,7 @@ public class ComponentPositionPlayer extends ComponentPosition { } public void setAngles(Vector3f angles) { - this.angles = angles; + this.angles = angles.clone(); // TODO: update transform3D this.transform.getOrientation().setEulerAngles(this.angles); } diff --git a/src/org/atriaSoft/gameEngine/components/CoponentPhysics.java b/src/org/atriaSoft/gameEngine/components/CoponentPhysics.java deleted file mode 100644 index 91b6bd9..0000000 --- a/src/org/atriaSoft/gameEngine/components/CoponentPhysics.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.atriaSoft.gameEngine.components; - -import org.atriaSoft.gameEngine.Component; - -public class CoponentPhysics extends Component { - - @Override - public String getType() { - // TODO Auto-generated method stub - return "physics"; - } -} diff --git a/src/org/atriaSoft/gameEngine/data/simple3D.frag b/src/org/atriaSoft/gameEngine/data/simple3D.frag new file mode 100644 index 0000000..4bf4c15 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/data/simple3D.frag @@ -0,0 +1,16 @@ +#version 400 core + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +in vec4 io_color; + +// output: +out vec4 out_Color; + +void main(void) { + out_Color = io_color; +} + diff --git a/src/org/atriaSoft/gameEngine/data/simple3D.vert b/src/org/atriaSoft/gameEngine/data/simple3D.vert new file mode 100644 index 0000000..985abb4 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/data/simple3D.vert @@ -0,0 +1,21 @@ +#version 400 core + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +// Input : +in vec3 in_position; +uniform vec4 in_colors; +uniform mat4 in_matrixTransformation; +uniform mat4 in_matrixProjection; +uniform mat4 in_matrixView; + +// output : +out vec4 io_color; + +void main(void) { + gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * vec4(in_position, 1.0); + io_color = vec4(in_colors.xyz, 0.3); +} diff --git a/src/org/atriaSoft/gameEngine/engines/EnginePhysics.java b/src/org/atriaSoft/gameEngine/engines/EnginePhysics.java index 266f572..81d4364 100644 --- a/src/org/atriaSoft/gameEngine/engines/EnginePhysics.java +++ b/src/org/atriaSoft/gameEngine/engines/EnginePhysics.java @@ -1,13 +1,27 @@ package org.atriaSoft.gameEngine.engines; +import java.util.Vector; + +import org.atriaSoft.etk.Color; +import org.atriaSoft.etk.math.Matrix4f; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.resource.ResourceColored3DObject; +import org.atriaSoft.gale.test.sample2.Log; import org.atriaSoft.gameEngine.Component; import org.atriaSoft.gameEngine.Engine; import org.atriaSoft.gameEngine.Environement; import org.atriaSoft.gameEngine.camera.Camera; +import org.atriaSoft.gameEngine.components.ComponentAI; +import org.atriaSoft.gameEngine.components.ComponentPhysics; +import org.atriaSoft.gameEngine.components.ComponentRender; public class EnginePhysics extends Engine { public static final String ENGINE_NAME = "physics"; - + private float accumulator = 0; + private static float TIME_STEP = 0.02f; + private Vector components = new Vector(); + private ResourceColored3DObject debugDrawProperty = ResourceColored3DObject.create(); + public EnginePhysics(Environement env) { super(env); // TODO Auto-generated constructor stub @@ -15,26 +29,62 @@ public class EnginePhysics extends Engine { @Override public void componentRemove(Component ref) { - // TODO Auto-generated method stub - + components.remove(ref); } @Override public void componentAdd(Component ref) { - // TODO Auto-generated method stub - + if (ref instanceof ComponentPhysics == false) { + return; + } + components.add((ComponentPhysics)ref); } @Override public void update(long deltaMili) { - // TODO Auto-generated method stub + // Add the time difference in the accumulator + accumulator += (float)deltaMili*0.0001f; + // While there is enough accumulated time to take one or several physics steps + while (accumulator >= TIME_STEP) { + Log.info("update physic ... " + accumulator); + applyForces(TIME_STEP); + updateAABB(TIME_STEP); + updateCollisions(TIME_STEP); + GenerateResultCollisionsForces(TIME_STEP); + // Decrease the accumulated time + accumulator -= TIME_STEP; + } + + } + + private void applyForces(float timeStep) { + for (ComponentPhysics it: components) { + it.applyForces(TIME_STEP); + } + } + private void updateAABB(float timeStep) { + for (ComponentPhysics it: components) { + it.updateAABB(); + } + } + private void updateCollisions(float timeStep) { + + } + private void GenerateResultCollisionsForces(float timeStep) { } @Override public void render(long deltaMili, Camera camera) { // TODO Auto-generated method stub - + for (ComponentPhysics it: this.components) { + //Log.info("Render " + it); + it.renderDebug(debugDrawProperty); + } + //debugDrawProperty.drawCone(2, 5, 9, 12, Matrix4f.identity(), new Color(1,1,0,1)); + //debugDrawProperty.drawSquare(new Vector3f(1,1,1), Matrix4f.identity(), new Color(1,1,0,1)); + //debugDrawProperty.drawCubeLine(new Vector3f(1,1,1), new Vector3f(5,5,5), new Color(1,0,1,1), Matrix4f.identity(), true, true); + //debugDrawProperty.drawCubeLine(new Vector3f(0,0,0), new Vector3f(32,32,32), new Color(1,0,1,1), Matrix4f.identity(), true, true); } @Override diff --git a/src/org/atriaSoft/gameEngine/map/MapVoxel.java b/src/org/atriaSoft/gameEngine/map/MapVoxel.java index 811d5b4..52cbc95 100644 --- a/src/org/atriaSoft/gameEngine/map/MapVoxel.java +++ b/src/org/atriaSoft/gameEngine/map/MapVoxel.java @@ -14,6 +14,7 @@ import org.atriaSoft.gameEngine.Material; import org.atriaSoft.gameEngine.components.ComponentLight; import org.atriaSoft.gameEngine.components.ComponentLightSun; import org.atriaSoft.gameEngine.components.ComponentMaterials; +import org.atriaSoft.gameEngine.components.ComponentPhysics; import org.atriaSoft.gameEngine.components.ComponentPosition; import org.atriaSoft.gameEngine.components.ComponentRenderTexturedMaterialsDynamicMeshs; import org.atriaSoft.gameEngine.components.ComponentRenderTexturedMaterialsStaticMeshs; @@ -24,6 +25,8 @@ import org.atriaSoft.gameEngine.components.ComponentTexture; import org.atriaSoft.gameEngine.components.ComponentTextures; import org.atriaSoft.gameEngine.engines.EngineLight; import org.atriaSoft.gameEngine.engines.EngineMap; +import org.atriaSoft.gameEngine.physics.PhysicBox; +import org.atriaSoft.gameEngine.physics.PhysicMapVoxel; public class MapVoxel extends EngineMap { //List listOfChunks = new ArrayList(); @@ -71,6 +74,10 @@ public class MapVoxel extends EngineMap { new Uri("DATA", "basicMaterial.vert"), new Uri("DATA", "basicMaterial.frag"), (EngineLight)env.getEngine(EngineLight.ENGINE_NAME))); + ComponentPhysics physics = new ComponentPhysics(); + PhysicMapVoxel box = new PhysicMapVoxel(tmpVoxelChunk); + physics.addShape(box); + tmpEntity.addComponent(physics); this.env.addEntity(tmpEntity); } diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicBox.java b/src/org/atriaSoft/gameEngine/physics/PhysicBox.java new file mode 100644 index 0000000..8edfe03 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicBox.java @@ -0,0 +1,36 @@ +package org.atriaSoft.gameEngine.physics; + +import org.atriaSoft.etk.Color; +import org.atriaSoft.etk.math.Transform3D; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.resource.ResourceColored3DObject; + +public class PhysicBox extends PhysicShape { + // Box size property in X, Y and Z + private Vector3f size = new Vector3f(1,1,1); + public PhysicBox() { + super(PhysicShapeType.BOX); + } + public Vector3f getSize() { + return size; + } + public void setSize(Vector3f size) { + this.size = size; + } + @Override + public void updateAABB(Transform3D transform, PhysicCollisionAABB aabb) { + // TODO Auto-generated method stub + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(this.size.x*0.5f,this.size.y*0.5f,this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(-this.size.x*0.5f,this.size.y*0.5f,this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(-this.size.x*0.5f,-this.size.y*0.5f,this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(this.size.x*0.5f,-this.size.y*0.5f,this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(this.size.x*0.5f,this.size.y*0.5f,-this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(-this.size.x*0.5f,this.size.y*0.5f,-this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(-this.size.x*0.5f,-this.size.y*0.5f,-this.size.z*0.5f)))); + aabb.update(transform.multiply(this.transform.multiply(new Vector3f(this.size.x*0.5f,-this.size.y*0.5f,-this.size.z*0.5f)))); + } + @Override + public void renderDebug(Transform3D transform, ResourceColored3DObject debugDrawProperty) { + debugDrawProperty.drawSquare(this.size.multiply_new(0.5f), this.transform.getOpenGLMatrix().multiply_new(transform.getOpenGLMatrix()), new Color(0,1,0,0.25f)); + } +} diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicCollisionAABB.java b/src/org/atriaSoft/gameEngine/physics/PhysicCollisionAABB.java new file mode 100644 index 0000000..10f3465 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicCollisionAABB.java @@ -0,0 +1,74 @@ +package org.atriaSoft.gameEngine.physics; + +import org.atriaSoft.etk.math.Vector3f; + +public class PhysicCollisionAABB { + public float minX; + public float minY; + public float minZ; + public float maxX; + public float maxY; + public float maxZ; + public PhysicCollisionAABB(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) { + super(); + this.minX = minX; + this.minY = minY; + this.minZ = minZ; + this.maxX = maxX; + this.maxY = maxY; + this.maxZ = maxZ; + } + public boolean intersect(PhysicCollisionAABB other) { + if (minX > other.maxX) { + return false; + } + if (maxX < other.minX) { + return false; + } + if (minY > other.maxY) { + return false; + } + if (maxY < other.minY) { + return false; + } + if (minZ > other.maxZ) { + return false; + } + if (maxZ < other.minZ) { + return false; + } + return true; + } + public void update(Vector3f point) { + if (minX > point.x) { + minX = point.x; + } + if (maxX < point.x) { + maxX = point.x; + } + if (minY > point.y) { + minY = point.y; + } + if (maxY < point.y) { + maxY = point.y; + } + if (minZ > point.z) { + minZ = point.z; + } + if (maxZ < point.z) { + maxZ = point.z; + } + } + public Vector3f getMin() { + return new Vector3f(minX, minY, minZ); + } + public Vector3f getMax() { + return new Vector3f(maxX, maxY, maxZ); + } + public static PhysicCollisionAABB beforeCalculated() { + // TODO Auto-generated method stub + return new PhysicCollisionAABB(999999,999999,999999,-999999,-999999,-999999); + } +} + + diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicMapVoxel.java b/src/org/atriaSoft/gameEngine/physics/PhysicMapVoxel.java new file mode 100644 index 0000000..eaa4ac4 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicMapVoxel.java @@ -0,0 +1,31 @@ +package org.atriaSoft.gameEngine.physics; + +import org.atriaSoft.etk.math.Transform3D; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.resource.ResourceColored3DObject; +import org.atriaSoft.gameEngine.map.VoxelChunk; + +public class PhysicMapVoxel extends PhysicShape { + // Box size property in X, Y and Z + private VoxelChunk chunk; + public PhysicMapVoxel(VoxelChunk chunk) { + super(PhysicShapeType.MAP_VOXEL); + this.chunk = chunk; + } + @Override + public void updateAABB(Transform3D transform, PhysicCollisionAABB aabb) { + if (this.chunk == null) { + return; + } + aabb.update(new Vector3f(this.chunk.getPosition().x,this.chunk.getPosition().y,this.chunk.getPosition().z)); + aabb.update(new Vector3f( + this.chunk.getPosition().x + VoxelChunk.VOXEL_CHUNK_SIZE, + this.chunk.getPosition().y + VoxelChunk.VOXEL_CHUNK_SIZE, + this.chunk.getPosition().z + VoxelChunk.VOXEL_CHUNK_SIZE)); + } + @Override + public void renderDebug(Transform3D transform, ResourceColored3DObject debugDrawProperty) { + + + } +} diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicShape.java b/src/org/atriaSoft/gameEngine/physics/PhysicShape.java new file mode 100644 index 0000000..12d0028 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicShape.java @@ -0,0 +1,59 @@ +package org.atriaSoft.gameEngine.physics; + +import org.atriaSoft.etk.math.Quaternion; +import org.atriaSoft.etk.math.Transform3D; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.resource.ResourceColored3DObject; + +public abstract class PhysicShape { +// protected Quaternion quaternion; +// protected Vector3f origin; + protected Transform3D transform; + protected float mass = 0; + protected final PhysicShapeType type; + + public PhysicShape(PhysicShapeType type) { + this.type = type; + this.transform = new Transform3D(); +// this.quaternion = Quaternion.identity(); +// this.origin = Vector3f.zero(); + this.mass = 0; + } + public PhysicShape(PhysicShapeType type, Quaternion quaternion, Vector3f origin, float mass) { + this.type = type; + this.transform = new Transform3D(origin, quaternion); +// this.quaternion = quaternion; +// this.origin = origin; + this.mass = mass; + } + public Quaternion getQuaternion() { + return transform.getOrientation(); + } + public void setQuaternion(Quaternion quaternion) { + this.transform.setOrientation(quaternion); + } + public Vector3f getOrigin() { + return this.transform.getPosition(); + } + public void setOrigin(Vector3f origin) { + this.transform.setPosition(origin); + } + public Transform3D getTransform() { + return transform; + } + public void setTransform(Transform3D transform) { + this.transform = transform; + } + public float getMass() { + return mass; + } + public void setMass(float mass) { + this.mass = mass; + } + public PhysicShapeType getType() { + return type; + } + public abstract void updateAABB(Transform3D transform, PhysicCollisionAABB aabb); + public abstract void renderDebug(Transform3D transform, ResourceColored3DObject debugDrawProperty); + +} diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicShapeType.java b/src/org/atriaSoft/gameEngine/physics/PhysicShapeType.java new file mode 100644 index 0000000..2522644 --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicShapeType.java @@ -0,0 +1,13 @@ +package org.atriaSoft.gameEngine.physics; + +public enum PhysicShapeType { + UNKNOWN, + BOX, + CAPSULE, + CONE, + CONVEXHULL, + CYLINDER, + SPHERE, + CONCAVE, + MAP_VOXEL +} diff --git a/src/org/atriaSoft/gameEngine/physics/PhysicSphere.java b/src/org/atriaSoft/gameEngine/physics/PhysicSphere.java new file mode 100644 index 0000000..24973ab --- /dev/null +++ b/src/org/atriaSoft/gameEngine/physics/PhysicSphere.java @@ -0,0 +1,34 @@ +package org.atriaSoft.gameEngine.physics; + +import org.atriaSoft.etk.Color; +import org.atriaSoft.etk.math.Transform3D; +import org.atriaSoft.etk.math.Vector3f; +import org.atriaSoft.gale.resource.ResourceColored3DObject; + +public class PhysicSphere extends PhysicShape { + // Box size property in X, Y and Z + private float size; + public PhysicSphere() { + super(PhysicShapeType.SPHERE); + } + public float getSize() { + return size; + } + public void setSize(float size) { + this.size = size; + } + @Override + public void updateAABB(Transform3D transform, PhysicCollisionAABB aabb) { + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(this.size,0,0))); + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(-this.size,0,0))); + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(0,this.size,0))); + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(0,-this.size,0))); + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(0,0,this.size))); + aabb.update(transform.multiply(this.transform.getPosition()).add_new(new Vector3f(0,0,-this.size))); + } + @Override + public void renderDebug(Transform3D transform, ResourceColored3DObject debugDrawProperty) { + debugDrawProperty.drawSphere(this.size, 9, 9, this.transform.getOpenGLMatrix().multiply_new(transform.getOpenGLMatrix()), new Color(0,1,0,1)); + + } +} \ No newline at end of file diff --git a/src/org/atriaSoft/gameEngine/sample/LoxelEngine/Log.java b/src/org/atriaSoft/gameEngine/sample/LoxelEngine/Log.java index 355d372..73a5e77 100644 --- a/src/org/atriaSoft/gameEngine/sample/LoxelEngine/Log.java +++ b/src/org/atriaSoft/gameEngine/sample/LoxelEngine/Log.java @@ -1,7 +1,7 @@ package org.atriaSoft.gameEngine.sample.LoxelEngine; public class Log { - private static String LIBNAME = "Sample1"; + private static String LIBNAME = "LoxelEngine"; public static void print(String data) { System.out.println(data); } diff --git a/src/org/atriaSoft/gameEngine/sample/LoxelEngine/LoxelApplication.java b/src/org/atriaSoft/gameEngine/sample/LoxelEngine/LoxelApplication.java index 95ab0eb..fc92a28 100644 --- a/src/org/atriaSoft/gameEngine/sample/LoxelEngine/LoxelApplication.java +++ b/src/org/atriaSoft/gameEngine/sample/LoxelEngine/LoxelApplication.java @@ -23,6 +23,7 @@ import org.atriaSoft.gameEngine.camera.Camera; import org.atriaSoft.gameEngine.components.ComponentLight; import org.atriaSoft.gameEngine.components.ComponentLightSun; import org.atriaSoft.gameEngine.components.ComponentMaterial; +import org.atriaSoft.gameEngine.components.ComponentPhysics; import org.atriaSoft.gameEngine.components.ComponentPlayer; import org.atriaSoft.gameEngine.components.ComponentPosition; import org.atriaSoft.gameEngine.components.ComponentPositionPlayer; @@ -33,6 +34,7 @@ import org.atriaSoft.gameEngine.components.ComponentStaticMesh; import org.atriaSoft.gameEngine.components.ComponentTexture; import org.atriaSoft.gameEngine.engines.EngineLight; import org.atriaSoft.gameEngine.map.MapVoxel; +import org.atriaSoft.gameEngine.physics.PhysicBox; import org.atriaSoft.gameEngine.tools.MeshGenerator; import org.atriaSoft.gale.key.KeyKeyboard; import org.atriaSoft.gale.key.KeySpecial; @@ -46,7 +48,6 @@ public class LoxelApplication extends Application { private Quaternion basicRotation2 = Quaternion.identity(); private boolean creationDone; private ControlCameraPlayer simpleControl; - private Material materialCube; private ComponentPosition lightPosition; private float angleLight = 0; private MapVoxel map; @@ -92,17 +93,24 @@ public class LoxelApplication extends Application { env.addEntity(gird); Entity player = new Entity(this.env); - objectPosition = new ComponentPositionPlayer(new Transform3D(new Vector3f(16,16,15))); + objectPosition = new ComponentPositionPlayer(new Transform3D(new Vector3f(5,5,13))); player.addComponent(objectPosition); objectPlayer = new ComponentPlayer(); player.addComponent(objectPlayer); player.addComponent(new ComponentMaterial(new Material())); - player.addComponent(new ComponentStaticMesh(new Uri("RES", "person.obj"))); + //player.addComponent(new ComponentStaticMesh(new Uri("RES", "person.obj"))); + player.addComponent(new ComponentStaticMesh(new Uri("RES", "person_-yfw_zup.obj"))); player.addComponent(new ComponentTexture(new Uri("RES", "playerTexture.png"))); -// player.addComponent(new ComponentRenderTexturedMaterialsStaticMesh( -// new Uri("DATA", "basicMaterial.vert"), -// new Uri("DATA", "basicMaterial.frag"), -// (EngineLight)env.getEngine(EngineLight.ENGINE_NAME))); + player.addComponent(new ComponentRenderTexturedMaterialsStaticMesh( + new Uri("DATA", "basicMaterial.vert"), + new Uri("DATA", "basicMaterial.frag"), + (EngineLight)env.getEngine(EngineLight.ENGINE_NAME))); + ComponentPhysics physics = new ComponentPhysics(); + PhysicBox box = new PhysicBox(); + box.setSize(new Vector3f(0.6f,0.6f,1.8f)); + box.setOrigin(new Vector3f(0,0,0.9f)); + physics.addShape(box); + player.addComponent(physics); env.addEntity(player); @@ -130,10 +138,6 @@ public class LoxelApplication extends Application { if (this.creationDone == false) { return; } - //materialCube.setAmbientFactor(new Vector3f(1.0f,1.0f,1.0f)); - // apply a little rotation to show the element move - //objectPosition.getTransform().applyRotation(basicRotation); - //objectPosition.getTransform().applyRotation(basicRotation2); angleLight += 0.01; lightPosition.getTransform().getPosition().x = 5 + (float)Math.cos(angleLight) * 7.0f; lightPosition.getTransform().getPosition().y = 5 + (float)Math.sin(angleLight) * 7.0f; @@ -169,7 +173,6 @@ public class LoxelApplication extends Application { OpenGL.enable(Flag.flag_depthTest); env.render(20, "default"); - // Restore context of matrix OpenGL.pop(); } @@ -189,6 +192,12 @@ public class LoxelApplication extends Application { if (type == KeyKeyboard.f1 ) { Gale.getContext().grabPointerEvents(false, new Vector2f(0,0)); } + if (type == KeyKeyboard.f2 ) { + Gale.getContext().grabPointerEvents(true, new Vector2f(0,0)); + } + if (type == KeyKeyboard.f12 ) { + Gale.getContext().setFullScreen(!Gale.getContext().getFullScreen()); + } env.onKeyboard(special, type, value, state); } }