├── .project ├── .settings ├── .jsdtscope ├── org.eclipse.core.resources.prefs ├── org.eclipse.wst.common.component ├── org.eclipse.wst.common.project.facet.core.xml ├── org.eclipse.wst.jsdt.ui.superType.container └── org.eclipse.wst.jsdt.ui.superType.name ├── README.md ├── WebContent ├── LICENSE ├── dataset │ ├── mbl3d │ │ ├── hairs │ │ │ └── geometry-twelve-short.json │ │ ├── iklimit │ │ │ ├── 90.json │ │ │ ├── hand.json │ │ │ ├── loose.json │ │ │ ├── norotatex.json │ │ │ ├── rotatex.json │ │ │ └── upper180.json │ │ ├── ikpreset │ │ │ ├── foot.json │ │ │ ├── front.json │ │ │ ├── order.json │ │ │ ├── simple.json │ │ │ └── touch.json │ │ ├── ikratio │ │ │ ├── clavicle1.json │ │ │ ├── clavicle2.json │ │ │ ├── hand1.json │ │ │ ├── hand2.json │ │ │ ├── lowerarm1.json │ │ │ ├── lowerarm2.json │ │ │ └── upperarm.json │ │ ├── models │ │ │ ├── anime1_female.fbx │ │ │ ├── anime1_male.fbx │ │ │ ├── anime2_female.fbx │ │ │ ├── anime2_female_smallarm.fbx │ │ │ ├── anime2_male.fbx │ │ │ ├── anime2_modifybreast.fbx │ │ │ ├── anime2_nomorph.glb │ │ │ ├── anime2_nomorph_draco.glb │ │ │ ├── edithip.glb │ │ │ └── readme.txt │ │ ├── obj │ │ │ ├── axe.obj │ │ │ ├── pompom.obj │ │ │ └── stake.obj │ │ ├── skybox │ │ │ ├── approaching_storm.jpg │ │ │ ├── lythwood_field.jpg │ │ │ ├── satara_night.jpg │ │ │ ├── skyboxsun25degtest.png │ │ │ └── skyboxsun25degtest.txt │ │ └── texture │ │ │ ├── ao.jpg │ │ │ ├── aogaus10.jpg │ │ │ ├── aogaus2.jpg │ │ │ ├── aogaus5.jpg │ │ │ ├── aomix.jpg │ │ │ ├── bikini.png │ │ │ ├── bump.png │ │ │ ├── bump2.png │ │ │ ├── bump3.png │ │ │ ├── bump_cloth.png │ │ │ ├── displacement.png │ │ │ ├── displacement2.png │ │ │ ├── displacement3.png │ │ │ ├── displacement4.png │ │ │ ├── displacement_bikini.png │ │ │ ├── displacement_pelvis.png │ │ │ ├── displacement_pelvis2.png │ │ │ ├── displacement_sox.png │ │ │ ├── emissive_eye.png │ │ │ ├── emissive_eye2.png │ │ │ ├── emissive_eye3.png │ │ │ ├── m_brown.png │ │ │ ├── m_brown2.png │ │ │ ├── m_brown_gray.png │ │ │ ├── m_brown_gray2.png │ │ │ ├── m_brown_male.png │ │ │ ├── m_brown_male2.png │ │ │ ├── m_brown_nd.png │ │ │ ├── m_brown_noeyelight.png │ │ │ ├── sox.png │ │ │ ├── uv_2048.png │ │ │ └── white.png │ ├── texture │ │ ├── bg │ │ │ ├── boxsky1.jpg │ │ │ └── readme.txt │ │ ├── patterns │ │ │ ├── circuit_pattern.png │ │ │ └── readme.txt │ │ └── readme.txt │ └── vrm │ │ ├── 3207836450134888583.vrm │ │ ├── Alicia │ │ ├── AliciaSolid.vrm │ │ └── readme.txt │ │ ├── LICENSE │ │ └── texture │ │ ├── alphamap_l.png │ │ ├── alphamap_ll.png │ │ ├── alphamap_m.png │ │ └── alphamap_s.png ├── examples │ ├── ammo │ │ ├── bodies │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── bonecloth │ │ │ └── index.html │ │ ├── bonesync │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── cloth │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── css │ │ │ └── main.css │ │ ├── damping │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── factorlock │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── friction │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── generic6dof │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── hello.html │ │ ├── index.html │ │ ├── js │ │ │ ├── AmmoBodyAndMesh.js │ │ │ ├── AmmoBoxBodyAndMesh.js │ │ │ ├── AmmoCapsuleBodyAndMesh.js │ │ │ ├── AmmoConstraintAndLine.js │ │ │ ├── AmmoControler.js │ │ │ ├── AmmoSphereBodyAndMesh.js │ │ │ ├── AmmoUtils.js │ │ │ └── deprecated.txt │ │ ├── keepdistance │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── mass │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── multiconstraint │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── point2point │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── restitution │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── spring │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── spring2 │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ └── transform │ │ │ ├── css │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ ├── Application.js │ │ │ ├── Example.js │ │ │ ├── Sidebar.js │ │ │ ├── Viewport.Info.js │ │ │ └── Viewport.js │ ├── bone │ │ ├── convert0rotated │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── euler │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── getposition │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── index.html │ │ ├── make │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BoneAnimation.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── meshtransform │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── poseab │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── poseedit │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── posesave │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── rotatecontrol │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── transform │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ └── translatecontrol │ │ │ ├── css │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ ├── css │ │ └── shared.css │ ├── ik │ │ ├── _endsite │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.Iks.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _limitbone │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BoneLimitPanel.js │ │ │ │ ├── Example.js │ │ │ │ ├── Mbl3dIk.js │ │ │ │ ├── Sidebar.IkBasic.js │ │ │ │ ├── Sidebar.IkBoneList.js │ │ │ │ ├── Sidebar.IkLimitIO.js │ │ │ │ ├── Sidebar.IkLimitList.js │ │ │ │ ├── Sidebar.IkReset.js │ │ │ │ ├── Sidebar.IkSolve.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── TransformPanel.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _preset │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── IkPresets.js │ │ │ │ ├── Sidebar.IkPreset.js │ │ │ │ ├── Sidebar.JSONExport.js │ │ │ │ ├── Sidebar.JSONImport.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _ratio │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BoneSelectionPanel.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.IkRatio.js │ │ │ │ ├── Sidebar.Iks.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── basic │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── endsite │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── ikcontrol │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── ikorder │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── index.html │ │ ├── limitbone │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── preset │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── ratio │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── simple │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ └── translate │ │ │ ├── css │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ ├── Application.js │ │ │ ├── Example.js │ │ │ ├── Sidebar.js │ │ │ ├── Viewport.Info.js │ │ │ └── Viewport.js │ ├── index.html │ ├── libs │ │ ├── AnimeUtils.js │ │ ├── AppUtils.js │ │ ├── BoneAttachControler.js │ │ ├── BoneUtils.js │ │ ├── DRACOLoader.js │ │ ├── FBXLoader.js │ │ ├── GLTFLoader.js │ │ ├── IkControler.js │ │ ├── IkUtils.js │ │ ├── Mbl3dUtils.js │ │ ├── OrbitControls.js │ │ ├── OutlineEffect.js │ │ ├── Panels.js │ │ ├── TimelinerController.js │ │ ├── TimelinerControllerKai1.js │ │ ├── TrackballControls.js │ │ ├── TransformControls.js │ │ ├── ammo.js │ │ ├── deprecated.txt │ │ ├── draco │ │ │ ├── README.md │ │ │ ├── draco_decoder.js │ │ │ ├── draco_decoder.wasm │ │ │ ├── draco_wasm_wrapper.js │ │ │ └── gltf │ │ │ │ ├── draco_decoder.js │ │ │ │ ├── draco_decoder.wasm │ │ │ │ ├── draco_encoder.js │ │ │ │ └── draco_wasm_wrapper.js │ │ ├── inflate.min.js │ │ ├── signals.min.js │ │ ├── stats.min.js │ │ ├── three.js │ │ ├── three.module.js │ │ ├── timeliner_gui.js │ │ ├── timeliner_gui.min.js │ │ ├── ui.custom.js │ │ └── ui.js │ ├── mbl3d │ │ ├── _attach │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BoneEditPanel.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _breast │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _breast2 │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BreastControler.js │ │ │ │ ├── Example.js │ │ │ │ ├── LoadTexturePanel.js │ │ │ │ ├── Sidebar.Breast.js │ │ │ │ ├── Sidebar.ClipPlayer.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _morph │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Sidebar.Animation.js │ │ │ │ ├── Sidebar.BasicLightShadow.js │ │ │ │ ├── Sidebar.Camera.js │ │ │ │ ├── Sidebar.Clip.js │ │ │ │ ├── Sidebar.Hair.js │ │ │ │ ├── Sidebar.Material.js │ │ │ │ ├── Sidebar.Model.js │ │ │ │ ├── Sidebar.Morph.js │ │ │ │ ├── Sidebar.Texture.js │ │ │ │ ├── Sidebar.js │ │ │ │ └── Viewport.js │ │ ├── _turnarm │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.TurnArm.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── _twist │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── BoneEditPanel.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.Export.js │ │ │ │ ├── Sidebar.Ik.js │ │ │ │ ├── Sidebar.Import.js │ │ │ │ ├── Sidebar.TwistAutoupdate.js │ │ │ │ ├── Sidebar.TwistEditor.js │ │ │ │ ├── Sidebar.TwistSwitch.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── TransformPanel.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── attach │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── breast │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── breast2 │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── breathing │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.Export.js │ │ │ │ ├── Sidebar.Morph.Editor.js │ │ │ │ ├── Sidebar.Morph.js │ │ │ │ ├── Sidebar.RandomScale.js │ │ │ │ ├── Sidebar.Rotate.js │ │ │ │ ├── Sidebar.Scale.js │ │ │ │ ├── Sidebar.SimpleScale.js │ │ │ │ ├── Sidebar.Translate.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── TransformPanel.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── controlers │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── finger │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── index.html │ │ ├── loadmodel │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── makemorph │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── minexample │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── morph │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── rotatearmx │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── texturemaps │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ └── twist │ │ │ ├── css │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ ├── misc │ │ ├── _animation2image │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── AnimationToImagePanel.js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ ├── animation2image │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── clipplay │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── guide │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── index.html │ │ ├── jszip │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── servletsave │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── AnimationToImageServerPanel.js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.js │ │ │ │ ├── Viewport.Info.js │ │ │ │ └── Viewport.js │ │ │ └── server │ │ │ │ └── java │ │ │ │ ├── FileSaveServlet.java │ │ │ │ ├── jetty-web.xml │ │ │ │ └── web.xml │ │ ├── timelinear_bones │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Example.js │ │ │ │ ├── Sidebar.CameraControler.js │ │ │ │ ├── Sidebar.TimelinerBones.js │ │ │ │ ├── Sidebar.TimelinerClipExport.js │ │ │ │ ├── Sidebar.TimelinerVisibleRow.js │ │ │ │ ├── Sidebar.js │ │ │ │ └── Viewport.Info.js │ │ ├── timelinear_morphs │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Application.js │ │ │ │ ├── Sidebar.ExportMorphFrameClip.js │ │ │ │ ├── Sidebar.ImportTimelinerBackground.js │ │ │ │ ├── Sidebar.MorphMbl3dEditor.js │ │ │ │ ├── Sidebar.MorphSimpleEditor.js │ │ │ │ ├── Sidebar.js │ │ │ │ └── Viewport.js │ │ ├── timeliner_bones │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ ├── timeliner_mesh │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ │ ├── Example.js │ │ │ │ ├── Info.js │ │ │ │ └── Sidebar.js │ │ └── videotexture │ │ │ ├── css │ │ │ └── main.css │ │ │ ├── index.html │ │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ └── vrm │ │ ├── fingers │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── ikcontrol │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── iks │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── index.html │ │ ├── load │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── material │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── morph │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── multi │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── rotatecontrol │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── sas1 │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ ├── Sidebar.SecondaryAnimation.js │ │ │ └── Sidebar.js │ │ ├── sas100 │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ ├── timeliner_bones │ │ ├── css │ │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ │ ├── Example.js │ │ │ ├── Info.js │ │ │ └── Sidebar.js │ │ └── timeliner_bs │ │ ├── css │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ ├── Example.js │ │ ├── Info.js │ │ └── Sidebar.js ├── index.html ├── js │ ├── AnimeUtils.js │ ├── AppUtils.js │ ├── BoneAttachControler.js │ ├── BoneUtils.js │ ├── BreastControler.js │ ├── FingerPresets.js │ ├── FingerPresetsControler.js │ ├── HumanoidBoneControler.js │ ├── IkControler.js │ ├── IkPresets.js │ ├── IkUtils.js │ ├── Logics.js │ ├── Mbl3dUtils.js │ ├── ObjectTransformControler.js │ ├── Panels.js │ ├── RotationControler.js │ ├── SecondaryAnimationControler.js │ ├── TimelinerControllerKai1.js │ ├── TranslateControler.js │ ├── VrmFingerPresets.js │ ├── VrmFingerPresetsControler.js │ ├── VrmUtils.js │ ├── ammo │ │ ├── AmmoBodyAndMesh.js │ │ ├── AmmoBoxBodyAndMesh.js │ │ ├── AmmoCapsuleBodyAndMesh.js │ │ ├── AmmoConstraintAndLine.js │ │ ├── AmmoControler.js │ │ ├── AmmoSphereBodyAndMesh.js │ │ └── AmmoUtils.js │ ├── application │ │ └── MinApplication.js │ ├── core │ │ ├── BasicCore.js │ │ ├── MinCore.js │ │ ├── MinTransformCore.js │ │ └── TransformCore.js │ ├── ik │ │ ├── HumanoidFingerIk.js │ │ ├── HumanoidIk.js │ │ └── Mbl3dIk.js │ ├── sidebar │ │ ├── Sidebar.Ammo.js │ │ ├── Sidebar.AnimationToImagePanel.js │ │ ├── Sidebar.BackgroundImage.js │ │ ├── Sidebar.BackgroundVideo.js │ │ ├── Sidebar.BoneRootTranslate.js │ │ ├── Sidebar.BoneRotate.js │ │ ├── Sidebar.BoneRotateAnimationPanel.js │ │ ├── Sidebar.BoneRotateWithDefaultMatrix.js │ │ ├── Sidebar.BoneRotateWithOrder.js │ │ ├── Sidebar.Breast.js │ │ ├── Sidebar.CameraControler.js │ │ ├── Sidebar.ClipPlayer.js │ │ ├── Sidebar.ControlerCheck.js │ │ ├── Sidebar.Debug.js │ │ ├── Sidebar.DoubleClipPlayer.js │ │ ├── Sidebar.ExportPose.js │ │ ├── Sidebar.FaceCamera.js │ │ ├── Sidebar.Grid.js │ │ ├── Sidebar.Ground.js │ │ ├── Sidebar.Guide.js │ │ ├── Sidebar.Hair.js │ │ ├── Sidebar.IkBasic.js │ │ ├── Sidebar.IkBoneLimit.js │ │ ├── Sidebar.IkBoneList.js │ │ ├── Sidebar.IkControl.js │ │ ├── Sidebar.IkLimitExport.js │ │ ├── Sidebar.IkLimitImport.js │ │ ├── Sidebar.IkLimitList.js │ │ ├── Sidebar.IkLock.js │ │ ├── Sidebar.IkPreset.js │ │ ├── Sidebar.IkPresetIO.js │ │ ├── Sidebar.IkRatioIO.js │ │ ├── Sidebar.IkReset.js │ │ ├── Sidebar.ImportPose.js │ │ ├── Sidebar.LoadPosePanel.js │ │ ├── Sidebar.MaterialType.js │ │ ├── Sidebar.MeshRotate.js │ │ ├── Sidebar.MeshTransform.js │ │ ├── Sidebar.Model.js │ │ ├── Sidebar.MorphTest.js │ │ ├── Sidebar.Obj.js │ │ ├── Sidebar.ObjTransform.js │ │ ├── Sidebar.OutlineEffect.js │ │ ├── Sidebar.RotateArmX.js │ │ ├── Sidebar.RotateArmXTwist.js │ │ ├── Sidebar.RotateFingers.js │ │ ├── Sidebar.SecondaryAnimation.js │ │ ├── Sidebar.ShadowLight.js │ │ ├── Sidebar.SimpleLight.js │ │ ├── Sidebar.Skybox.js │ │ ├── Sidebar.TextBoard.js │ │ ├── Sidebar.Texture.js │ │ ├── Sidebar.TextureMaps.js │ │ ├── Sidebar.TimelinerAnimationToImage.js │ │ ├── Sidebar.TimelinerBackgroundClip.js │ │ ├── Sidebar.TimelinerBones.js │ │ ├── Sidebar.TimelinerClipExport.js │ │ ├── Sidebar.TimelinerControl.js │ │ ├── Sidebar.TimelinerFingerPresets.js │ │ ├── Sidebar.TimelinerMesh.js │ │ ├── Sidebar.TimelinerVisibleRow.js │ │ ├── Sidebar.Transparent.js │ │ ├── Sidebar.TwistRatio.js │ │ ├── Sidebar.VrmAlphaMap.js │ │ ├── Sidebar.VrmCameraControler.js │ │ ├── Sidebar.VrmChangeMaterial.js │ │ ├── Sidebar.VrmControlerCheck.js │ │ ├── Sidebar.VrmFaceCamera.js │ │ ├── Sidebar.VrmFingers.js │ │ ├── Sidebar.VrmLicense.js │ │ ├── Sidebar.VrmMaterial.js │ │ ├── Sidebar.VrmModel.js │ │ ├── Sidebar.VrmMorphTarget.js │ │ ├── Sidebar.VrmMorphTest.js │ │ ├── Sidebar.VrmSimpleBlendShape.js │ │ ├── Sidebar.VrmSliderBlendShape.js │ │ ├── Sidebar.VrmTextureDownload.js │ │ ├── Sidebar.VrmTimelinerBlendShape.js │ │ ├── Sidebar.VrmTimelinerBones.js │ │ └── Sidebar.VrmVisible.js │ ├── timeliner_guiKai1.js │ ├── ui.custom.js │ └── ui │ │ ├── AbsoluteRotateDiv.js │ │ ├── ClipPlayerRow.js │ │ ├── ExportJsonDiv.js │ │ ├── IkBoneLimitInfoDiv.js │ │ ├── IkOrderChangeRow.js │ │ ├── IkRatioRow.js │ │ ├── IkRotateRow.js │ │ ├── IkSolveRow.js │ │ ├── LRBoneRow.js │ │ ├── ListImageDiv.js │ │ ├── ListLoadJsonDiv.js │ │ ├── ListTextureDiv.js │ │ ├── LoadClipRow.js │ │ └── LoadJsonRow.js ├── libs │ ├── DRACOLoader.js │ ├── FBXLoader.js │ ├── GLTFLoader.js │ ├── LICENSE │ ├── OBJLoader.js │ ├── OrbitControls.js │ ├── OutlineEffect.js │ ├── TrackballControls.js │ ├── TransformControls.js │ ├── ammo.js │ ├── draco │ │ ├── README.md │ │ ├── draco_decoder.js │ │ ├── draco_decoder.wasm │ │ ├── draco_wasm_wrapper.js │ │ └── gltf │ │ │ ├── draco_decoder.js │ │ │ ├── draco_decoder.wasm │ │ │ ├── draco_encoder.js │ │ │ └── draco_wasm_wrapper.js │ ├── inflate.min.js │ ├── signals.min.js │ ├── stats.min.js │ ├── three.js │ ├── three.module.js │ └── ui.js ├── libs102 │ ├── GLTFLoader.js │ ├── LICENSE │ ├── OrbitControls.js │ ├── VRMLoader.js │ ├── jszip.min.js │ ├── three.js │ └── three.min.js └── tools │ ├── bone │ └── boneanimation │ │ ├── css │ │ └── main.css │ │ ├── index.html │ │ └── js │ │ ├── Example.js │ │ ├── Info.js │ │ └── Sidebar.js │ └── css │ └── shared.css └── index.html /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ThreeCharacterExamples 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.wst.validation.validationbuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.wst.common.project.facet.core.builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.wst.common.project.facet.core.nature 21 | org.eclipse.wst.jsdt.core.jsNature 22 | org.eclipse.wst.common.modulecore.ModuleCoreNature 23 | 24 | 25 | -------------------------------------------------------------------------------- /.settings/.jsdtscope: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//WebContent/LICENSE=UTF-8 3 | encoding//WebContent/examples/vrm/index.html=UTF-8 4 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.component: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.jsdt.ui.superType.container: -------------------------------------------------------------------------------- 1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.jsdt.ui.superType.name: -------------------------------------------------------------------------------- 1 | Window -------------------------------------------------------------------------------- /WebContent/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright © 2018-2019 aki miyazaki(https://github.com/akjava) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/90.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"upperarm_R":{"x":-90,"y":-90,"z":-90},"upperarm_L":{"x":-90,"y":-90,"z":-90},"clavicle_R":{"x":-45,"y":-30,"z":-45},"clavicle_L":{"x":-45,"y":-15,"z":0}},"ikLimitMax":{"clavicle_R":{"x":5,"y":15,"z":0},"upperarm_R":{"x":-90,"y":90,"z":90},"upperarm_L":{"x":90,"y":90,"z":90},"clavicle_L":{"x":5,"y":30,"z":45}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/hand.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"hand_R":{"x":-70,"y":-45,"z":-45},"hand_L":{"x":-70,"y":0,"z":-65}},"ikLimitMax":{"hand_R":{"x":45,"y":0,"z":65},"hand_L":{"x":45,"y":45,"z":45}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/loose.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"upperarm_R":{"x":-90,"y":-60,"z":-60},"upperarm_L":{"x":-90,"y":-85,"z":-85},"clavicle_R":{"x":-45,"y":-30,"z":-45},"clavicle_L":{"x":-45,"y":-15,"z":0}},"ikLimitMax":{"clavicle_R":{"x":5,"y":15,"z":0},"upperarm_R":{"x":-80,"y":85,"z":85},"upperarm_L":{"x":-80,"y":60,"z":60},"clavicle_L":{"x":5,"y":30,"z":45}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/norotatex.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"upperarm_R":{"x":0,"y":-30,"z":-30},"upperarm_L":{"x":0,"y":-75,"z":-85}},"ikLimitMax":{"upperarm_R":{"x":0,"y":75,"z":85},"upperarm_L":{"x":0,"y":30,"z":30}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/rotatex.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"hand_R":{"x":-60,"y":-45,"z":-45},"lowerarm_R":{"x":-60,"y":0,"z":0},"upperarm_R":{"x":-90,"y":-45,"z":-45},"hand_L":{"x":-60,"y":0,"z":-65},"lowerarm_L":{"x":-60,"y":-150,"z":0},"upperarm_L":{"x":-90,"y":-75,"z":-85}},"ikLimitMax":{"hand_R":{"x":45,"y":0,"z":65},"lowerarm_R":{"x":45,"y":150,"z":0},"hand_L":{"x":45,"y":45,"z":45},"lowerarm_L":{"x":45,"y":0,"z":0}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/iklimit/upper180.json: -------------------------------------------------------------------------------- 1 | {"ikLimitMin":{"upperarm_R":{"x":-180,"y":-180,"z":-180},"upperarm_L":{"x":-180,"y":-180,"z":-180}},"ikLimitMax":{"upperarm_R":{"x":180,"y":180,"z":180},"upperarm_L":{"x":180,"y":180,"z":180}}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikpreset/foot.json: -------------------------------------------------------------------------------- 1 | {"presets":{"LeftLeg":[{"name":"stand","rotations":[[0,0,-0.03490658503988659,"XZY"],[0,0,0,"XZY"],[0,0,0,"XZY"]]},{"name":"z15","rotations":[[0,0,0.2617993877991494,"XZY"],[0,0,0,"XZY"],[0,0,-0.2617993877991494,"XZY"]]},{"name":"z30","rotations":[[0,0,0.5235987755982988,"XZY"],[0,0,0,"XZY"],[0,0,-0.5235987755982988,"XZY"]]}]}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikpreset/front.json: -------------------------------------------------------------------------------- 1 | {"presets":{"RightArm":[{"name":"0","rotations":[[0,0,0,"YZX"],[0,1.3089969389957472,0,"YZX"],[0,0,0,"YZX"],[0,0,0,"YZX"]]},{"name":"30","rotations":[[0,0,0,"YZX"],[-3.2049378106392736e-17,1.3089969389957474,0.5235987755982989,"YZX"],[0,0,0,"YZX"],[0,0,0,"YZX"]]},{"name":"60","rotations":[[0,0,0,"YZX"],[-1.1102230246251563e-16,1.3089969389957479,1.0471975511965976,"YZX"],[0,0,0,"YZX"],[0,0,0,"YZX"]]},{"name":"-45","rotations":[[0,0,0,"YZX"],[0,1.308996938995747,-0.7853981633974482,"YZX"],[0,0,0,"YZX"],[0,0,0,"YZX"]]},{"name":"-90","rotations":[[0,0,0,"YZX"],[0,1.3089969389957472,-1.5707963267948966,"YZX"],[0,0,0,"YZX"],[0,0,0,"YZX"]]}]}} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/clavicle1.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":1,"upperarm_L":0.1,"lowerarm_L":0.01,"hand_L":0.01,"clavicle_R":1,"upperarm_R":0.1,"lowerarm_R":0.01,"hand_R":0.01} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/clavicle2.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":1,"upperarm_L":0.5,"lowerarm_L":0.1,"hand_L":0.1,"clavicle_R":1,"upperarm_R":0.5,"lowerarm_R":0.1,"hand_R":0.1} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/hand1.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":0.1,"upperarm_L":0.1,"lowerarm_L":0.5,"hand_L":1,"clavicle_R":0.1,"upperarm_R":0.1,"lowerarm_R":0.5,"hand_R":1} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/hand2.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":0.01,"upperarm_L":0.05,"lowerarm_L":0.1,"hand_L":1,"clavicle_R":0.01,"upperarm_R":0.05,"lowerarm_R":0.1,"hand_R":1} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/lowerarm1.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":0.01,"upperarm_L":0.1,"lowerarm_L":1,"hand_L":0.01,"clavicle_R":0.01,"upperarm_R":0.1,"lowerarm_R":1,"hand_R":0.01} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/lowerarm2.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":0.1,"upperarm_L":0.5,"lowerarm_L":1,"hand_L":0.1,"clavicle_R":0.1,"upperarm_R":0.5,"lowerarm_R":1,"hand_R":0.1} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/ikratio/upperarm.json: -------------------------------------------------------------------------------- 1 | {"clavicle_L":0.01,"upperarm_L":0.1,"lowerarm_L":0.5,"hand_L":1,"clavicle_R":0.01,"upperarm_R":0.1,"lowerarm_R":0.5,"hand_R":1} -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime1_female.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime1_female.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime1_male.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime1_male.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_female.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_female.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_female_smallarm.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_female_smallarm.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_male.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_male.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_modifybreast.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_modifybreast.fbx -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_nomorph.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_nomorph.glb -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/anime2_nomorph_draco.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/anime2_nomorph_draco.glb -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/edithip.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/models/edithip.glb -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/models/readme.txt: -------------------------------------------------------------------------------- 1 | 3D Character is created by Manuel Bastioni 2 | Project is shutdown.see https://github.com/animate1978/MB-Lab -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/skybox/approaching_storm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/skybox/approaching_storm.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/skybox/lythwood_field.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/skybox/lythwood_field.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/skybox/satara_night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/skybox/satara_night.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/skybox/skyboxsun25degtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/skybox/skyboxsun25degtest.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/skybox/skyboxsun25degtest.txt: -------------------------------------------------------------------------------- 1 | http://reije081.home.xs4all.nl/skyboxes/ -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/ao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/ao.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/aogaus10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/aogaus10.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/aogaus2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/aogaus2.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/aogaus5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/aogaus5.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/aomix.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/aomix.jpg -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/bikini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/bikini.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/bump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/bump.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/bump2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/bump2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/bump3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/bump3.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/bump_cloth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/bump_cloth.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement3.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement4.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement_bikini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement_bikini.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement_pelvis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement_pelvis.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement_pelvis2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement_pelvis2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/displacement_sox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/displacement_sox.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/emissive_eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/emissive_eye.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/emissive_eye2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/emissive_eye2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/emissive_eye3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/emissive_eye3.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_gray.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_gray2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_gray2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_male.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_male.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_male2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_male2.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_nd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_nd.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/m_brown_noeyelight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/m_brown_noeyelight.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/sox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/sox.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/uv_2048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/uv_2048.png -------------------------------------------------------------------------------- /WebContent/dataset/mbl3d/texture/white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/mbl3d/texture/white.png -------------------------------------------------------------------------------- /WebContent/dataset/texture/bg/boxsky1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/texture/bg/boxsky1.jpg -------------------------------------------------------------------------------- /WebContent/dataset/texture/bg/readme.txt: -------------------------------------------------------------------------------- 1 | boxsky1,CC0 based CC0 a image of hdrihaven.com -------------------------------------------------------------------------------- /WebContent/dataset/texture/patterns/circuit_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/texture/patterns/circuit_pattern.png -------------------------------------------------------------------------------- /WebContent/dataset/texture/patterns/readme.txt: -------------------------------------------------------------------------------- 1 | circuit_pattern.png is Three.js Example Cloth -------------------------------------------------------------------------------- /WebContent/dataset/texture/readme.txt: -------------------------------------------------------------------------------- 1 | original filename 2 | video.webm - 1874_Pierre_Jules_Cesar_Janssen_-_Passage_de_Venus -------------------------------------------------------------------------------- /WebContent/dataset/vrm/3207836450134888583.vrm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/3207836450134888583.vrm -------------------------------------------------------------------------------- /WebContent/dataset/vrm/Alicia/AliciaSolid.vrm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/Alicia/AliciaSolid.vrm -------------------------------------------------------------------------------- /WebContent/dataset/vrm/Alicia/readme.txt: -------------------------------------------------------------------------------- 1 | ———————————————————————— 2 | ニコニ立体公式キャラクター「ニコニ立体ちゃん」(VRM版) 3 | http://3d.nicovideo.jp/alicia/ 4 | version 1 5 | ©dwango, inc. All rights reserved. 6 | ———————————————————————— 7 | 8 | 9 | この度は、ニコニ立体公式キャラクター「ニコニ立体ちゃん」をダウンロードいただきましてありがとうございます。 10 | 11 | ◯ 内容物 12 | 1. VRMファイル 13 | 2. ニコニ立体ちゃん壁紙1種 14 | 15 | 16 | ◯よくある質問 17 | * 「ニコニ立体ちゃん」と「アリシア・ソリッド」、正式名称はどちら? 18 | キャラクターの本名はアリシア・ソリッドですが、クレジット等での表記はニコニ立体ちゃんが正式名称となります。 19 | 作品発表の際には「ニコニ立体ちゃん」タグをご活用ください。 20 | 21 | * ニコニ立体ちゃんを用いた、年齢制限のある二次創作物の公開は可能なのか? 22 | 利用規約にある禁止事項に抵触しない限りにおいて可能です。 23 | 24 | 25 | ◯ 利用規約抜粋 26 | 必ず利用規約( http://3d.nicovideo.jp/alicia/rule.html )をご確認ください。 27 | 利用規約の改訂などによって下記抜粋と利用規約の内容が異なる場合は利用規約が優先されます。 28 | 29 | * 非営利、営利に関わらず個人(同人サークルなど、法人を除く団体を含む)の利用が可能です。 30 | * 二次創作物について株式会社ドワンゴ(以下、当社)のクレジットを表記する必要はありません。 31 | * 改変物を配布することができます。 32 | * niconico内でキャラクターやモーションを利用した作品を投稿する場合は、コンテンツツリーの親作品にキャラクター( http://3d.nicovideo.jp/works/td14712 )を登録するよう努めるものとします。 33 | 34 | 35 | ◯禁止事項 36 | * 第三者の知的財産権その他一切の権利及び名誉を侵害しないこと。 37 | * 当社(当社が提供するサービス等を含む)及び当社キャラクターの名誉・品位傷つける行為をしないこと。 38 | * 公序良俗に反する行為や目的、暴力的な表現、反社会的な行為や目的、特定の信条や宗教、政治的発言のため利用しないこと。 39 | * 当社の公式商品であるかのような誤解を招く利用をしないこと。 40 | * その他、当社が不適切と判断する行為に利用しないこと。 41 | 42 | 43 | ◯ クレジット 44 | 企画: 株式会社ドワンゴ 45 | キャラクターデザイン: 黒星紅白 46 | モデリング: 雨刻 -------------------------------------------------------------------------------- /WebContent/dataset/vrm/LICENSE: -------------------------------------------------------------------------------- 1 | The files under this directory are NOT under MIT license, but other licenses. 2 | 3 | See readme in each directory for the detail. 4 | -------------------------------------------------------------------------------- /WebContent/dataset/vrm/texture/alphamap_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/texture/alphamap_l.png -------------------------------------------------------------------------------- /WebContent/dataset/vrm/texture/alphamap_ll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/texture/alphamap_ll.png -------------------------------------------------------------------------------- /WebContent/dataset/vrm/texture/alphamap_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/texture/alphamap_m.png -------------------------------------------------------------------------------- /WebContent/dataset/vrm/texture/alphamap_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/dataset/vrm/texture/alphamap_s.png -------------------------------------------------------------------------------- /WebContent/examples/ammo/bodies/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.groundRestitution=0.5; 12 | this.ballRestitution=0.5; 13 | this.groundFriction=1; 14 | this.ballFriction=1; 15 | this.zForce=50; 16 | this.angularDamping=0.1; 17 | this.linearDamping=0.1; 18 | 19 | this.ballType="Box"; 20 | this.ballStartY=10; 21 | this.ball=null; 22 | 23 | var Signal = signals.Signal; 24 | 25 | this.signals = { 26 | windowResize: new Signal(), 27 | rendered:new Signal(), 28 | ammoSettingUpdated:new Signal() 29 | } 30 | }; 31 | 32 | 33 | Application.prototype = { 34 | 35 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/bonesync/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | var Signal = signals.Signal; 13 | 14 | this.signals = { 15 | windowResize: new Signal(), 16 | rendered:new Signal(), 17 | skinnedMeshChanged:new Signal(), 18 | } 19 | 20 | 21 | 22 | }; 23 | 24 | 25 | Application.prototype = { 26 | 27 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Helvetica, Arial, sans-serif; 3 | font-size: 14px; 4 | margin: 0; 5 | overflow: hidden; 6 | } 7 | 8 | .Panel { 9 | -moz-user-select: none; 10 | -webkit-user-select: none; 11 | -ms-user-select: none; 12 | 13 | /* No support for these yet */ 14 | -o-user-select: none; 15 | user-select: none; 16 | } 17 | 18 | 19 | .appname{ 20 | font-weight: 450; 21 | color: #aaa; 22 | padding:4px; 23 | } 24 | #viewport { 25 | position: absolute; 26 | top: 0px; 27 | left: 0; 28 | right: 300px; 29 | bottom: 0; 30 | } 31 | 32 | #sidebar { 33 | position: absolute; 34 | right: 0; 35 | top: 0px; 36 | bottom: 0; 37 | width: 300px; 38 | background: #eee; 39 | overflow: auto; 40 | } 41 | 42 | 43 | #sidebar .Panel { 44 | color: #888; 45 | padding: 10px; 46 | border-top: 1px solid #ccc; 47 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/damping/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.groundRestitution=0.5; 12 | this.ballRestitution=0.5; 13 | this.groundFriction=.1; 14 | this.ballFriction=.1; 15 | this.zForce=10; 16 | this.angularDamping=0.1; 17 | this.linearDamping=0.1 18 | 19 | 20 | 21 | this.ballStartY=10; 22 | this.ball=null; 23 | this.ballMass=1; 24 | 25 | var Signal = signals.Signal; 26 | 27 | this.signals = { 28 | windowResize: new Signal(), 29 | rendered:new Signal(), 30 | ammoSettingUpdated:new Signal() 31 | } 32 | }; 33 | 34 | 35 | Application.prototype = { 36 | 37 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/factorlock/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.xForce=0; 12 | this.yForce=0; 13 | this.zForce=0; 14 | 15 | this.angularDamping=0.1; 16 | this.linearDamping=0.1; 17 | 18 | this.lineLength=5; 19 | this.ball=null; 20 | this.ball2=null; 21 | this.constraint=null; 22 | this.disableCollisionsBetweenLinkedBodies=false; 23 | this.frameInA=true; 24 | this.frameInAPos=false; 25 | this.damping=1; 26 | this.stiffness=100; 27 | this.ballMass=1; 28 | 29 | this.posYDirection=false; 30 | 31 | this.linearLimitValue=0; 32 | this.lockEdge=false; 33 | this.lockRoot=true; 34 | 35 | var Signal = signals.Signal; 36 | 37 | this.signals = { 38 | windowResize: new Signal(), 39 | rendered:new Signal(), 40 | ammoSettingUpdated:new Signal() 41 | } 42 | }; 43 | 44 | 45 | Application.prototype = { 46 | 47 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/friction/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.groundRestitution=0.5; 12 | this.ballRestitution=0.5; 13 | this.groundFriction=.5; 14 | this.ballFriction=.5; 15 | this.zForce=25; 16 | 17 | this.ballStartY=10; 18 | this.ball=null; 19 | 20 | var Signal = signals.Signal; 21 | 22 | this.signals = { 23 | windowResize: new Signal(), 24 | rendered:new Signal(), 25 | ammoSettingUpdated:new Signal() 26 | } 27 | }; 28 | 29 | 30 | Application.prototype = { 31 | 32 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/generic6dof/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.xForce=0; 12 | this.yForce=0; 13 | this.zForce=25; 14 | 15 | this.angularDamping=0.1; 16 | this.linearDamping=0.1; 17 | 18 | this.lineLength=5; 19 | this.ball=null; 20 | this.ball2=null; 21 | this.constraint=null; 22 | this.disableCollisionsBetweenLinkedBodies=false; 23 | this.frameInA=true; 24 | 25 | this.linearLimitValue=0; 26 | 27 | var Signal = signals.Signal; 28 | 29 | this.signals = { 30 | windowResize: new Signal(), 31 | rendered:new Signal(), 32 | ammoSettingUpdated:new Signal() 33 | } 34 | }; 35 | 36 | 37 | Application.prototype = { 38 | 39 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Ammo Physics Basic Examples 4 | 5 | 6 |

Ammo Physics Basic Examples

7 | Hello World
8 | restitution
9 | friction
10 | damping
11 | mass
12 | bodies
13 | point2point constraint
14 | generic6dof constraint
15 | generic6dofspring constraint
16 | generic6dofspring constraint with more options
17 | multi constraint
18 | geometry cloth
19 | transform
20 | bone sync
21 | factorlock
22 | keepdistance mthod
23 | 24 |
25 |

TODO

26 | Make Plain Ammo Examples like Three.js Example 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /WebContent/examples/ammo/js/AmmoBoxBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | 2 | //Vector3 boxSize,btRigidBody body, Mesh mesh 3 | AmmoBoxBodyAndMesh = function(boxSize,body,mesh){ 4 | AmmoBodyAndMesh.call(this,body,mesh); 5 | this.boxSize=boxSize; 6 | 7 | this.rotationSync=true; 8 | this.shapeType=AmmoBodyAndMesh.TYPE_BOX; 9 | } 10 | 11 | AmmoBoxBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 12 | AmmoBoxBodyAndMesh.prototype.constructor = AmmoBoxBodyAndMesh; 13 | -------------------------------------------------------------------------------- /WebContent/examples/ammo/js/AmmoCapsuleBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | 2 | //double radius,double height,btRigidBody body, Mesh mesh 3 | AmmoCapsuleBodyAndMesh = function(radius,height,body,mesh){ 4 | AmmoBodyAndMesh.call(this,body,mesh); 5 | this.radius=radius; 6 | this.height=height; 7 | 8 | this.rotationSync=true; 9 | this.shapeType=AmmoBodyAndMesh.TYPE_CAPSULE; 10 | } 11 | 12 | AmmoCapsuleBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 13 | AmmoCapsuleBodyAndMesh.prototype.constructor = AmmoCapsuleBodyAndMesh; 14 | -------------------------------------------------------------------------------- /WebContent/examples/ammo/js/AmmoSphereBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | AmmoSphereBodyAndMesh = function(radius,body,mesh){ 2 | AmmoBodyAndMesh.call(this,body,mesh); 3 | this.radius=radius; 4 | 5 | this.rotationSync=true; 6 | this.shapeType=AmmoBodyAndMesh.TYPE_SPHERE; 7 | } 8 | 9 | AmmoSphereBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 10 | AmmoSphereBodyAndMesh.prototype.constructor = AmmoSphereBodyAndMesh; 11 | -------------------------------------------------------------------------------- /WebContent/examples/ammo/js/deprecated.txt: -------------------------------------------------------------------------------- 1 | move to /example/js/ammo -------------------------------------------------------------------------------- /WebContent/examples/ammo/mass/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.groundRestitution=0.5; 12 | this.ballRestitution=0.5; 13 | this.groundFriction=.1; 14 | this.ballFriction=.1; 15 | this.zForce=25; 16 | this.angularDamping=0.1; 17 | this.linearDamping=0.1; 18 | 19 | this.ballMass=1; 20 | this.ballStartY=1; 21 | this.ball=null; 22 | this.ball2=null; 23 | 24 | var Signal = signals.Signal; 25 | 26 | this.signals = { 27 | windowResize: new Signal(), 28 | rendered:new Signal(), 29 | ammoSettingUpdated:new Signal() 30 | } 31 | }; 32 | 33 | 34 | Application.prototype = { 35 | 36 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/multiconstraint/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | 13 | this.groundRestitution=0.1; 14 | this.ballRestitution=0.1; 15 | this.groundFriction=.1; 16 | this.ballFriction=.1; 17 | 18 | this.xForce=0; 19 | this.yForce=0; 20 | this.zForce=25; 21 | 22 | this.angularDamping=0; 23 | this.linearDamping=0; 24 | 25 | this.lineLength=5; 26 | this.ball=null; 27 | this.ball2=null; 28 | this.ball3=null; 29 | this.ball4=null; 30 | this.ball5=null; 31 | this.constraint=null; 32 | this.constraint2=null; 33 | this.constraint3=null; 34 | this.constraint4=null; 35 | this.disableCollisionsBetweenLinkedBodies=false; 36 | this.frameInA=true; 37 | this.linearLimitValue=0; 38 | 39 | var Signal = signals.Signal; 40 | 41 | this.signals = { 42 | windowResize: new Signal(), 43 | rendered:new Signal(), 44 | ammoSettingUpdated:new Signal() 45 | } 46 | }; 47 | 48 | 49 | Application.prototype = { 50 | 51 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/point2point/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.xForce=0; 12 | this.yForce=0; 13 | this.zForce=25; 14 | 15 | this.angularDamping=0.1; 16 | this.linearDamping=0.1; 17 | 18 | this.lineLength=5; 19 | this.ball=null; 20 | this.constraint=null; 21 | 22 | var Signal = signals.Signal; 23 | 24 | this.signals = { 25 | windowResize: new Signal(), 26 | rendered:new Signal(), 27 | ammoSettingUpdated:new Signal() 28 | } 29 | }; 30 | 31 | 32 | Application.prototype = { 33 | 34 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/restitution/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 15, 30 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.groundRestitution=1; 12 | this.ballRestitution=1; 13 | this.ballStartY=10; 14 | this.ball=null; 15 | 16 | var Signal = signals.Signal; 17 | 18 | this.signals = { 19 | windowResize: new Signal(), 20 | rendered:new Signal(), 21 | ammoSettingUpdated:new Signal() 22 | } 23 | }; 24 | 25 | 26 | Application.prototype = { 27 | 28 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/restitution/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var groundMass=0.0; 3 | 4 | var ground=application.ammoControler.createBox(new THREE.Vector3(8, 2, 8), groundMass, 0, 0, 0, 5 | new THREE.MeshPhongMaterial({color:0x888888}) 6 | ); 7 | ground.getBody().setRestitution(application.groundRestitution); 8 | 9 | Example.newBall(application); 10 | 11 | ground.getBody().setFriction(100); 12 | application.ball.getBody().setFriction(100); 13 | 14 | 15 | application.signals.ammoSettingUpdated.add(function(){ 16 | ground.getBody().setRestitution(application.groundRestitution); 17 | application.ball.getBody().setRestitution(application.ballRestitution); 18 | }); 19 | 20 | } 21 | 22 | Example.newBall=function(application){ 23 | if(application.ball!=null){ 24 | application.ammoControler.destroyBodyAndMesh(application.ball); 25 | } 26 | 27 | 28 | application.ball=application.ammoControler.createSphere(1, 1, 0, application.ballStartY, 0, 29 | new THREE.MeshPhongMaterial({color:0x880000}) 30 | ); 31 | //application.sphere.getBody().setActivationState(Ammo.DISABLE_DEACTIVATION); 32 | 33 | application.ball.getBody().setRestitution(application.ballRestitution); 34 | 35 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/spring/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 90, 160 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.xForce=0; 12 | this.yForce=0; 13 | this.zForce=0; 14 | 15 | this.angularDamping=0; 16 | this.linearDamping=0; 17 | 18 | this.lineLength=5; 19 | this.ball=null; 20 | this.ball2=null; 21 | this.constraint=null; 22 | this.disableCollisionsBetweenLinkedBodies=false; 23 | this.frameInA=true; 24 | this.damping=1; 25 | this.stiffness=100; 26 | 27 | this.posYDirection=true; 28 | 29 | this.linearLimitValue=1; 30 | 31 | var Signal = signals.Signal; 32 | 33 | this.signals = { 34 | windowResize: new Signal(), 35 | rendered:new Signal(), 36 | ammoSettingUpdated:new Signal() 37 | } 38 | }; 39 | 40 | 41 | Application.prototype = { 42 | 43 | } -------------------------------------------------------------------------------- /WebContent/examples/ammo/transform/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0x888888 ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | var Signal = signals.Signal; 13 | 14 | this.signals = { 15 | windowResize: new Signal(), 16 | rendered:new Signal(), 17 | } 18 | 19 | 20 | 21 | }; 22 | 23 | 24 | Application.prototype = { 25 | 26 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/convert0rotated/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/euler/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/euler/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Bone Rotation with Euler-Order")); 6 | 7 | container.add(new Sidebar.BoneRotateWithOrder(ap)); 8 | 9 | container.add(new Sidebar.Model(ap)); 10 | Logics.loadingModelFinishedForBoneAttachControler(ap); 11 | Logics.loadingModelFinishedForIkControler(ap); 12 | 13 | container.add(new Sidebar.Texture(ap)); 14 | Logics.materialChangedForSimple(ap); 15 | 16 | container.add(new Sidebar.Hair(ap)); 17 | Logics.loadingHairFinished(ap); 18 | 19 | container.add(new Sidebar.SimpleLight(ap)); 20 | return container; 21 | } 22 | -------------------------------------------------------------------------------- /WebContent/examples/bone/getposition/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/getposition/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/make/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, -5, 30 ); 9 | 10 | 11 | var Signal = signals.Signal; 12 | 13 | this.signals = { 14 | windowResize: new Signal(), 15 | rendered:new Signal(), 16 | boneAnimationStarted:new Signal(), 17 | boneAnimationFinished:new Signal(), 18 | skinnedMeshChanged:new Signal(), 19 | } 20 | 21 | 22 | 23 | }; 24 | 25 | 26 | Application.prototype = { 27 | 28 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/make/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Simple Bone Make")); 6 | 7 | var boneAnimation=new BoneRotateAnimationPanel(application); 8 | container.add(boneAnimation); 9 | 10 | return container; 11 | } 12 | -------------------------------------------------------------------------------- /WebContent/examples/bone/meshtransform/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | Logics.loadingModelFinishedForMeshTransform(ap); 14 | ap.signals.loadingModelFinished.add(function(){ 15 | ap.objectTransformControler.logging=true; 16 | },-100); 17 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 18 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/meshtransform/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/meshtransform/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Mesh Transform")); 6 | container.add(new Sidebar.MeshTransform(ap)); 7 | 8 | container.add(new Sidebar.Model(ap)); 9 | Logics.loadingModelFinishedForBoneAttachControler(ap); 10 | 11 | container.add(new Sidebar.Texture(ap)); 12 | Logics.materialChangedForSimple(ap); 13 | 14 | container.add(new Sidebar.Hair(ap)); 15 | Logics.loadingHairFinished(ap); 16 | 17 | container.add(new Sidebar.SimpleLight(ap)); 18 | return container; 19 | } 20 | -------------------------------------------------------------------------------- /WebContent/examples/bone/poseab/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | 5 | 6 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 7 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 8 | 9 | 10 | Logics.loadTextureAtOnce(ap,"../../../dataset/mbl3d/texture/ao.jpg","aoMap"); 11 | 12 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 13 | 14 | 15 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/poseab/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/poseedit/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | ap.fingerPresetsControler=new FingerPresetsControler(ap,new FingerPresets()); 15 | 16 | Logics.loadTextureAtOnce(ap,"../../../dataset/mbl3d/texture/aogaus5.jpg","aoMap"); 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/poseedit/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '16px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | var selection=new UI.Text("");//.setMarginLeft("16px"); 21 | container.add(new UI.Text("Selected"),new UI.Break(),selection); 22 | 23 | ap.getSignal("transformSelectionChanged").add(function(target){ 24 | if(target==null){ 25 | selection.setValue(""); 26 | }else{ 27 | selection.setValue(target.name); 28 | } 29 | }); 30 | 31 | function update() { 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/bone/posesave/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/posesave/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/rotatecontrol/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/rotatecontrol/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/rotatecontrol/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Bone Rotate Control")); 6 | 7 | 8 | container.add(new Sidebar.MeshRotate(ap)); 9 | 10 | var boneRotate=new Sidebar.BoneRotate(ap); 11 | boneRotate.add(new LRBoneRow(ap)); 12 | 13 | container.add(boneRotate); 14 | 15 | container.add(new Sidebar.Model(ap)); 16 | Logics.loadingModelFinishedForBoneAttachControler(ap); 17 | Logics.loadingModelFinishedForRotationControler(ap); 18 | ap.signals.loadingModelFinished.add(function(){ 19 | ap.rotationControler.logging=true; 20 | },undefined,-1); 21 | 22 | container.add(new Sidebar.Texture(ap)); 23 | Logics.materialChangedForSimple(ap); 24 | 25 | container.add(new Sidebar.Hair(ap)); 26 | Logics.loadingHairFinished(ap); 27 | 28 | container.add(new Sidebar.SimpleLight(ap)); 29 | return container; 30 | } 31 | -------------------------------------------------------------------------------- /WebContent/examples/bone/transform/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.selectedBone=null; 12 | 13 | var Signal = signals.Signal; 14 | 15 | this.signals = { 16 | windowResize: new Signal(), 17 | rendered:new Signal(), 18 | loadingModelFinished:new Signal(), 19 | } 20 | 21 | 22 | 23 | }; 24 | 25 | 26 | Application.prototype = { 27 | 28 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/transform/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | ap.camera.position.set( 0, 10, 30 ); 5 | ap.controls.target.set(0,10,0); 6 | ap.controls.update(); 7 | 8 | var url="../../../dataset/mbl3d/models/anime2_nomorph.glb"; 9 | 10 | var mesh=null; 11 | 12 | var material=new THREE.MeshPhongMaterial({color:0x888888,skinning:true}); 13 | 14 | AppUtils.loadGltfMesh(url,function(mesh){ 15 | console.log("loadGltfMesh:",url); 16 | 17 | mesh.scale.set(10,10,10); 18 | mesh.material=material; 19 | ap.scene.add(mesh); 20 | ap.skinnedMesh=mesh; 21 | var helper=new THREE.SkeletonHelper(mesh); 22 | ap.scene.add(helper); 23 | 24 | mesh.updateMatrixWorld(true); 25 | //keep default values. 26 | var boneList=BoneUtils.getBoneList(mesh); 27 | 28 | 29 | 30 | ap.defaultBoneMatrix=BoneUtils.storeDefaultBoneMatrix(boneList); 31 | ap.currentBoneMatrix=BoneUtils.makeEmptyBoneMatrix(boneList); 32 | //var name=Mbl3dUtils.shortenMbl3dBoneName(bone.name); 33 | 34 | ap.signals.loadingModelFinished.dispatch(); 35 | }); 36 | 37 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/translatecontrol/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/bone/translatecontrol/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/bone/translatecontrol/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Bone Rotate Control")); 6 | 7 | 8 | container.add(new Sidebar.MeshRotate(ap)); 9 | 10 | 11 | 12 | container.add(new Sidebar.BoneRootTranslate(ap)); 13 | 14 | container.add(new Sidebar.Model(ap)); 15 | Logics.loadingModelFinishedForBoneAttachControler(ap); 16 | Logics.loadingModelFinishedForTranslateControler(ap); 17 | ap.signals.loadingModelFinished.add(function(){ 18 | ap.translateControler.logging=true; 19 | },undefined,-1); 20 | 21 | container.add(new Sidebar.Texture(ap)); 22 | Logics.materialChangedForSimple(ap); 23 | 24 | container.add(new Sidebar.Hair(ap)); 25 | Logics.loadingHairFinished(ap); 26 | 27 | container.add(new Sidebar.SimpleLight(ap)); 28 | return container; 29 | } 30 | -------------------------------------------------------------------------------- /WebContent/examples/ik/_endsite/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Ik EndSite")); 6 | 7 | 8 | 9 | 10 | var ikPanel=new Sidebar.IkLBasic(application); 11 | container.add(ikPanel); 12 | ikPanel.add(new Sidebar.IkSolve(ap)); 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | container.add(new Sidebar.IkReset(ap)); 23 | 24 | 25 | var iks=new Sidebar.Iks(ap); 26 | container.add(iks); 27 | 28 | return container; 29 | } 30 | -------------------------------------------------------------------------------- /WebContent/examples/ik/_limitbone/js/Sidebar.IkBoneList.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkBoneList=function(ap){ 2 | ap.signals.transformSelectionChanged.add(function(target){ 3 | 4 | boneListButtons.forEach(function(button){ 5 | boneListRow.remove(button); 6 | }); 7 | boneListButtons=[]; 8 | 9 | var boneList=BoneUtils.getBoneList(ap.skinnedMesh); 10 | if(target!=null){ 11 | if(ap.ikControler.ikTarget==null){ 12 | //console.log("invalidly call sidebar first");//other type selected 13 | return; 14 | } 15 | 16 | ap.ikControler.ikIndices.forEach(function(index){ 17 | 18 | var name=boneList[index].name; 19 | var bt=new UI.Button(name); 20 | bt.onClick(function(){ 21 | ap.signals.boneSelectionChanged.dispatch(index); 22 | }); 23 | boneListRow.add(bt); 24 | boneListButtons.push(bt); 25 | }); 26 | } 27 | 28 | },undefined,0); 29 | var boneListButtons=[]; 30 | var ikBoneList=new UI.TitlePanel("Ik Bone List"); 31 | 32 | var boneListRow=new UI.Row(); 33 | ikBoneList.add(boneListRow); 34 | return ikBoneList; 35 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/_limitbone/js/Sidebar.IkSolve.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkSolve=function(ap){ 2 | var solveIkRow=new UI.ButtonRow("Solve Selected",function(){ 3 | ap.signals.solveIkCalled.dispatch(); 4 | }); 5 | 6 | 7 | var resetAndSolve=new UI.Button("Reset & Solve5"); 8 | resetAndSolve.onClick(function(){ 9 | if(ap.ikControler.ikTarget!=null){ 10 | ap.ikControler.ikIndices.forEach(function(index){ 11 | BoneUtils.resetBone(ap.skinnedMesh,index); 12 | }); 13 | } 14 | ap.ikControler.boneAttachControler.update(); 15 | 16 | ap.signals.solveIkCalled.dispatch(); 17 | ap.signals.solveIkCalled.dispatch(); 18 | ap.signals.solveIkCalled.dispatch(); 19 | ap.signals.solveIkCalled.dispatch(); 20 | ap.signals.solveIkCalled.dispatch(); 21 | }); 22 | 23 | solveIkRow.add(resetAndSolve); 24 | 25 | var reset=new UI.Button("Reset"); 26 | reset.onClick(function(){ 27 | if(ap.ikControler.ikTarget!=null){ 28 | ap.ikControler.ikIndices.forEach(function(index){ 29 | BoneUtils.resetBone(ap.skinnedMesh,index); 30 | }); 31 | } 32 | ap.ikControler.boneAttachControler.update(); 33 | }); 34 | 35 | solveIkRow.add(reset); 36 | return solveIkRow; 37 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/_preset/js/Sidebar.JSONExport.js: -------------------------------------------------------------------------------- 1 | Sidebar.JSONExport=function(ap,jsonFunction,fileNameFunction){ 2 | var scope=this; 3 | if(fileNameFunction==undefined){ 4 | fileNameFunction=function(base){ 5 | if(base==""){ 6 | base="data"; 7 | } 8 | return base+".json"; 9 | } 10 | } 11 | this.fileName=""; 12 | var exportPanel=new UI.TitlePanel("Export"); 13 | var nameRow=new UI.InputRow("Name","",function(v){scope.fileName=v}); 14 | nameRow.text.setWidth("110px"); 15 | nameRow.text.setMarginRight("6px"); 16 | 17 | nameRow.input.setWidth("140px"); 18 | exportPanel.add(nameRow); 19 | 20 | var bt=new UI.Button("Make Download").onClick( function () { 21 | span.dom.innerHTML = '' 22 | var fileName=fileNameFunction(scope.fileName); 23 | var jsonText=jsonFunction(fileName); 24 | var link=AppUtils.generateTextDownloadLink(jsonText,fileName,fileName,true); 25 | span.dom.appendChild(link); 26 | link.click(); 27 | } ); 28 | exportPanel.add(bt); 29 | bt.setMarginRight("6px"); 30 | var span=new UI.Span(); 31 | exportPanel.add(span); 32 | return exportPanel; 33 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/_preset/js/Sidebar.JSONImport.js: -------------------------------------------------------------------------------- 1 | Sidebar.JSONImport=function(ap,jsonFunction,accepts){ 2 | if(accepts==undefined){ 3 | accepts=".json"; 4 | } 5 | var container=new UI.TitlePanel("Import"); 6 | 7 | var row1=new UI.Row(); 8 | container.add(row1); 9 | 10 | 11 | var fileInput=new UI.TextFile(accepts); 12 | row1.add(fileInput); 13 | 14 | fileInput.onChange(function(fileName,text){ 15 | 16 | if(text==null){//just Reset 17 | jsonFunction(json); 18 | return; 19 | } 20 | 21 | var json = JSON.parse( text );//TODO catch 22 | jsonFunction(json); 23 | }); 24 | 25 | return container; 26 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/_ratio/js/Sidebar.IkRatio.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkRatio=function(ap){ 2 | var panel=new BoneSelectionPanel(ap,function(bone,index){ 3 | var v=ap.ikControler.getBoneRatio(bone.name); 4 | ratio.setValue(v); 5 | }); 6 | panel.text.setTextContent("Ik Ratio"); 7 | 8 | 9 | 10 | var ratio=new UI.NumberButtons("Ratio",0,1,0.1,1,function(v){ 11 | ap.ikControler.setBoneRatio(bone.name,v); 12 | },[0.01,0.1,0.5,1]); 13 | panel.add(ratio); 14 | 15 | return panel; 16 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/_ratio/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Ik Ratio")); 6 | 7 | 8 | 9 | 10 | var ikPanel=new Sidebar.IkLBasic(application); 11 | container.add(ikPanel); 12 | ikPanel.add(new Sidebar.IkSolve(ap)); 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | container.add(new Sidebar.IkReset(ap)); 23 | 24 | 25 | var boneSelectionPanel=new Sidebar.IkRatio(ap); 26 | container.add(boneSelectionPanel); 27 | 28 | var IkBoneList=new Sidebar.IkBoneList(ap); 29 | container.add(IkBoneList); 30 | 31 | var iks=new Sidebar.Iks(ap); 32 | container.add(iks); 33 | 34 | return container; 35 | } 36 | -------------------------------------------------------------------------------- /WebContent/examples/ik/basic/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | this.randomSize=10; 12 | this.minDistance=3; 13 | this.maxDistance=5; 14 | this.jointCount=5; 15 | this.maxAngle=1; 16 | this.iteration=10; 17 | 18 | var Signal = signals.Signal; 19 | this.signals = { 20 | ikCreated: new Signal(), 21 | windowResize: new Signal(), 22 | rendered:new Signal(), 23 | } 24 | 25 | 26 | 27 | 28 | 29 | 30 | }; 31 | 32 | 33 | Application.prototype = { 34 | 35 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/basic/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | container.add(new UI.Text("Many source code come from "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js","Three.js")); 19 | 20 | 21 | signals.rendered.add( update ); 22 | 23 | // 24 | var sharedVec=new THREE.Vector3(); 25 | 26 | function update() { 27 | 28 | 29 | } 30 | 31 | return container; 32 | 33 | }; 34 | -------------------------------------------------------------------------------- /WebContent/examples/ik/endsite/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | ap.signals.loadingModelFinished.add(function(){ 13 | ap.boneAttachControler.setVisible(true); 14 | },undefined,-1); 15 | 16 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 17 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/endsite/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/ik/endsite/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("End Site")); 6 | 7 | 8 | container.add(new Sidebar.MeshRotate(ap)); 9 | container.add(new Sidebar.IkControl(ap)); 10 | container.add(new Sidebar.IkBasic(ap)); 11 | container.add(new IkSolveRow(ap)); 12 | container.add(new Sidebar.IkReset(ap)); 13 | 14 | container.add(new Sidebar.Model(ap)); 15 | Logics.loadingModelFinishedForBoneAttachControler(ap); 16 | Logics.loadingModelFinishedForIkControler(ap); 17 | ap.signals.loadingModelFinished.add(function(){ 18 | ap.ikControler.logging=true; 19 | },undefined,-1); 20 | 21 | container.add(new Sidebar.Texture(ap)); 22 | Logics.materialChangedForSimple(ap); 23 | 24 | container.add(new Sidebar.Hair(ap)); 25 | Logics.loadingHairFinished(ap); 26 | 27 | container.add(new Sidebar.SimpleLight(ap)); 28 | return container; 29 | } 30 | -------------------------------------------------------------------------------- /WebContent/examples/ik/ikcontrol/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/ikcontrol/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/ik/ikcontrol/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Ik Control")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | main.add(new Sidebar.MeshRotate(ap)); 11 | main.add(new Sidebar.IkControl(ap)); 12 | main.add(new Sidebar.IkBasic(ap)); 13 | main.add(new IkSolveRow(ap)); 14 | main.add(new Sidebar.IkReset(ap)); 15 | main.add(new Sidebar.Debug(ap)); 16 | 17 | var sub=tab.addItem("Sub"); 18 | sub.add(new Sidebar.Model(ap)); 19 | Logics.loadingModelFinishedForBoneAttachControler(ap); 20 | Logics.loadingModelFinishedForIkControler(ap); 21 | ap.signals.loadingModelFinished.add(function(){ 22 | ap.ikControler.logging=true; 23 | },undefined,-1); 24 | 25 | sub.add(new Sidebar.Texture(ap)); 26 | Logics.materialChangedForSimple(ap); 27 | 28 | sub.add(new Sidebar.Hair(ap)); 29 | Logics.loadingHairFinished(ap); 30 | 31 | sub.add(new Sidebar.SimpleLight(ap)); 32 | return container; 33 | } 34 | -------------------------------------------------------------------------------- /WebContent/examples/ik/ikorder/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | IK Examples 4 | 5 | 6 |

IK Examples

7 |

Simple

8 | Simple IK
9 | Basic IK
10 | Translate IK
11 |

3D Character Base Example

12 | Bone IK
13 | Limit Ik Bone
14 | Add Ik Endsite
15 | Ik Ratio.Each bone has different max angle
16 | Preset Ik
17 |

TODO

18 | test other lib 19 |

License

20 | 3D Character is created by Manuel Bastioni, CCBY4 Licensed 21 | 22 |

Links

23 | Three.js Core library 24 | https://github.com/animate1978/MB-Lab Manuel Bastioni project is shutdown.This Project is one of successor
25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /WebContent/examples/ik/limitbone/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | 14 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 15 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/preset/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/ratio/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/ratio/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Ik Ratio")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | 11 | main.add(new Sidebar.IkControl(ap)); 12 | main.add(new IkRotateRow(ap)); 13 | main.add(new Sidebar.IkBasic(ap)); 14 | main.add(new IkSolveRow(ap)); 15 | main.add(new Sidebar.IkReset(ap)); 16 | 17 | main.add(new Sidebar.IkBoneList(ap)); 18 | var boneRotate=new Sidebar.BoneRotate(ap,false); 19 | boneRotate.add(new LRBoneRow(ap)); 20 | main.add(boneRotate); 21 | 22 | 23 | main.add(new IkRatioRow(ap)); 24 | 25 | 26 | main.add(new Sidebar.IkRatioIO(ap)); 27 | 28 | 29 | 30 | 31 | 32 | 33 | var sub2=tab.addItem("Sub"); 34 | 35 | sub2.add(new Sidebar.MeshRotate(ap)); 36 | sub2.add(new Sidebar.Model(ap)); 37 | Logics.loadingModelFinishedForBoneAttachControler(ap); 38 | Logics.loadingModelFinishedForIkControler(ap); 39 | 40 | 41 | sub2.add(new Sidebar.Texture(ap)); 42 | Logics.materialChangedForSimple(ap); 43 | 44 | sub2.add(new Sidebar.Hair(ap)); 45 | Logics.loadingHairFinished(ap); 46 | 47 | sub2.add(new Sidebar.SimpleLight(ap)); 48 | return container; 49 | } 50 | -------------------------------------------------------------------------------- /WebContent/examples/ik/simple/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | var Signal = signals.Signal; 13 | 14 | this.signals = { 15 | windowResize: new Signal(), 16 | rendered:new Signal(), 17 | 18 | } 19 | 20 | 21 | 22 | }; 23 | 24 | 25 | Application.prototype = { 26 | 27 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/simple/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | ap.camera.position.set( 0, 0, 30 ); 5 | ap.controls.target.set(0,0,0); 6 | ap.controls.update(); 7 | 8 | 9 | var mesh=new THREE.Mesh(new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:0x880000})); 10 | ap.scene.add(mesh); 11 | ap.mesh=mesh; 12 | 13 | var mesh2=new THREE.Mesh(new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:0x000088})); 14 | mesh2.position.set(3,0,0); 15 | mesh.add(mesh2); 16 | ap.mesh2=mesh2; 17 | 18 | //joint 19 | var geo = new THREE.Geometry(); 20 | geo.vertices.push( new THREE.Vector3( )); 21 | geo.vertices.push( new THREE.Vector3(3,0,0)); 22 | var material=new THREE.LineBasicMaterial({color:0xcccccc}); 23 | 24 | var joint = new THREE.Line( geo,material); 25 | mesh.add(joint); 26 | 27 | 28 | var target=new THREE.Mesh(new THREE.BoxGeometry(2,2,2),new THREE.MeshBasicMaterial({color:0x008800,transparent:true,opacity:0.5})); 29 | target.position.set(0,3,0); 30 | ap.scene.add(target); 31 | ap.target=target; 32 | 33 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/simple/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Simple IK")); 6 | 7 | //ui 8 | var p1=new UI.Panel(); 9 | var bt=new UI.Button("Do Step").onClick( function () { 10 | var lastJointPos=ap.mesh2.getWorldPosition(new THREE.Vector3()); 11 | var jointPos=ap.mesh.getWorldPosition(new THREE.Vector3()); 12 | var jointRotQ=ap.mesh.quaternion; 13 | var targetPos=ap.target.getWorldPosition(new THREE.Vector3()); 14 | 15 | var newQ=IkUtils.stepCalculate(lastJointPos,jointPos,jointRotQ,targetPos,5); 16 | ap.mesh.quaternion.copy(newQ); 17 | } ); 18 | p1.add(bt); 19 | container.add(p1); 20 | 21 | return container; 22 | } 23 | -------------------------------------------------------------------------------- /WebContent/examples/ik/simple/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | container.add(new UI.Text("Many source code come from "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js","Three.js")); 19 | 20 | 21 | signals.rendered.add( update ); 22 | 23 | // 24 | var sharedVec=new THREE.Vector3(); 25 | 26 | function update() { 27 | 28 | 29 | } 30 | 31 | return container; 32 | 33 | }; 34 | -------------------------------------------------------------------------------- /WebContent/examples/ik/translate/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.objects=[]; 4 | 5 | this.scene.name = 'Scene'; 6 | this.scene.background = new THREE.Color( 0xaaaaaa ); 7 | 8 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 9 | this.camera.name = 'Camera'; 10 | this.camera.position.set( 0, 5, 10 ); 11 | this.camera.lookAt( new THREE.Vector3() ); 12 | 13 | this.randomSize=10; 14 | this.minDistance=3; 15 | this.maxDistance=5; 16 | this.jointCount=5; 17 | this.maxAngle=1; 18 | this.iteration=10; 19 | 20 | 21 | var Signal = signals.Signal; 22 | this.signals = { 23 | transformChanged:new Signal(), 24 | transformSelectionChanged:new Signal(), 25 | ikTargetSelected: new Signal(), 26 | ikTargetCreated: new Signal(), 27 | ikCreated: new Signal(), 28 | windowResize: new Signal(), 29 | rendered:new Signal(), 30 | } 31 | 32 | 33 | 34 | 35 | 36 | 37 | }; 38 | 39 | 40 | Application.prototype = { 41 | 42 | } -------------------------------------------------------------------------------- /WebContent/examples/ik/translate/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | container.add(new UI.Text("Many source code come from "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js","Three.js")); 19 | 20 | 21 | signals.rendered.add( update ); 22 | 23 | // 24 | var sharedVec=new THREE.Vector3(); 25 | 26 | function update() { 27 | 28 | 29 | } 30 | 31 | return container; 32 | 33 | }; 34 | -------------------------------------------------------------------------------- /WebContent/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Three.js Examples 4 | 5 | 6 |

Three.js Examples

7 |

maybe only works Chrome,I have no time to test

8 | Ammo Physics Basic Examples
9 | Three.js Skeleton Bone System Examples
10 | ManuelBastioniLAB 3D Examples
11 | IK Examples
12 | Misc Examples
13 | VRM Format Example
14 | 15 | -------------------------------------------------------------------------------- /WebContent/examples/libs/deprecated.txt: -------------------------------------------------------------------------------- 1 | my libs to move to /example/js/ 2 | still exist for old examples -------------------------------------------------------------------------------- /WebContent/examples/libs/draco/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/examples/libs/draco/draco_decoder.wasm -------------------------------------------------------------------------------- /WebContent/examples/libs/draco/gltf/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/examples/libs/draco/gltf/draco_decoder.wasm -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_attach/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | var Signal = signals.Signal; 13 | 14 | this.signals = { 15 | windowResize: new Signal(), 16 | rendered:new Signal(), 17 | renderStarted:new Signal(), 18 | skinnedMeshChanged:new Signal(), 19 | boneAnimationFinished:new Signal(), 20 | boneAnimationStarted:new Signal(), 21 | boneAnimationIndexChanged:new Signal(), 22 | } 23 | 24 | 25 | 26 | }; 27 | 28 | 29 | Application.prototype = { 30 | 31 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_attach/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 19 | container.add( new UI.Break() , new UI.Break() ); 20 | container.add(new UI.Text("Many source code come from"),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js","Three.js")); 21 | 22 | 23 | 24 | signals.rendered.add( update ); 25 | 26 | // 27 | var sharedVec=new THREE.Vector3(); 28 | 29 | function update() { 30 | 31 | 32 | } 33 | 34 | return container; 35 | 36 | }; 37 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_breast/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | this.damping=100; 13 | this.stiffness=1000; 14 | this.meshTransparent=0.5; 15 | this.bothBreast=false; 16 | moveSameDirection=true; 17 | this.visibleAmmo=true; 18 | this.bodyDamping=0.1; 19 | var Signal = signals.Signal; 20 | 21 | this.signals = { 22 | skinnedMeshTransformed: new Signal(), 23 | windowResize: new Signal(), 24 | rendered:new Signal(), 25 | skinnedMeshChanged:new Signal(), 26 | boneAnimationFinished:new Signal(), 27 | boneAnimationStarted:new Signal(), 28 | boneAnimationIndexChanged:new Signal(), 29 | visibleAmmoChanged:new Signal(), 30 | meshTransparentChanged:new Signal(), 31 | springChanged:new Signal(), 32 | 33 | } 34 | 35 | 36 | 37 | }; 38 | 39 | 40 | Application.prototype = { 41 | 42 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_breast2/js/Sidebar.ClipPlayer.js: -------------------------------------------------------------------------------- 1 | Sidebar.ClipPlayer=function(ap){ 2 | var titlePanel=new UI.TitlePanel("ClipPlayer"); 3 | ap.clip=null; 4 | 5 | ap.clipAutoStart=true; 6 | titlePanel.add(new Sidebar.ClipAutoStartRow(ap)); 7 | 8 | var loadClipRow=new LoadClipRow(function(clip){ 9 | ap.clip=clip; 10 | if(ap.clipAutoStart && clip!=null){ 11 | if(ap.signals.clipPlayerPlayed){ 12 | ap.signals.clipPlayerPlayed.dispatch(); 13 | } 14 | } 15 | }); 16 | 17 | titlePanel.add(loadClipRow); 18 | 19 | var clipPlayerRow=new ClipPlayerRow(ap); 20 | titlePanel.add(clipPlayerRow); 21 | 22 | return titlePanel; 23 | } 24 | 25 | Sidebar.ClipAutoStartRow=function(ap){ 26 | var autoStart=new UI.CheckboxRow("Auto Start",function(v){ 27 | ap.clipAutoStart=v; 28 | },ap.clipAutoStart); 29 | 30 | ap.signals.loadingModelFinished.add(function(){ 31 | if(ap.clipAutoStart && ap.clip!=null){ 32 | if(ap.signals.clipPlayerPlayed){ 33 | ap.signals.clipPlayerPlayed.dispatch(); 34 | } 35 | } 36 | },undefined,-100); 37 | return autoStart; 38 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_morph/js/Sidebar.Clip.js: -------------------------------------------------------------------------------- 1 | Sidebar.Clip=function(ap){ 2 | var container=new UI.Panel(); 3 | 4 | container.setId( 'clip' ); 5 | 6 | //container.add(titleDiv); 7 | 8 | var row1=new UI.Row(); 9 | container.add(row1); 10 | 11 | function play(){ 12 | 13 | } 14 | 15 | var fileInput=new UI.TextFile(".json"); 16 | row1.add(fileInput); 17 | 18 | fileInput.onChange(function(fileName,text){ 19 | ap.signals.morphAnimationFinished.dispatch(); 20 | 21 | var json = JSON.parse( text );//TODO catch 22 | 23 | console.log(json); 24 | 25 | var clip=THREE.AnimationClip.parse(json); 26 | console.log(clip); 27 | 28 | var mixer=ap.mixer; 29 | mixer.stopAllAction(); 30 | mixer.uncacheClip(clip.name); 31 | mixer.clipAction(clip).play(); 32 | }); 33 | 34 | return container; 35 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_morph/js/Sidebar.Model.js: -------------------------------------------------------------------------------- 1 | Sidebar.Model = function ( application ) { 2 | var container=new UI.Panel(); 3 | container.setId( 'model' ); 4 | 5 | var titleDiv=new UI.Div().setClass("title").add(new UI.Text("Model")); 6 | container.add(titleDiv); 7 | 8 | var row1=new UI.Row(); 9 | container.add(row1); 10 | 11 | var fileInput=new UI.BlobFile(".glb"); 12 | row1.add(fileInput); 13 | 14 | fileInput.onChange(function(fileName,blobUrl){ 15 | application.modelUrl=blobUrl; 16 | if(application.modelUrl==null){ 17 | application.modelUrl=application.defaultModelUrl; 18 | } 19 | 20 | application.signals.loadingModelStarted.dispatch(); 21 | }); 22 | 23 | 24 | return container; 25 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_morph/js/Sidebar.Texture.js: -------------------------------------------------------------------------------- 1 | Sidebar.Texture = function ( application ) { 2 | var container=new UI.Panel(); 3 | container.setId( 'texture' ); 4 | 5 | var titleDiv=new UI.Div().setClass("title").add(new UI.Text("Texture")); 6 | container.add(titleDiv); 7 | 8 | var row1=new UI.Row(); 9 | container.add(row1); 10 | 11 | var fileInput=new UI.BlobFile(".jpg,.png,.jpeg"); 12 | row1.add(fileInput); 13 | 14 | fileInput.onChange(function(fileName,blobUrl){ 15 | application.textureUrl=blobUrl; 16 | if(application.textureUrl==null){ 17 | application.textureUrl=application.defaultTextureUrl; 18 | } 19 | application.signals.loadingTextureStarted.dispatch(); 20 | application.signals.loadingTextureFinished.dispatch(); 21 | }); 22 | 23 | 24 | return container; 25 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_morph/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var container = new UI.Panel(); 3 | container.setId( 'sidebar' ); 4 | 5 | var div=new UI.Div(); 6 | div.setClass("appname"); 7 | container.add(div); 8 | var title=new UI.Span(); 9 | title.dom.textContent="Test Simple Morph Animation ver 0.1"; 10 | div.add(title); 11 | 12 | var animation=new Sidebar.Animation(application); 13 | container.add(animation); 14 | 15 | var camera=new Sidebar.Camera(application); 16 | container.add(camera); 17 | 18 | var texture=new Sidebar.Texture(application); 19 | container.add(texture); 20 | 21 | /* 22 | * TODO support glb 23 | */ 24 | //var model=new Sidebar.Model(application); 25 | //container.add(model); 26 | 27 | var hair=new Sidebar.Hair(application); 28 | container.add(hair); 29 | 30 | var material=new Sidebar.Material(application); 31 | container.add(material); 32 | 33 | var light=new Sidebar.BasicLightShadow(application); 34 | container.add(light); 35 | 36 | return container; 37 | } 38 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_turnarm/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Turn Arm(Deprecated)")); 6 | 7 | var exportPanel=new Sidebar.Export(ap); 8 | container.add(exportPanel); 9 | 10 | var ikPanel=new Sidebar.IkLBasic(application); 11 | container.add(ikPanel); 12 | ikPanel.add(new Sidebar.IkSolve(ap)); 13 | 14 | 15 | 16 | container.add(new Sidebar.IkReset(ap)); 17 | 18 | container.add(new Sidebar.IkBoneList(ap)); 19 | 20 | container.add(new Sidebar.TurnArm(ap)); 21 | 22 | return container; 23 | } 24 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.objects=[]; 3 | 4 | this.scene = new THREE.Scene(); 5 | this.scene.name = 'Scene'; 6 | this.scene.background = new THREE.Color( 0xaaaaaa ); 7 | 8 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 9 | this.camera.name = 'Camera'; 10 | this.camera.position.set( 0, 5, 10 ); 11 | this.camera.lookAt( new THREE.Vector3() ); 12 | 13 | this.visibleOriginBone=true; 14 | this.visibleBone=false; 15 | this.visibleSkeletonHelper=false; 16 | 17 | this.maxAngle=.1; 18 | this.iteration=25; 19 | 20 | 21 | this.twistAutoUpdate=true; 22 | 23 | var Signal = signals.Signal; 24 | 25 | this.signals = { 26 | boneSelectionChanged:new Signal(), 27 | boneRotationChanged:new Signal(), 28 | transformChanged:new Signal(), 29 | transformSelectionChanged:new Signal(), 30 | poseChanged:new Signal(), 31 | windowResize: new Signal(), 32 | rendered:new Signal(), 33 | objectRotated:new Signal(), 34 | boneAnimationStarted:new Signal(), 35 | boneAnimationFinished:new Signal(), 36 | skinnedMeshChanged:new Signal(), 37 | boxVisibleChanged:new Signal(), 38 | boneAnimationIndexChanged:new Signal(), 39 | 40 | } 41 | 42 | 43 | 44 | }; 45 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Sidebar.Export.js: -------------------------------------------------------------------------------- 1 | Sidebar.Export=function(ap){ 2 | function makeClip(){ 3 | 4 | var clip=AnimeUtils.makePoseClip(ap.skinnedMesh); 5 | return clip; 6 | } 7 | 8 | var exportPanel=new UI.TitlePanel("Export Pose"); 9 | 10 | var bt=new UI.Button("Make Download").onClick( function () { 11 | span.dom.innerHTML = '' 12 | var clip=makeClip(ap); 13 | var jsonText=AnimeUtils.clipToJsonText(clip); 14 | var link=AppUtils.generateTextDownloadLink(jsonText,"pose.json","pose.json",true); 15 | span.dom.appendChild(link); 16 | 17 | } ); 18 | exportPanel.add(bt); 19 | bt.setMarginRight("6px"); 20 | var span=new UI.Span(); 21 | exportPanel.add(span); 22 | return exportPanel; 23 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Sidebar.Ik.js: -------------------------------------------------------------------------------- 1 | Sidebar.Ik=function(ap){ 2 | var ikPanel=new UI.TitlePanel("Ik"); 3 | 4 | var maxAngle=new UI.NumberButtons("Max Angle",0.1,45,1,ap.maxAngle,function(v){ 5 | ap.maxAngle=v; 6 | },[0.1,1,5]); 7 | ikPanel.add(maxAngle); 8 | var iteration=new UI.IntegerButtons("Iteration",1,100,1,ap.iteration,function(v){ 9 | ap.iteration=v; 10 | },[5,10,50]); 11 | ikPanel.add(iteration); 12 | return ikPanel; 13 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Sidebar.Import.js: -------------------------------------------------------------------------------- 1 | Sidebar.Import=function(ap){ 2 | var container=new UI.TitlePanel("Import Pose"); 3 | 4 | var row1=new UI.Row(); 5 | container.add(row1); 6 | 7 | 8 | var fileInput=new UI.TextFile(".json"); 9 | row1.add(fileInput); 10 | 11 | fileInput.onChange(function(fileName,text){ 12 | var mixer=ap.mixer; 13 | mixer.stopAllAction(); 14 | AnimeUtils.resetPose(ap.skinnedMesh); 15 | 16 | if(text==null){//just Reset 17 | if(ap.signals.poseChanged){ 18 | ap.signals.poseChanged.dispatch(); 19 | } 20 | return; 21 | } 22 | 23 | var json = JSON.parse( text );//TODO catch 24 | 25 | 26 | 27 | 28 | var clip=THREE.AnimationClip.parse(json); 29 | if(json.boneNames!==undefined){ 30 | clip.boneNames=json.boneNames; 31 | } 32 | 33 | 34 | 35 | 36 | mixer.uncacheClip(clip.name); 37 | mixer.clipAction(clip).play(); 38 | mixer.update(); 39 | mixer.stopAllAction(); 40 | 41 | if(ap.signals.poseChanged){ 42 | ap.signals.poseChanged.dispatch(); 43 | } 44 | }); 45 | 46 | return container; 47 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Sidebar.TwistAutoupdate.js: -------------------------------------------------------------------------------- 1 | Sidebar.TwistAutoupdate=function(ap){ 2 | var scope=this; 3 | var container=new UI.TitlePanel("Twist Autoupdate"); 4 | var enabled=new UI.SwitchRow("Enabled","Disabled",ap.twistAutoUpdate,function(v){ 5 | ap.twistAutoUpdate=v; 6 | }); 7 | container.add(enabled); 8 | return container; 9 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Bone Rotation Control with Twist")); 6 | 7 | //TODO later 8 | var ik=new Sidebar.Ik(ap); 9 | //container.add(ik); 10 | 11 | var exportPanel=new Sidebar.Export(ap); 12 | container.add(exportPanel); 13 | 14 | var importPanel=new Sidebar.Import(ap); 15 | container.add(importPanel); 16 | 17 | var editPanel=new BoneEditPanel(ap); 18 | container.add(editPanel); 19 | 20 | 21 | var twistPanel=new Sidebar.TwistSwitch(ap); 22 | container.add(twistPanel); 23 | var twistEditor=new Sidebar.TwistEditor(ap); 24 | container.add(twistEditor); 25 | 26 | var twistAutoupdate=new Sidebar.TwistAutoupdate(ap); 27 | container.add(twistAutoupdate); 28 | 29 | return container; 30 | } 31 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/_twist/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('180px'); 17 | 18 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 19 | container.add( new UI.Break() , new UI.Break() ); 20 | container.add(new UI.Text("Many source code based on "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js/tree/dev/editor","Three.js Editor")); 21 | container.add( new UI.Break() , new UI.Break() ); 22 | 23 | 24 | signals.rendered.add( update ); 25 | 26 | var translate=new THREE.Vector3(); 27 | var rotation=new THREE.Quaternion(); 28 | var euler=new THREE.Euler(); 29 | 30 | function update() { 31 | 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/attach/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/attach/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breast/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breast2/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breast2/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breast2/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Physics Breast Bone Animation2")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | 11 | main.add(new Sidebar.BoneRotateAnimationPanel(ap)); 12 | 13 | ap.ammoVisible=false; 14 | var panel=new UI.Panel(); 15 | main.add(panel); 16 | panel.add(new UI.CheckboxRow("Ammo Visible",false,function(v){ 17 | ap.ammoVisible=v; 18 | ap.ammoControler.setVisibleAll(ap.ammoVisible); 19 | })); 20 | main.add(new Sidebar.Breast(ap)); 21 | 22 | var sub=tab.addItem("Sub"); 23 | sub.add(new Sidebar.Model(ap)); 24 | Logics.loadingModelFinishedForBoneAttachControler(ap); 25 | Logics.initializeAmmo(ap); 26 | Logics.loadingModelFinishedForBreastControler(ap); 27 | 28 | 29 | sub.add(new Sidebar.Texture(ap)); 30 | Logics.materialChangedForSimple(ap); 31 | 32 | sub.add(new Sidebar.Hair(ap)); 33 | Logics.loadingHairFinished(ap); 34 | 35 | sub.add(new Sidebar.ClipPlayer(ap)); 36 | sub.add(new Sidebar.SimpleLight(ap)); 37 | 38 | return container; 39 | } 40 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breathing/js/Sidebar.Morph.Editor.js: -------------------------------------------------------------------------------- 1 | Sidebar.Morph.Editor=function(ap,key){ 2 | this.key=key; 3 | var container=new UI.Div(); 4 | //container.add(new UI.SubtitleRow(key)); 5 | 6 | var expansionEnabled=new UI.CheckboxRow("Enable "+key,ap[key+'ExpansionEnabled'],function(v){ 7 | ap[key+'ExpansionEnabled']=v; 8 | }); 9 | container.add(expansionEnabled); 10 | 11 | var expansionMin=new UI.NumberButtons("Min Value",0,1,1,ap[key+'ExpansionMin'],function(v){ 12 | ap[key+'ExpansionMin']=v; 13 | },[0,0.1,0.5,1]); 14 | container.add(expansionMin); 15 | 16 | var expansionMax=new UI.NumberButtons("Max Value",0,1,1,ap[key+'ExpansionMax'],function(v){ 17 | ap[key+'ExpansionMax']=v; 18 | },[0,0.1,0.5,1]); 19 | container.add(expansionMax); 20 | 21 | var expansionInTime=new UI.NumberButtons("InTime",0.01,10,1,ap[key+'ExpansionInTime'],function(v){ 22 | ap[key+'ExpansionInTime']=v; 23 | },[0.1,0.5,1]); 24 | container.add(expansionInTime); 25 | 26 | var expansionOutTime=new UI.NumberButtons("OutTime",0.01,10,1,ap[key+'ExpansionOutTime'],function(v){ 27 | ap[key+'ExpansionOutTime']=v; 28 | },[0.1,0.5,1]); 29 | container.add(expansionOutTime); 30 | return container; 31 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breathing/js/Sidebar.RandomScale.js: -------------------------------------------------------------------------------- 1 | Sidebar.RandomScale=function(ap){ 2 | var container = new UI.Panel(); 3 | 4 | 5 | 6 | var minScale=new UI.NumberButtons("Min Scale",0.1,2,1,ap.minScale,function(v){ 7 | ap.minScale=v; 8 | },[1,1.01,1.1]); 9 | container.add(minScale); 10 | 11 | var maxScale=new UI.NumberButtons("Max Scale",0.1,2,1,ap.maxScale,function(v){ 12 | ap.maxScale=v; 13 | },[1,1.01,1.1]); 14 | container.add(maxScale); 15 | 16 | var randomScaleCount=new UI.IntegerButtons("Random Count",2,100,10,ap.randomScaleCount,function(v){ 17 | ap.randomScaleCount=v; 18 | },[1,10,50]); 19 | container.add(randomScaleCount); 20 | var randomScaleContinue=new UI.IntegerButtons("Random Continue",2,100,10,ap.randomScaleContinue,function(v){ 21 | ap.randomScaleContinue=v; 22 | },[1,4,8]); 23 | container.add(randomScaleContinue); 24 | 25 | var randomScaleDuration=new UI.NumberButtons("Duration",0.01,100,1,ap.randomScaleDuration,function(v){ 26 | ap.randomScaleDuration=v; 27 | },[0.1,0.5,1]); 28 | container.add(randomScaleDuration); 29 | 30 | var useScaleRandomSameValue=new UI.CheckboxRow("Use Same Value",ap.useScaleRandomSameValue,function(v){ 31 | ap.useScaleRandomSameValue=v; 32 | }); 33 | container.add(useScaleRandomSameValue); 34 | 35 | return container; 36 | } 37 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breathing/js/Sidebar.SimpleScale.js: -------------------------------------------------------------------------------- 1 | Sidebar.SimpleScale=function(ap){ 2 | var container = new UI.Panel(); 3 | container.add(new UI.SubtitleRow("SCALE")); 4 | 5 | var scaleButtons=new UI.NumberButtons("Scale",0.1,5,1,ap.scale,function(v){ 6 | ap.scale=v; 7 | },[1,1.01,1.1]); 8 | container.add(scaleButtons); 9 | 10 | var scaleDuration=new UI.NumberButtons("Duration",0.01,100,1,ap.scaleDuration,function(v){ 11 | ap.scaleDuration=v; 12 | },[0.1,0.5,1]); 13 | container.add(scaleDuration); 14 | 15 | return container; 16 | } 17 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/breathing/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Breathing Animation")); 6 | 7 | var scalePanel=new UI.TitlePanel("Animation Control"); 8 | container.add(scalePanel); 9 | var row=new UI.Row(); 10 | scalePanel.add(row); 11 | var bt=new UI.Button("Start All").onClick( function () { 12 | 13 | ap.signals.animationStarted.dispatch(); 14 | 15 | } ); 16 | row.add(bt); 17 | var bt=new UI.Button("Stop All").onClick( function () { 18 | 19 | ap.signals.animationStopped.dispatch(); 20 | 21 | } ); 22 | row.add(bt); 23 | 24 | 25 | 26 | var morph=new Sidebar.Morph(ap); 27 | container.add(morph); 28 | 29 | //for emulate softbody 30 | var scale=new Sidebar.Scale(ap); 31 | container.add(scale); 32 | //for emulate softbody too 33 | var translate=new Sidebar.Translate(ap); 34 | container.add(translate); 35 | var rotate=new Sidebar.Rotate(ap); 36 | container.add(rotate); 37 | 38 | var exportPanel=new Sidebar.Export(ap); 39 | container.add(exportPanel); 40 | 41 | 42 | return container; 43 | } 44 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/controlers/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/controlers/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/controlers/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Controlers")); 6 | 7 | container.add(new Sidebar.ControlerCheck(ap)); 8 | 9 | container.add(new Sidebar.Model(ap)); 10 | Logics.loadingModelFinishedForBoneAttachControler(ap); 11 | Logics.loadingModelFinishedForTranslateControler(ap); 12 | Logics.loadingModelFinishedForRotationControler(ap); 13 | Logics.loadingModelFinishedForIkControler(ap); 14 | Logics.initializeAmmo(ap); 15 | Logics.loadingModelFinishedForBreastControler(ap); 16 | 17 | 18 | container.add(new Sidebar.Texture(ap)); 19 | Logics.materialChangedForSimple(ap); 20 | 21 | container.add(new Sidebar.Hair(ap)); 22 | Logics.loadingHairFinished(ap); 23 | 24 | container.add(new Sidebar.MeshTransform(ap)); 25 | Logics.loadingModelFinishedForMeshTransform(ap); 26 | 27 | container.add(new Sidebar.ClipPlayer(ap)); 28 | container.add(new Sidebar.SimpleLight(ap)); 29 | 30 | 31 | return container; 32 | } 33 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/finger/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | 5 | 6 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 7 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 8 | 9 | 10 | //TODO move logic 11 | ap.fingerPresetsControler=new FingerPresetsControler(ap,new FingerPresets()); 12 | 13 | 14 | 15 | 16 | Logics.loadTextureAtOnce(ap,"../../../dataset/mbl3d/texture/ao.jpg","aoMap"); 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/finger/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/finger/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Finger Control")); 6 | 7 | container.add(new Sidebar.TimelinerVisibleRow(ap)); 8 | 9 | ap.materialType='MeshPhongMaterial'; 10 | 11 | var tab=new UI.Tab(); 12 | container.add(tab); 13 | 14 | tab.addItem("Main").add( 15 | new Sidebar.RotateFingers(ap) 16 | ); 17 | tab.addItem("Sub1").add( 18 | new Sidebar.Model(ap), 19 | new Sidebar.TextureMaps(ap), 20 | new Sidebar.DoubleClipPlayer(ap) 21 | ); 22 | Logics.loadingModelFinishedForBoneAttachControler(ap); 23 | Logics.materialChangedForTextureMaps(ap); 24 | 25 | tab.addItem("Sub2").add( 26 | new Sidebar.CameraControler(ap), 27 | new Sidebar.Hair(ap), 28 | new Sidebar.ShadowLight(ap), 29 | new Sidebar.MaterialType(ap), 30 | new Sidebar.OutlineEffect(ap) 31 | ); 32 | 33 | Logics.loadingHairFinished(ap); 34 | 35 | tab.addItem("Timeliner").add( 36 | new Sidebar.TimelinerFingerPresets(ap), 37 | new Sidebar.TimelinerBackgroundClip(ap) 38 | ); 39 | 40 | tab.select("Timeliner"); 41 | 42 | return container; 43 | } 44 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/index.html: -------------------------------------------------------------------------------- 1 |

Mbl3d Examples

2 | Breathing Animation
3 | Physics Breast Bone Animation
4 | Character morph animation test
5 | Make Morph Animation from 2 geometry(not Complete,TODO fix vertex order)
6 | Attach Item(Not Completed)
7 | Bone Rotation Controle with Twist
8 | Control arm X rotation.Deprecated,euler order can do same thing
9 |
10 |

New Style Example

11 | Minimu example
12 | Load Model example
13 | Texture Maps example
14 | Recycling controls example
15 | 16 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/loadmodel/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/loadmodel/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/loadmodel/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Load Model")); 6 | 7 | container.add(new Sidebar.Model(ap)); 8 | Logics.loadingModelFinishedForBoneAttachControler(ap); 9 | 10 | container.add(new Sidebar.Texture(ap)); 11 | Logics.materialChangedForSimple(ap); 12 | 13 | container.add(new Sidebar.Hair(ap)); 14 | Logics.loadingHairFinished(ap); 15 | 16 | container.add(new Sidebar.ClipPlayer(ap)); 17 | container.add(new Sidebar.SimpleLight(ap)); 18 | return container; 19 | } 20 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/makemorph/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | 12 | var Signal = signals.Signal; 13 | 14 | this.signals = { 15 | windowResize: new Signal(), 16 | rendered:new Signal(), 17 | 18 | } 19 | 20 | 21 | 22 | }; 23 | 24 | 25 | Application.prototype = { 26 | 27 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/makemorph/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | 19 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 20 | container.add( new UI.Break() , new UI.Break() ); 21 | container.add(new UI.Text("Many source code based on "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js/tree/dev/editor","Three.js Editor")); 22 | 23 | 24 | 25 | signals.rendered.add( update ); 26 | 27 | // 28 | var sharedVec=new THREE.Vector3(); 29 | 30 | function update() { 31 | 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/minexample/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | 15 | //light 16 | ap.scene.add(new THREE.AmbientLight(0x888888)); 17 | 18 | ap.signals.loadingModelFinished.add(function(mesh){ 19 | console.log(mesh); 20 | mesh.material=new THREE.MeshBasicMaterial({color:0x888888}); 21 | }) 22 | 23 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/minexample/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/minexample/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Min Example")); 6 | 7 | return container; 8 | } 9 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/morph/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | 5 | 6 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 7 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 8 | 9 | 10 | Logics.loadTextureAtOnce(ap,"../../../dataset/mbl3d/texture/aomix.jpg","aoMap"); 11 | 12 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 13 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/morph/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/morph/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Morph Test")); 6 | 7 | var tab=new UI.Tab(); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | main.add(new Sidebar.FaceCamera(ap)); 11 | main.add(new Sidebar.MorphTest(ap)); 12 | 13 | 14 | var sub1=tab.addItem("Sub1"); 15 | sub1.add(new Sidebar.Model(ap)); 16 | sub1.add(new Sidebar.TextureMaps(ap)); 17 | sub1.add(new Sidebar.DoubleClipPlayer(ap)); 18 | Logics.loadingModelFinishedForBoneAttachControler(ap); 19 | Logics.materialChangedForTextureMaps(ap); 20 | 21 | var sub2=tab.addItem("Sub2"); 22 | sub2.add(new Sidebar.Hair(ap)); 23 | sub2.add(new Sidebar.ShadowLight(ap)); 24 | sub2.add(new Sidebar.MaterialType(ap)); 25 | sub2.add(new Sidebar.OutlineEffect(ap)); 26 | Logics.loadingHairFinished(ap); 27 | 28 | //tab.select("Sub"); 29 | 30 | return container; 31 | } 32 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/rotatearmx/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/rotatearmx/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/rotatearmx/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Rotate Arm X")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("main"); 10 | main.add(new Sidebar.RotateArmX(ap)); 11 | main.add(new Sidebar.RotateArmXTwist(ap)); 12 | 13 | main.add(new Sidebar.MeshRotate(ap)); 14 | main.add(new Sidebar.IkControl(ap)); 15 | main.add(new Sidebar.IkBasic(ap)); 16 | main.add(new IkSolveRow(ap)); 17 | main.add(new Sidebar.IkReset(ap)); 18 | 19 | 20 | var sub=tab.addItem("Sub"); 21 | sub.add(new Sidebar.Model(ap)); 22 | Logics.loadingModelFinishedForBoneAttachControler(ap); 23 | Logics.loadingModelFinishedForIkControler(ap); 24 | 25 | 26 | sub.add(new Sidebar.Texture(ap)); 27 | Logics.materialChangedForSimple(ap); 28 | 29 | sub.add(new Sidebar.Hair(ap)); 30 | Logics.loadingHairFinished(ap); 31 | 32 | sub.add(new Sidebar.SimpleLight(ap)); 33 | return container; 34 | } 35 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/texturemaps/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | 5 | 6 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 7 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 8 | 9 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 10 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/texturemaps/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/texturemaps/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Texture Map")); 6 | 7 | var tab=new UI.Tab(); 8 | container.add(tab); 9 | 10 | var main=tab.addItem("Main"); 11 | main.add(new Sidebar.Model(ap)); 12 | main.add(new Sidebar.TextureMaps(ap)); 13 | main.add(new Sidebar.DoubleClipPlayer(ap)); 14 | Logics.loadingModelFinishedForBoneAttachControler(ap); 15 | Logics.materialChangedForTextureMaps(ap); 16 | 17 | var sub2=tab.addItem("Sub2"); 18 | sub2.add(new Sidebar.CameraControler(ap)); 19 | sub2.add(new Sidebar.Hair(ap)); 20 | sub2.add(new Sidebar.ShadowLight(ap)); 21 | sub2.add(new Sidebar.MaterialType(ap)); 22 | sub2.add(new Sidebar.OutlineEffect(ap)); 23 | Logics.loadingHairFinished(ap); 24 | 25 | //tab.select("Sub"); 26 | 27 | return container; 28 | } 29 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/twist/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/twist/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/mbl3d/twist/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Twist")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | main.add(new Sidebar.BoneRotate(ap)); 11 | main.add(new Sidebar.TwistRatio(ap)); 12 | 13 | var sub=tab.addItem("Sub"); 14 | sub.add(new Sidebar.ControlerCheck(ap)); 15 | 16 | sub.add(new Sidebar.Model(ap)); 17 | Logics.loadingModelFinishedForBoneAttachControler(ap); 18 | Logics.loadingModelFinishedForTranslateControler(ap); 19 | Logics.loadingModelFinishedForRotationControler(ap); 20 | Logics.loadingModelFinishedForIkControler(ap); 21 | Logics.initializeAmmo(ap); 22 | Logics.loadingModelFinishedForBreastControler(ap); 23 | 24 | 25 | sub.add(new Sidebar.Texture(ap)); 26 | Logics.materialChangedForSimple(ap); 27 | 28 | sub.add(new Sidebar.Hair(ap)); 29 | Logics.loadingHairFinished(ap); 30 | 31 | sub.add(new Sidebar.MeshTransform(ap)); 32 | Logics.loadingModelFinishedForMeshTransform(ap); 33 | 34 | sub.add(new Sidebar.ClipPlayer(ap)); 35 | sub.add(new Sidebar.SimpleLight(ap)); 36 | 37 | 38 | return container; 39 | } 40 | -------------------------------------------------------------------------------- /WebContent/examples/misc/_animation2image/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.objects=[]; 3 | 4 | this.scene = new THREE.Scene(); 5 | this.scene.name = 'Scene'; 6 | this.scene.background = new THREE.Color( 0xaaaaaa ); 7 | 8 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 9 | this.camera.name = 'Camera'; 10 | this.camera.position.set( 0, 5, 10 ); 11 | this.camera.lookAt( new THREE.Vector3() ); 12 | 13 | this.visibleOriginBone=true; 14 | this.visibleBone=false; 15 | this.visibleSkeletonHelper=false; 16 | 17 | this.maxAngle=.1; 18 | this.iteration=25; 19 | 20 | var Signal = signals.Signal; 21 | 22 | this.signals = { 23 | transformChanged:new Signal(), 24 | transformSelectionChanged:new Signal(), 25 | poseChanged:new Signal(), 26 | windowResize: new Signal(), 27 | rendered:new Signal(), 28 | objectRotated:new Signal(), 29 | boneAnimationStarted:new Signal(), 30 | boneAnimationFinished:new Signal(), 31 | skinnedMeshChanged:new Signal(), 32 | boxVisibleChanged:new Signal(), 33 | boneAnimationIndexChanged:new Signal(), 34 | 35 | } 36 | 37 | 38 | 39 | }; 40 | 41 | 42 | Application.prototype = { 43 | 44 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/_animation2image/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('180px'); 17 | 18 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 19 | container.add( new UI.Break() , new UI.Break() ); 20 | container.add(new UI.Text("Many source code based on "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js/tree/dev/editor","Three.js Editor")); 21 | container.add( new UI.Break() , new UI.Break() ); 22 | 23 | 24 | signals.rendered.add( update ); 25 | 26 | var translate=new THREE.Vector3(); 27 | var rotation=new THREE.Quaternion(); 28 | var euler=new THREE.Euler(); 29 | 30 | function update() { 31 | 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/misc/animation2image/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | 5 | 6 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 7 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 8 | 9 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 10 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/animation2image/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/animation2image/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Texture Map")); 6 | 7 | var tab=new UI.Tab(); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | main.add(new Sidebar.ClipPlayer(ap)); 11 | main.add(new Sidebar.AnimationToImagePanel(ap)); 12 | 13 | 14 | var sub=tab.addItem("Sub1"); 15 | sub.add(new Sidebar.Model(ap)); 16 | sub.add(new Sidebar.TextureMaps(ap)); 17 | 18 | Logics.loadingModelFinishedForBoneAttachControler(ap); 19 | Logics.materialChangedForTextureMaps(ap); 20 | 21 | var sub2=tab.addItem("Sub2"); 22 | sub2.add(new Sidebar.CameraControler(ap)); 23 | sub2.add(new Sidebar.Hair(ap)); 24 | sub2.add(new Sidebar.ShadowLight(ap)); 25 | sub2.add(new Sidebar.MaterialType(ap)); 26 | sub2.add(new Sidebar.OutlineEffect(ap)); 27 | Logics.loadingHairFinished(ap); 28 | 29 | //tab.select("Sub"); 30 | 31 | return container; 32 | } 33 | -------------------------------------------------------------------------------- /WebContent/examples/misc/clipplay/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/clipplay/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/clipplay/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Cli Play")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | 11 | main.add(new Sidebar.Skybox(ap)); 12 | 13 | var sub=tab.addItem("Sub"); 14 | sub.add(new Sidebar.Model(ap)); 15 | Logics.loadingModelFinishedForBoneAttachControler(ap); 16 | 17 | sub.add(new Sidebar.Texture(ap)); 18 | Logics.materialChangedForSimple(ap); 19 | 20 | sub.add(new Sidebar.Hair(ap)); 21 | Logics.loadingHairFinished(ap); 22 | 23 | sub.add(new Sidebar.ClipPlayer(ap)); 24 | sub.add(new Sidebar.SimpleLight(ap)); 25 | return container; 26 | } 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/guide/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/guide/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/guide/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Guide")); 6 | 7 | var tab=new UI.Tab(ap); 8 | container.add(tab); 9 | var main=tab.addItem("Main"); 10 | main.add(new Sidebar.Guide(ap)); 11 | main.add(new Sidebar.Ground(ap)); 12 | main.add(new Sidebar.Grid(ap)); 13 | 14 | var sub=tab.addItem("Sub"); 15 | sub.add(new Sidebar.ControlerCheck(ap)); 16 | 17 | sub.add(new Sidebar.Model(ap)); 18 | Logics.loadingModelFinishedForBoneAttachControler(ap); 19 | Logics.loadingModelFinishedForTranslateControler(ap); 20 | Logics.loadingModelFinishedForRotationControler(ap); 21 | Logics.loadingModelFinishedForIkControler(ap); 22 | Logics.initializeAmmo(ap); 23 | Logics.loadingModelFinishedForBreastControler(ap); 24 | 25 | 26 | sub.add(new Sidebar.Texture(ap)); 27 | Logics.materialChangedForSimple(ap); 28 | 29 | sub.add(new Sidebar.Hair(ap)); 30 | Logics.loadingHairFinished(ap); 31 | 32 | sub.add(new Sidebar.MeshTransform(ap)); 33 | Logics.loadingModelFinishedForMeshTransform(ap); 34 | 35 | sub.add(new Sidebar.ClipPlayer(ap)); 36 | sub.add(new Sidebar.SimpleLight(ap)); 37 | 38 | 39 | return container; 40 | } 41 | -------------------------------------------------------------------------------- /WebContent/examples/misc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Three.js Misc Examples 4 | 5 | 6 |

Three.js Misc Examples

7 | Animation to image sequence with download
8 | Animation to image sequence save via Java Servlet
9 |
10 | Use Timelinear mesh pos and rot
11 | Use Timelinear bone rotation
12 | Use Timelinear Morph Animation
13 | 14 |

License

15 | 3D Character is created by Manuel Bastioni, CCBY4 Licensed 16 | 17 | -------------------------------------------------------------------------------- /WebContent/examples/misc/jszip/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //default camera 7 | ap.camera.position.set( 0, 100, 250 ); 8 | ap.controls.target.set(0,100,0); 9 | ap.controls.update(); 10 | 11 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 12 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 13 | 14 | 15 | 16 | 17 | 18 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 19 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/jszip/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/servletsave/js/Application.js: -------------------------------------------------------------------------------- 1 | var Application = function () { 2 | this.objects=[]; 3 | 4 | this.scene = new THREE.Scene(); 5 | this.scene.name = 'Scene'; 6 | this.scene.background = new THREE.Color( 0xaaaaaa ); 7 | 8 | this.camera = new THREE.PerspectiveCamera( 50, 1, 0.01, 1000 ); 9 | this.camera.name = 'Camera'; 10 | this.camera.position.set( 0, 5, 10 ); 11 | this.camera.lookAt( new THREE.Vector3() ); 12 | 13 | this.visibleOriginBone=true; 14 | this.visibleBone=false; 15 | this.visibleSkeletonHelper=false; 16 | 17 | this.maxAngle=.1; 18 | this.iteration=25; 19 | 20 | var Signal = signals.Signal; 21 | 22 | this.signals = { 23 | transformChanged:new Signal(), 24 | transformSelectionChanged:new Signal(), 25 | poseChanged:new Signal(), 26 | windowResize: new Signal(), 27 | rendered:new Signal(), 28 | objectRotated:new Signal(), 29 | boneAnimationStarted:new Signal(), 30 | boneAnimationFinished:new Signal(), 31 | skinnedMeshChanged:new Signal(), 32 | boxVisibleChanged:new Signal(), 33 | boneAnimationIndexChanged:new Signal(), 34 | 35 | } 36 | 37 | 38 | 39 | }; 40 | 41 | 42 | Application.prototype = { 43 | 44 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/servletsave/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('180px'); 17 | 18 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 19 | container.add( new UI.Break() , new UI.Break() ); 20 | container.add(new UI.Text("Many source code based on "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js/tree/dev/editor","Three.js Editor")); 21 | container.add( new UI.Break() , new UI.Break() ); 22 | 23 | 24 | signals.rendered.add( update ); 25 | 26 | var translate=new THREE.Vector3(); 27 | var rotation=new THREE.Quaternion(); 28 | var euler=new THREE.Euler(); 29 | 30 | function update() { 31 | 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/misc/servletsave/server/java/jetty-web.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 6000000 7 | -------------------------------------------------------------------------------- /WebContent/examples/misc/servletsave/server/java/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | FileSaveServlet 11 | com.akjava.mbl3d.expression.server.FileSaveServlet 12 | 13 | 14 | OutputDir 15 | e:\images\ 16 | 17 | 18 | 19 | 20 | FileSaveServlet 21 | /write 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_bones/js/Sidebar.CameraControler.js: -------------------------------------------------------------------------------- 1 | Sidebar.CameraControler=function(ap){ 2 | var titlePanel=new UI.TitlePanel("Camera Controler"); 3 | 4 | function update(){ 5 | var y1=cameraY.getValue(); 6 | var y2=targetY.getValue(); 7 | ap.camera.position.set( 0, y1, cameraZ.getValue() ); 8 | ap.controls.target.set(0,y2,0); 9 | ap.controls.update(); 10 | } 11 | 12 | 13 | var cameraY=new UI.NumberButtons("Camera Y",-500,500,100,ap.cameraY,function(){ 14 | update(); 15 | },[100,125,150]); 16 | 17 | titlePanel.add(cameraY); 18 | 19 | var cameraZ=new UI.NumberButtons("Camera Z",0,500,100,ap.cameraZ,function(){ 20 | update(); 21 | },[225,250,280]); 22 | titlePanel.add(cameraZ); 23 | 24 | 25 | var targetY=new UI.NumberButtons("Target Y",-500,500,100,ap.targetY,function(){ 26 | update(); 27 | },[60,90,100]); 28 | titlePanel.add(targetY); 29 | 30 | update(); 31 | 32 | return titlePanel; 33 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_bones/js/Sidebar.TimelinerClipExport.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerClipExport=function(ap){ 2 | var scope=this; 3 | function makeClip(ap){ 4 | return ap.timeliner.context.controller._clip; 5 | } 6 | this.fileName=""; 7 | var exportPanel=new UI.TitlePanel("Export Timeliner As Clip"); 8 | var nameRow=new UI.InputRow("Name","",function(v){scope.fileName=v}); 9 | nameRow.text.setWidth("110px"); 10 | nameRow.text.setMarginRight("6px"); 11 | 12 | nameRow.input.setWidth("140px"); 13 | exportPanel.add(nameRow); 14 | 15 | 16 | 17 | var bt=new UI.Button("Download").onClick( function () { 18 | span.dom.innerHTML = '' 19 | var clip=makeClip(ap); 20 | var defaultName=ap.timelinerClipExportName==undefined?"timeliner_clip":ap.timelinerClipExportName; 21 | var fileName=scope.fileName == ""?defaultName:scope.fileName; 22 | 23 | fileName=fileName+".json"; 24 | var jsonText=AnimeUtils.clipToJsonText(clip); 25 | var link=AppUtils.generateTextDownloadLink(jsonText,fileName,fileName,true); 26 | span.dom.appendChild(link); 27 | link.click(); 28 | 29 | } ); 30 | exportPanel.add(bt); 31 | bt.setMarginRight("6px"); 32 | var span=new UI.Span(); 33 | exportPanel.add(span); 34 | return exportPanel; 35 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_bones/js/Sidebar.TimelinerVisibleRow.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerVisibleRow=function(ap){ 2 | var visible=true; 3 | var bt=new UI.ButtonRow("TimeLiner Switch Show/Hide",function(){ 4 | visible=!visible; 5 | ap.timeliner.setVisible(visible); 6 | }); 7 | return bt; 8 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_bones/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("TimeLiner Bones")); 6 | 7 | 8 | ap.ikControler.maxAngle=5;//change because of ikratio 9 | 10 | 11 | 12 | container.add(new Sidebar.TimelinerVisibleRow(ap)); 13 | container.add(new Sidebar.CameraControler(ap)); 14 | 15 | 16 | 17 | var meshTransform=new Sidebar.MeshTransform(ap); 18 | container.add(meshTransform); 19 | 20 | var exportPanel=new Sidebar.Export(ap); 21 | var importPanel=new Sidebar.Import(ap); 22 | 23 | container.add(exportPanel); 24 | container.add(importPanel); 25 | 26 | var texture=new Sidebar.Texture(application); 27 | container.add(texture); 28 | 29 | var timeliner=new Sidebar.TimelinerBones(application); 30 | container.add(timeliner); 31 | 32 | var timelinerClipExport=new Sidebar.TimelinerClipExport(application); 33 | container.add(timelinerClipExport); 34 | 35 | return container; 36 | } 37 | -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_bones/js/Viewport.Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | Viewport.Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('180px'); 17 | 18 | container.add(new UI.Text("3D Character is created by "),new UI.Break(),new UI.Anchor("http://www.manuelbastioni.com/","Manuel Bastioni")); 19 | container.add( new UI.Break() , new UI.Break() ); 20 | container.add(new UI.Text("Many source code based on "),new UI.Break(),new UI.Anchor("https://github.com/mrdoob/three.js/tree/dev/editor","Three.js Editor")); 21 | container.add( new UI.Break() , new UI.Break() ); 22 | 23 | 24 | signals.rendered.add( update ); 25 | 26 | var translate=new THREE.Vector3(); 27 | var rotation=new THREE.Quaternion(); 28 | var euler=new THREE.Euler(); 29 | 30 | function update() { 31 | 32 | 33 | } 34 | 35 | return container; 36 | 37 | }; 38 | -------------------------------------------------------------------------------- /WebContent/examples/misc/timelinear_morphs/js/Sidebar.ExportMorphFrameClip.js: -------------------------------------------------------------------------------- 1 | Sidebar.ExportMorphFrameClip=function(ap){ 2 | var scope=this; 3 | function makeClip(){ 4 | var morphClip=AnimeUtils.makeMorphFrameClip(ap.skinnedMesh); 5 | //TODO support morph dictionary 6 | return morphClip; 7 | } 8 | this.fileName=""; 9 | var exportPanel=new UI.TitlePanel("Export Single Morph Frame Clip"); 10 | var nameRow=new UI.InputRow("Name","",function(v){scope.fileName=v}); 11 | nameRow.text.setWidth("110px"); 12 | nameRow.text.setMarginRight("6px"); 13 | 14 | nameRow.input.setWidth("140px"); 15 | exportPanel.add(nameRow); 16 | 17 | var bt=new UI.Button("Download").onClick( function () { 18 | span.dom.innerHTML = '' 19 | var clip=makeClip(ap); 20 | var fileName=scope.fileName == ""?"morph_frame":scope.fileName; 21 | fileName=fileName+".json"; 22 | var jsonText=AnimeUtils.clipToJsonText(clip); 23 | var link=AppUtils.generateTextDownloadLink(jsonText,fileName,fileName,true); 24 | span.dom.appendChild(link); 25 | link.click(); 26 | 27 | } ); 28 | exportPanel.add(bt); 29 | bt.setMarginRight("6px"); 30 | var span=new UI.Span(); 31 | exportPanel.add(span); 32 | return exportPanel; 33 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timeliner_bones/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | ap.objects=[];//TODO 5 | 6 | //timeliner camera 7 | ap.camera.position.set( 0, 125, 280 ); 8 | ap.controls.target.set(0,60,0); 9 | ap.controls.update(); 10 | 11 | var c=ap.camera.position; 12 | var t=ap.controls.target; 13 | ap.getSignal("cameraControlerChanged").dispatch(c,t); 14 | 15 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 16 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 17 | 18 | 19 | 20 | 21 | 22 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 23 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timeliner_bones/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/timeliner_mesh/js/Example.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * see 4 | * Sidebar.TimelinerMesh 5 | * 6 | */ 7 | Example=function(application){ 8 | var ap=application; 9 | 10 | //camera for timeliner 11 | ap.camera.position.set( 0, 125, 280 ); 12 | ap.controls.target.set(0,60,0); 13 | ap.controls.update(); 14 | 15 | var c=ap.camera.position; 16 | var t=ap.controls.target; 17 | ap.getSignal("cameraControlerChanged").dispatch(c,t); 18 | 19 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 20 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 21 | 22 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 23 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/timeliner_mesh/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/timeliner_mesh/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Timeliner Mesh")); 6 | container.add(new Sidebar.TimelinerVisibleRow(ap)); 7 | container.add(new Sidebar.TimelinerMesh(ap)); 8 | 9 | container.add(new Sidebar.CameraControler(ap)); 10 | 11 | container.add(new Sidebar.MeshTransform(ap)); 12 | Logics.loadingModelFinishedForMeshTransform(ap); 13 | 14 | container.add(new Sidebar.ImportPose(ap)); 15 | container.add(new Sidebar.ExportPose(ap)); 16 | 17 | 18 | container.add(new Sidebar.Model(ap)); 19 | Logics.loadingModelFinishedForBoneAttachControler(ap); 20 | 21 | container.add(new Sidebar.Texture(ap)); 22 | Logics.materialChangedForSimple(ap); 23 | 24 | container.add(new Sidebar.Hair(ap)); 25 | Logics.loadingHairFinished(ap); 26 | 27 | 28 | 29 | 30 | 31 | container.add(new Sidebar.SimpleLight(ap)); 32 | 33 | return container; 34 | } 35 | -------------------------------------------------------------------------------- /WebContent/examples/misc/videotexture/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | 4 | //default camera 5 | ap.camera.position.set( 0, 100, 300 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url="../../../dataset/mbl3d/models/anime2_female.fbx"; 10 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 11 | 12 | 13 | //ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 14 | 15 | var box=new THREE.Mesh(new THREE.BoxGeometry(100,100,100)); 16 | //ap.scene.add(box); 17 | 18 | 19 | 20 | //light 21 | ap.scene.add(new THREE.AmbientLight(0xffffff)); 22 | 23 | 24 | 25 | } -------------------------------------------------------------------------------- /WebContent/examples/misc/videotexture/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/misc/videotexture/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Video Texture")); 6 | 7 | var bg=new Sidebar.BackgroundVideo(ap); 8 | container.add(bg) 9 | bg.loadVideo("","../../../dataset/texture/video.webm"); 10 | 11 | return container; 12 | } 13 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/fingers/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/ikcontrol/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | ap.renderer.gammaOutput=true; 4 | 5 | //default camera 6 | ap.camera.position.set( 0, 100, -250 );//z is opposite 7 | ap.controls.target.set(0,100,0); 8 | ap.controls.update(); 9 | 10 | var url='../../../dataset/vrm/Alicia/AliciaSolid.vrm'; 11 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 12 | 13 | //light 14 | ap.scene.add(new THREE.AmbientLight(0xaaaaaa));//use basic material 15 | 16 | IkControler.logging=true; 17 | ap.ikControler=new IkControler(undefined,ap); 18 | 19 | 20 | Logics.loadingModelFinishedForBoneAttachControler(ap); 21 | Logics.loadingModelFinishedForIkControler(ap,"HumanoidIk"); 22 | 23 | //vrm 24 | Logics.initializeAmmo(ap); 25 | 26 | Logics.loadingModelFinishedForSecondaryAnimationControler(ap); 27 | 28 | Logics.loadingModelStartedForVrm(ap); 29 | 30 | console.log(ap.signals); 31 | 32 | ap.getSignal("loadingModelStarted").dispatch(url); 33 | 34 | } -------------------------------------------------------------------------------- /WebContent/examples/vrm/ikcontrol/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/iks/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | VRM Examples 5 | 6 | 7 | 8 |

VRM Examples

9 |

maybe only works Chrome,I have no time to test

10 | どちらかというと実装はおまけで、Ammoに最適化したVRMを構築したいです。
11 | 具体的には横方法のconstraintを充実させて、他のシェイプを追加して、当たり判定を改善したいです。 12 |
13 | Load VRM - 読み込んで表示するだけ
14 | 15 | VRM ikテスト - まだ設定ぜんぜんです。
16 | 17 | VRM Materialの編集用 - 未完成
18 | VRM のHumanoidのボーンを変更するUIテスト
19 | econdaryAnimation Example on Scale 1 - AmmoのPhysicsはサイズによって動作が違くて、VRMのそのままのサイズでの動作
20 | SecondaryAnimation Example on Scale 100 - AmmoのPhysicsはサイズによって動作が違う。こちらはthree.jsで使いやすいようScale変更してみた
21 | 画像保存機能はHDDに負荷が絶大なため、SSD環境以外使わないでください。簡単なアニメーションの作成ツールのテスト・トップページの動画もこれと、ffmpegのみで作成。
22 | 23 |

Links

24 | Three.js Core library 25 | VRoid Hub使用しているキャラクター 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/load/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | ap.renderer.gammaOutput=true; 4 | //default camera 5 | ap.camera.position.set( 0, 100, -250 ); 6 | ap.controls.target.set(0,100,0); 7 | ap.controls.update(); 8 | 9 | var url='../../../dataset/vrm/Alicia/AliciaSolid.vrm'; 10 | 11 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 12 | 13 | 14 | //ap.camera.position.set( 0, 1.6, - 2.2 ); 15 | //ap.controls.target.set( 0, 0.9, 0 ); 16 | //ap.controls.update(); 17 | 18 | //light 19 | ap.scene.add(new THREE.AmbientLight(0xaaaaaa)); 20 | 21 | ap.getSignal("loadingModelStarted").add(function(url){ 22 | VrmUtils.logging=true; 23 | VrmUtils.loadVrm(ap,url); 24 | }); 25 | 26 | ap.getSignal("loadingModelFinished").add(function(model){ 27 | if(ap.skinnedMesh){ 28 | ap.skinnedMesh.parent.remove(ap.skinnedMesh); 29 | ap.skeletonHelper.parent.remove(helper); 30 | } 31 | ap.skinnedMesh=model; 32 | ap.scene.add(model); 33 | model.scale.set(100,100,100); 34 | 35 | var helper=new THREE.SkeletonHelper(model); 36 | ap.scene.add(helper); 37 | ap.skeletonHelper=helper; 38 | helper.material.visible=false; 39 | }); 40 | 41 | 42 | 43 | ap.getSignal("loadingModelStarted").dispatch(url); 44 | 45 | } -------------------------------------------------------------------------------- /WebContent/examples/vrm/load/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/load/js/Sidebar.js: -------------------------------------------------------------------------------- 1 | var Sidebar = function ( application ) { 2 | var ap=application; 3 | var container = new UI.Panel(); 4 | container.setId( 'sidebar' ); 5 | container.add(new UI.AppName("Load Example")); 6 | 7 | container.add(new Sidebar.VrmLicense(ap)); 8 | 9 | var skeletonPanel=new UI.TitlePanel("Skeleton"); 10 | container.add(skeletonPanel); 11 | var checkRow=new UI.CheckboxRow("Visible",false,function(v){ 12 | ap.skeletonHelper.material.visible=v; 13 | }); 14 | skeletonPanel.add(checkRow); 15 | 16 | container.add(new Sidebar.VrmModel(ap)); 17 | 18 | return container; 19 | } 20 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/material/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | ap.renderer.gammaOutput=true; 4 | 5 | //default camera 6 | ap.camera.position.set( 0, 100, -250 );//z is opposite 7 | ap.controls.target.set(0,100,0); 8 | ap.controls.update(); 9 | 10 | var url='../../../dataset/vrm/Alicia/AliciaSolid.vrm'; 11 | //var url='../../../dataset/vrm/3207836450134888583.vrm'; 12 | 13 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 14 | 15 | //light 16 | ap.scene.add(new THREE.AmbientLight(0xaaaaaa));//use basic material 17 | 18 | Logics.loadingModelFinishedForBoneAttachControler(ap); 19 | 20 | //vrm 21 | Logics.initializeAmmo(ap); 22 | 23 | Logics.loadingModelFinishedForSecondaryAnimationControler(ap); 24 | 25 | Logics.loadingModelStartedForVrm(ap); 26 | 27 | ap.getSignal("loadingModelStarted").dispatch(url); 28 | 29 | //ap.ammoVisible=true; 30 | 31 | } -------------------------------------------------------------------------------- /WebContent/examples/vrm/material/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/morph/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/multi/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/rotatecontrol/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | ap.renderer.gammaOutput=true; 4 | 5 | //default camera 6 | ap.camera.position.set( 0, 100, -250 );//z is opposite 7 | ap.controls.target.set(0,100,0); 8 | ap.controls.update(); 9 | 10 | var url='../../../dataset/vrm/Alicia/AliciaSolid.vrm'; 11 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 12 | 13 | //light 14 | ap.scene.add(new THREE.AmbientLight(0xaaaaaa));//use basic material 15 | 16 | Logics.loadingModelFinishedForBoneAttachControler(ap); 17 | 18 | //vrm 19 | Logics.initializeAmmo(ap); 20 | 21 | Logics.loadingModelFinishedForSecondaryAnimationControler(ap); 22 | 23 | Logics.loadingModelStartedForVrm(ap); 24 | 25 | ap.getSignal("loadingModelStarted").dispatch(url); 26 | 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/rotatecontrol/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/sas1/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/sas100/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | ap.renderer.gammaOutput=true; 4 | 5 | //default camera 6 | ap.camera.position.set( 0, 100, -250 );//z is opposite 7 | ap.controls.target.set(0,100,0); 8 | ap.controls.update(); 9 | 10 | var url='../../../dataset/vrm/Alicia/AliciaSolid.vrm'; 11 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 12 | 13 | //light 14 | ap.scene.add(new THREE.AmbientLight(0xaaaaaa));//use basic material 15 | 16 | Logics.loadingModelFinishedForBoneAttachControler(ap); 17 | 18 | //vrm 19 | Logics.initializeAmmo(ap); 20 | 21 | Logics.loadingModelFinishedForSecondaryAnimationControler(ap); 22 | 23 | Logics.loadingModelStartedForVrm(ap); 24 | 25 | ap.getSignal("loadingModelStarted").dispatch(url); 26 | 27 | } -------------------------------------------------------------------------------- /WebContent/examples/vrm/sas100/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/timeliner_bones/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/examples/vrm/timeliner_bs/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /WebContent/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Three.js Examples And Tootls 4 | 5 | 6 |

Three.js Examples And Tootls

7 | Developing at Github 8 |

9 | Examples 10 | Tools TODO 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /WebContent/js/ammo/AmmoBoxBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | 2 | //Vector3 boxSize,btRigidBody body, Mesh mesh 3 | AmmoBoxBodyAndMesh = function(boxSize,body,mesh){ 4 | AmmoBodyAndMesh.call(this,body,mesh); 5 | this.boxSize=boxSize; 6 | 7 | this.rotationSync=true; 8 | this.shapeType=AmmoBodyAndMesh.TYPE_BOX; 9 | } 10 | 11 | AmmoBoxBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 12 | AmmoBoxBodyAndMesh.prototype.constructor = AmmoBoxBodyAndMesh; 13 | -------------------------------------------------------------------------------- /WebContent/js/ammo/AmmoCapsuleBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | 2 | //double radius,double height,btRigidBody body, Mesh mesh 3 | AmmoCapsuleBodyAndMesh = function(radius,height,body,mesh){ 4 | AmmoBodyAndMesh.call(this,body,mesh); 5 | this.radius=radius; 6 | this.height=height; 7 | 8 | this.rotationSync=true; 9 | this.shapeType=AmmoBodyAndMesh.TYPE_CAPSULE; 10 | } 11 | 12 | AmmoCapsuleBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 13 | AmmoCapsuleBodyAndMesh.prototype.constructor = AmmoCapsuleBodyAndMesh; 14 | -------------------------------------------------------------------------------- /WebContent/js/ammo/AmmoSphereBodyAndMesh.js: -------------------------------------------------------------------------------- 1 | AmmoSphereBodyAndMesh = function(radius,body,mesh){ 2 | AmmoBodyAndMesh.call(this,body,mesh); 3 | this.radius=radius; 4 | 5 | this.rotationSync=true; 6 | this.shapeType=AmmoBodyAndMesh.TYPE_SPHERE; 7 | } 8 | 9 | AmmoSphereBodyAndMesh.prototype = Object.create( AmmoBodyAndMesh.prototype ); 10 | AmmoSphereBodyAndMesh.prototype.constructor = AmmoSphereBodyAndMesh; 11 | -------------------------------------------------------------------------------- /WebContent/js/application/MinApplication.js: -------------------------------------------------------------------------------- 1 | var MinApplication = function () { 2 | this.scene = new THREE.Scene(); 3 | this.scene.name = 'Scene'; 4 | this.scene.background = new THREE.Color( 0xaaaaaa ); 5 | 6 | this.camera = new THREE.PerspectiveCamera( 50, 1, .1, 1000 ); 7 | this.camera.name = 'Camera'; 8 | this.camera.position.set( 0, 5, 10 ); 9 | this.camera.lookAt( new THREE.Vector3() ); 10 | 11 | var Signal = signals.Signal; 12 | 13 | this.signals = { 14 | loadingModelStarted:new Signal(), 15 | loadingModelFinished:new Signal(), 16 | windowResize: new Signal(), 17 | rendered:new Signal(), 18 | } 19 | 20 | AppUtils.decoderPath="../../libs/draco/gltf/"; 21 | }; 22 | 23 | MinApplication.prototype.getSignal=function(key){ 24 | var signal= this.signals[key]; 25 | if(signal==undefined){ 26 | signal=new signals.Signal(); 27 | this.signals[key]=signal; 28 | } 29 | return signal; 30 | } -------------------------------------------------------------------------------- /WebContent/js/core/BasicCore.js: -------------------------------------------------------------------------------- 1 | var BasicCore = function ( ap ) { 2 | MinCore.call(this,ap); 3 | 4 | Logics.loadingModelStartedForGltfFbxLoader(ap); 5 | 6 | return ap.core; 7 | } -------------------------------------------------------------------------------- /WebContent/js/core/TransformCore.js: -------------------------------------------------------------------------------- 1 | var TransformCore = function ( ap ) { 2 | MinTransformCore.call(this,ap); 3 | Logics.loadingModelStartedForGltfFbxLoader(ap); 4 | return ap.core; 5 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.CameraControler.js: -------------------------------------------------------------------------------- 1 | Sidebar.CameraControler=function(ap){ 2 | var titlePanel=new UI.TitlePanel("Camera Controler"); 3 | 4 | function update(){ 5 | var y1=cameraY.getValue(); 6 | var y2=targetY.getValue(); 7 | ap.camera.position.set( 0, y1, cameraZ.getValue() ); 8 | ap.controls.target.set(0,y2,0); 9 | ap.controls.update(); 10 | } 11 | ap.cameraY=125; 12 | ap.cameraZ=225; 13 | ap.targetY=90; 14 | 15 | ap.getSignal("cameraControlerChanged").add(function(cpos,tpos){ 16 | 17 | cameraY.setValue(cpos.y); 18 | cameraZ.setValue(cpos.z); 19 | targetY.setValue(tpos.y); 20 | update(); 21 | }) 22 | 23 | var cameraY=new UI.NumberButtons("Camera Y",-500,500,100,ap.cameraY,function(){ 24 | update(); 25 | },[100,125,150]); 26 | 27 | titlePanel.add(cameraY); 28 | 29 | var cameraZ=new UI.NumberButtons("Camera Z",0,500,100,ap.cameraZ,function(){ 30 | update(); 31 | },[225,250,280]); 32 | titlePanel.add(cameraZ); 33 | 34 | 35 | var targetY=new UI.NumberButtons("Target Y",-500,500,100,ap.targetY,function(){ 36 | update(); 37 | },[60,90,100]); 38 | titlePanel.add(targetY); 39 | 40 | update(); 41 | 42 | return titlePanel; 43 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.ClipPlayer.js: -------------------------------------------------------------------------------- 1 | Sidebar.ClipPlayer=function(ap){ 2 | var titlePanel=new UI.TitlePanel("Clip Player"); 3 | ap.clip=null; 4 | 5 | ap.clipAutoStart=true; 6 | titlePanel.add(new Sidebar.ClipAutoStartRow(ap)); 7 | 8 | var loadClipRow=new LoadClipRow(function(clip){ 9 | ap.clip=clip; 10 | if(ap.clipAutoStart ){ 11 | if(clip!=null){ 12 | ap.signals.clipPlayerPlayed.dispatch(); 13 | }else{ 14 | ap.signals.clipPlayerStopped.dispatch(); 15 | } 16 | } 17 | }); 18 | 19 | titlePanel.add(loadClipRow); 20 | 21 | var clipPlayerRow=new ClipPlayerRow(ap); 22 | titlePanel.add(clipPlayerRow); 23 | 24 | return titlePanel; 25 | } 26 | 27 | Sidebar.ClipAutoStartRow=function(ap){ 28 | var autoStart=new UI.CheckboxRow("Auto Start",ap.clipAutoStart,function(v){ 29 | ap.clipAutoStart=v; 30 | }); 31 | 32 | ap.signals.loadingModelFinished.add(function(){ 33 | if(ap.clipAutoStart && ap.clip!=null){ 34 | if(ap.signals.clipPlayerPlayed){ 35 | ap.signals.clipPlayerPlayed.dispatch(); 36 | } 37 | } 38 | },undefined,-100); 39 | return autoStart; 40 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.Debug.js: -------------------------------------------------------------------------------- 1 | Sidebar.Debug=function(ap){ 2 | var container=new UI.TitlePanel("Debug"); 3 | var btRow=new UI.ButtonRow("Print App",function(){ 4 | console.log(ap); 5 | }); 6 | container.add(btRow); 7 | var btRow=new UI.ButtonRow("Print Mesh",function(){ 8 | console.log(ap.skinnedMesh); 9 | }); 10 | container.add(btRow); 11 | var btRow=new UI.ButtonRow("Print ap.objects",function(){ 12 | var len=ap.objects.length; 13 | console.log("ap.objects",len,ap.objects); 14 | }); 15 | container.add(btRow); 16 | 17 | var ikcheck=new UI.Subtitle("Ik"); 18 | container.add(ikcheck); 19 | var ikrow=new UI.Row(); 20 | container.add(ikrow); 21 | 22 | var iklogging=new UI.CheckboxText("logging",false,function(v){ 23 | ap.ikControler.logging=v; 24 | }) 25 | container.add(iklogging); 26 | var ikDebug=new UI.CheckboxText("debug",false,function(v){ 27 | ap.ikControler.debug=v; 28 | }) 29 | container.add(ikDebug); 30 | return container; 31 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.Grid.js: -------------------------------------------------------------------------------- 1 | Sidebar.Grid=function(ap){ 2 | var scope=this; 3 | this.margin=0; 4 | var titlePanel=new UI.TitlePanel("Grid"); 5 | var visibleRow=new UI.CheckboxRow("Visible",true,function(v){ 6 | grid.material.visible=v; 7 | }); 8 | visibleRow.text.setWidth("40px"); 9 | visibleRow.checkbox.setWidth("20px"); 10 | titlePanel.add(visibleRow); 11 | 12 | 13 | 14 | var grid = new THREE.GridHelper( 2000,240); 15 | grid.material.opacity = 1.0; 16 | grid.material.transparent = true; 17 | ap.scene.add( grid ); 18 | ap.groundGrid=grid; 19 | 20 | var opacity=new UI.NumberButtonsSpan("Opacity",0,1,1,1,function(v){ 21 | grid.material.opacity=v; 22 | },[0.25,0.5,1]); 23 | visibleRow.add(opacity); 24 | opacity.text.setWidth("50px"); 25 | opacity.number.setWidth("40px"); 26 | //TODO allow change 27 | 28 | 29 | return titlePanel; 30 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.IkBoneList.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkBoneList=function(ap){ 2 | ap.signals.transformSelectionChanged.add(function(target){ 3 | 4 | boneListButtons.forEach(function(button){ 5 | boneListRow.remove(button); 6 | }); 7 | boneListButtons=[]; 8 | 9 | var boneList=BoneUtils.getBoneList(ap.skinnedMesh); 10 | if(target!=null){ 11 | if(ap.ikControler.ikTarget==null){ 12 | //console.log("invalidly call sidebar first");//other type selected 13 | return; 14 | } 15 | 16 | ap.ikControler.ikIndices.forEach(function(index){ 17 | 18 | var name=boneList[index].name; 19 | var bt=new UI.Button(name); 20 | bt.onClick(function(){ 21 | ap.signals.boneSelectionChanged.dispatch(index); 22 | }); 23 | boneListRow.add(bt); 24 | boneListButtons.push(bt); 25 | }); 26 | } 27 | 28 | },undefined,-100); 29 | var boneListButtons=[]; 30 | var ikBoneList=new UI.TitlePanel("Ik Bone List"); 31 | 32 | var boneListRow=new UI.Row(); 33 | ikBoneList.add(boneListRow); 34 | return ikBoneList; 35 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.IkRatioIO.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkRatioIO=function(ap){ 2 | var titlePanel=new UI.TitlePanel("IkRatio Load & Export"); 3 | 4 | 5 | 6 | var jsonList=new ListLoadJsonDiv("../../../dataset/mbl3d/ikratio/", 7 | ["","lowerarm1.json","lowerarm2.json","clavicle1.json","clavicle2.json","upperarm.json","hand1.jspn","hand2.json"],function(json){ 8 | 9 | if(json==null){ 10 | ap.ikControler.clearBoneRatio(); 11 | 12 | }else{ 13 | ap.ikControler.setBoneRatioFromJson(json); 14 | } 15 | 16 | var index=ap.boneSelectedIndex; 17 | ap.getSignal("boneSelectionChanged").dispatch(index); 18 | 19 | }); 20 | titlePanel.add(jsonList); 21 | 22 | 23 | var exportDiv=new ExportJsonDiv(ap,function(fileName){ 24 | return ap.ikControler.getBoneRatioAsJson(); 25 | }); 26 | titlePanel.add(exportDiv); 27 | 28 | return titlePanel; 29 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.IkReset.js: -------------------------------------------------------------------------------- 1 | Sidebar.IkReset=function(ap){ 2 | var resetPanel=new UI.TitlePanel("Reset Ik"); 3 | var buttonRow=new UI.Row(); 4 | resetPanel.add(buttonRow); 5 | var resetIks=new UI.Button("Reset Selected Ik"); 6 | resetIks.onClick(function(){ 7 | if(ap.ikControler.ikTarget!=null){ 8 | var indices=ap.ikControler.getEffectedBoneIndices(ap.ikControler.getIkNameFromTarget(ap.ikControler.ikTarget)); 9 | indices.forEach(function(index){ 10 | BoneUtils.resetBone(ap.skinnedMesh,index); 11 | ap.getSignal("boneRotationChanged").dispatch(index);//selected ik not resetted 12 | ap.getSignal("boneRotationFinished").dispatch(index); 13 | }); 14 | //manually reset 15 | ap.ikControler.resetAllIkTargets(); 16 | } 17 | }); 18 | buttonRow.add(resetIks); 19 | return resetPanel; 20 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.LoadPosePanel.js: -------------------------------------------------------------------------------- 1 | Sidebar.LoadPosePanel=function(ap,title,buttonTitle,onLoad,onReset,accepts){ 2 | var container=new UI.TitlePanel(title); 3 | 4 | function clipToPose(clip){ 5 | var root=ap.skinnedMesh; 6 | 7 | AnimeUtils.resetPose(root); 8 | AnimeUtils.resetMesh(root); 9 | 10 | 11 | if(clip!=null){ 12 | AnimeUtils.clipToPose(clip,root); 13 | } 14 | } 15 | container.clipToPose=clipToPose; 16 | container.getClip=function(){ 17 | return loadClipRow.clip; 18 | } 19 | onLoad=onLoad==undefined?clipToPose:onLoad; 20 | 21 | var loadClipRow=new LoadClipRow(onLoad,onReset,accepts); 22 | container.add(loadClipRow); 23 | 24 | 25 | var buttonRow=new UI.ButtonRow(buttonTitle,function(){ 26 | var clip=loadClipRow.clip; 27 | clipToPose(clip); 28 | }); 29 | container.add(buttonRow); 30 | return container; 31 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.MeshRotate.js: -------------------------------------------------------------------------------- 1 | Sidebar.MeshRotate=function(ap){ 2 | var title=new UI.TitlePanel("Mesh Rotate"); 3 | var absoluteRotateDiv=new AbsoluteRotateDiv(ap); 4 | title.add(absoluteRotateDiv); 5 | ap.getSignal("objectRotated").add(function(x,y,z,target){ 6 | if(target!=absoluteRotateDiv){ 7 | return; 8 | } 9 | var degs={x:x,y:y,z:z}; 10 | var rads=AppUtils.degToRad(degs); 11 | ap.skinnedMesh.rotation.set(rads.x,rads.y,rads.z); 12 | }); 13 | return title; 14 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.SimpleLight.js: -------------------------------------------------------------------------------- 1 | Sidebar.SimpleLight=function(ap){ 2 | 3 | var titlePanel=new UI.TitlePanel("Simple Light"); 4 | 5 | var color1=0xaaaaaa; 6 | var color2=0xaaaaaa; 7 | var ambientColor=0x666666; 8 | 9 | var light1 = new THREE.DirectionalLight(color1); 10 | light1.position.set(150, 150, 150); 11 | ap.scene.add(light1); 12 | 13 | var lightColor=new UI.ColorRow("Light1",color1,function(v){ 14 | light1.color.set(v); 15 | }); 16 | titlePanel.add(lightColor); 17 | 18 | var light2 = new THREE.DirectionalLight(color2); 19 | light2.position.set(-100, -100, -100); 20 | ap.scene.add(light2); 21 | 22 | var light2Color=new UI.ColorRow("Light2",color2,function(v){ 23 | light2.color.set(v); 24 | }); 25 | titlePanel.add(light2Color); 26 | 27 | var ambientLight = new THREE.AmbientLight(ambientColor); 28 | 29 | ap.scene.add(ambientLight); 30 | 31 | var ambient=new UI.ColorRow("Ambient",ambientColor,function(v){ 32 | ambientLight.color.set(v); 33 | }); 34 | titlePanel.add(ambient); 35 | 36 | return titlePanel; 37 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.TimelinerBackgroundClip.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerBackgroundClip=function(ap){ 2 | var titlePanel=new UI.TitlePanel("Timeliner Background Clip"); 3 | var scope=this; 4 | this.clip=null; 5 | this.time=0; 6 | this._action=null;; 7 | 8 | var loadClipRow=new LoadClipRow(function(clip){ 9 | scope.mixer.stopAllAction(); 10 | this._action=null; 11 | 12 | scope.clip=clip; 13 | 14 | if(clip!=null){//ready clip 15 | scope._action=scope.mixer.clipAction(scope.clip).play(); 16 | durationRow.setValue(String(clip.duration)+" sec"); 17 | }else{ 18 | durationRow.setValue("0 sec"); 19 | } 20 | 21 | seeked(scope.time); 22 | }); 23 | 24 | titlePanel.add(loadClipRow); 25 | 26 | var durationRow=new UI.TextRow("Duration","0 sec"); 27 | titlePanel.add(durationRow); 28 | 29 | ap.signals.loadingModelFinished.add(function(mesh){ 30 | if(scope.mixer!=null){ 31 | scope.mixer.stopAllAction(); 32 | } 33 | scope.mixer=new THREE.AnimationMixer(mesh); 34 | }); 35 | 36 | function seeked(t){ 37 | scope.time=t; 38 | if(scope.clip==null){ 39 | return; 40 | } 41 | 42 | scope._action.time = t; 43 | scope.mixer.update( 0 ); 44 | } 45 | 46 | ap.getSignal("timelinerSeeked").add(seeked); 47 | 48 | 49 | return titlePanel; 50 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.TimelinerClipExport.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerClipExport=function(ap){ 2 | var scope=this; 3 | function makeClip(ap){ 4 | return ap.timeliner.context.controller._clip; 5 | } 6 | this.fileName=""; 7 | var exportPanel=new UI.TitlePanel("Export Timeliner As Clip"); 8 | var nameRow=new UI.InputRow("Name","",function(v){scope.fileName=v}); 9 | nameRow.text.setWidth("110px"); 10 | nameRow.text.setMarginRight("6px"); 11 | 12 | nameRow.input.setWidth("140px"); 13 | exportPanel.add(nameRow); 14 | 15 | 16 | 17 | var bt=new UI.Button("Download").onClick( function () { 18 | span.dom.innerHTML = '' 19 | var clip=makeClip(ap); 20 | var defaultName=ap.timelinerClipExportName==undefined?"timeliner_clip":ap.timelinerClipExportName; 21 | var fileName=scope.fileName == ""?defaultName:scope.fileName; 22 | 23 | fileName=fileName+".json"; 24 | var jsonText=AnimeUtils.clipToJsonText(clip); 25 | var link=AppUtils.generateTextDownloadLink(jsonText,fileName,fileName,true); 26 | span.dom.appendChild(link); 27 | link.click(); 28 | 29 | } ); 30 | exportPanel.add(bt); 31 | bt.setMarginRight("6px"); 32 | var span=new UI.Span(); 33 | exportPanel.add(span); 34 | return exportPanel; 35 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.TimelinerControl.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerControl=function(ap){ 2 | var container=new UI.TitlePanel("Timeliner Control"); 3 | 4 | // 5 | var scroll=new UI.IntegerPlusMinus("Scroll",0,60*60,10,0,function(v){ 6 | ap.timeliner.context.dispatcher.fire('scrollTime.update',v); 7 | },[5,10,30]); 8 | container.add(scroll); 9 | scroll.text.setWidth("40px"); 10 | scroll.number.setWidth("24px"); 11 | 12 | 13 | var scaleValues=[15,30,60,120,240]; 14 | var listRow=new UI.ListRow("Scale",scaleValues,function(v){ 15 | ap.timeliner.context.dispatcher.fire('update.scale',v); 16 | },60) 17 | listRow.text.setWidth("40px"); 18 | container.add(listRow); 19 | 20 | 21 | 22 | var total=new UI.IntegerPlusMinus("Total",0,60*60,10,3,function(v){ 23 | ap.timeliner.context.dispatcher.fire('totalTime.update',v); 24 | },[1,5],3); 25 | container.add(total); 26 | total.text.setWidth("40px"); 27 | total.number.setWidth("30px"); 28 | 29 | 30 | ap.getSignal("timelinerSeeked").add(function(t){ 31 | var duration=ap.timeliner.context.totalTime;//only this one is way to get update; 32 | total.setValue(duration); 33 | }); 34 | 35 | return container; 36 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.TimelinerVisibleRow.js: -------------------------------------------------------------------------------- 1 | Sidebar.TimelinerVisibleRow=function(ap){ 2 | var visible=true; 3 | var resize=true; 4 | 5 | 6 | ap.getSignal("timelinerVisible").add(function(v,r){ 7 | visible=v; 8 | resize=r; 9 | update(); 10 | }) 11 | 12 | 13 | 14 | function update(){ 15 | ap.timeliner.setVisible(visible); 16 | if(resize){ 17 | if(visible){ 18 | ap.core.setId("viewport2"); 19 | }else{ 20 | ap.core.setId("viewport"); 21 | } 22 | ap.signals.windowResize.dispatch(); 23 | } 24 | } 25 | 26 | var bt=new UI.ButtonRow("TimeLiner Switch Show/Hide",function(){ 27 | visible=!visible; 28 | update(); 29 | }); 30 | 31 | 32 | var resizeCheck=new UI.CheckboxText("Resize",resize,function(v){ 33 | resize=v; 34 | update(); 35 | }); 36 | 37 | bt.add(resizeCheck); 38 | 39 | 40 | 41 | 42 | 43 | return bt; 44 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.Transparent.js: -------------------------------------------------------------------------------- 1 | Sidebar.Transparent=function(ap){ 2 | var titlePanel=new UI.TitlePanel("Mesh Transparent Plus"); 3 | var transparent=new UI.CheckboxRow("transparent",true,function(v){ 4 | ap.skinnedMesh.material.transparent=v; 5 | if(!v){ 6 | opacity.setDisabled(true); 7 | alphaTest.setDisabled(true); 8 | }else{ 9 | opacity.setDisabled(false); 10 | alphaTest.setDisabled(false); 11 | } 12 | }); 13 | titlePanel.add(transparent); 14 | var opacity=new UI.NumberButtons("Opacity",0,1,1,1,function(v){ 15 | ap.skinnedMesh.material.opacity=v; 16 | },[0,0.5,0.75,1]); 17 | titlePanel.add(opacity); 18 | var alphaTest=new UI.NumberButtons("AlphaTest",0,1,1,0.2,function(v){ 19 | ap.skinnedMesh.material.alphaTest=v; 20 | ap.skinnedMesh.material.needsUpdate=true; 21 | console.log(ap.skinnedMesh.material); 22 | },[0,0.5,0.75,1]); 23 | titlePanel.add(alphaTest); 24 | 25 | 26 | ap.getSignal("materialChanged").add(function(){ 27 | ap.skinnedMesh.material.transparent=transparent.getValue(); 28 | ap.skinnedMesh.material.opacity=opacity.getValue(); 29 | ap.skinnedMesh.material.alphaTest=alphaTest.getValue(); 30 | },undefined,-1); 31 | 32 | return titlePanel; 33 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.VrmSimpleBlendShape.js: -------------------------------------------------------------------------------- 1 | Sidebar.VrmSimpleBlendShape=function(ap){ 2 | var container=new UI.TitlePanel("Simple BlendShape"); 3 | 4 | var names=[""]; 5 | names=names.concat(VrmUtils.blendShapeNames); 6 | var list=new UI.ListRow("name",names,function(v){ 7 | 8 | update(); 9 | 10 | }); 11 | container.add(list); 12 | 13 | function update(){ 14 | var key=list.getValue(); 15 | var map={}; 16 | map[key]=intensityBts.getValue(); 17 | ap.getSignal("VrmBlendShapeChanged").dispatch(map); 18 | } 19 | 20 | var intensityBts=new UI.NumberButtons("Intensity",0,1,1,1,function(v){ 21 | update(); 22 | },[0.1,0.5,0.75,1]); 23 | intensityBts.text.setWidth("60px"); 24 | intensityBts.number.setWidth("50px"); 25 | 26 | container.add(intensityBts); 27 | 28 | return container; 29 | } -------------------------------------------------------------------------------- /WebContent/js/sidebar/Sidebar.VrmVisible.js: -------------------------------------------------------------------------------- 1 | Sidebar.VrmVisible=function(ap){ 2 | var container=new UI.TitlePanel("Mesh Visible"); 3 | 4 | 5 | 6 | 7 | 8 | var itemList=new UI.Select(); 9 | container.add(itemList); 10 | itemList.onChange(function(v){ 11 | var value=itemList.getValue(); 12 | var target=ap.skinnedMesh.getObjectById(Number(value)); 13 | 14 | checkRow.setValue(target.material.visible); 15 | }); 16 | 17 | ap.getSignal("loadingModelFinished").add(function(model){ 18 | var keys={}; 19 | model.traverse(function(model){ 20 | if(model.isSkinnedMesh){ 21 | keys[model.id]=model.name; 22 | } 23 | }); 24 | itemList.setOptions(keys); 25 | }); 26 | 27 | var checkRow=new UI.CheckboxRow("Visible",false,function(v){ 28 | var value=itemList.getValue(); 29 | var target=ap.skinnedMesh.getObjectById(Number(value)); 30 | target.material.visible=v; 31 | }); 32 | 33 | container.add(checkRow); 34 | 35 | 36 | 37 | 38 | 39 | return container; 40 | } -------------------------------------------------------------------------------- /WebContent/js/ui/ExportJsonDiv.js: -------------------------------------------------------------------------------- 1 | var ExportJsonDiv=function(ap,jsonFunction,fileNameFunction,buttonLabel){ 2 | var exportPanel=new UI.Div(); 3 | var scope=this; 4 | buttonLabel=buttonLabel==undefined?"Download Json":buttonLabel; 5 | if(fileNameFunction==undefined){ 6 | fileNameFunction=function(base){ 7 | if(base==""){ 8 | base="data"; 9 | } 10 | return base+".json"; 11 | } 12 | } 13 | this.fileName=""; 14 | var nameRow=new UI.InputRow("Name","",function(v){scope.fileName=v}); 15 | nameRow.text.setWidth("110px"); 16 | nameRow.text.setMarginRight("6px"); 17 | 18 | nameRow.input.setWidth("140px"); 19 | exportPanel.add(nameRow); 20 | 21 | var bt=new UI.Button(buttonLabel).onClick( function () { 22 | span.dom.innerHTML = '' 23 | var fileName=fileNameFunction(scope.fileName); 24 | var jsonText=jsonFunction(fileName); 25 | var link=AppUtils.generateTextDownloadLink(jsonText,fileName,fileName,true); 26 | span.dom.appendChild(link); 27 | link.click(); 28 | } ); 29 | exportPanel.add(bt); 30 | bt.setMarginRight("6px"); 31 | var span=new UI.Span(); 32 | exportPanel.add(span); 33 | return exportPanel; 34 | } -------------------------------------------------------------------------------- /WebContent/js/ui/IkRatioRow.js: -------------------------------------------------------------------------------- 1 | var IkRatioRow=function(ap){ 2 | var row=new UI.Row(); 3 | 4 | 5 | var bone=null; 6 | var ratio=new UI.NumberButtons("Ratio",0,1,0.1,1,function(v){ 7 | ap.ikControler.setBoneRatio(bone.name,v); 8 | },[0.01,0.1,0.5,1]); 9 | ratio.number.setWidth("40px"); 10 | row.add(ratio); 11 | ratio.setDisabled(true); 12 | 13 | ap.getSignal("boneSelectionChanged").add(function(index){ 14 | if(index==undefined){ 15 | ratio.setDisabled(true); 16 | return; 17 | } 18 | bone=BoneUtils.getBoneList(ap.skinnedMesh)[index]; 19 | 20 | var v=ap.ikControler.getBoneRatio(bone.name); 21 | ratio.setValue(v); 22 | ratio.setDisabled(false); 23 | }); 24 | return row; 25 | } -------------------------------------------------------------------------------- /WebContent/js/ui/IkSolveRow.js: -------------------------------------------------------------------------------- 1 | IkSolveRow=function(ap){ 2 | var solveIkRow=new UI.ButtonRow("Solve Selected",function(){ 3 | ap.signals.solveIkCalled.dispatch(); 4 | }); 5 | 6 | 7 | var resetAndSolve=new UI.Button("Reset & Solve5"); 8 | resetAndSolve.onClick(function(){ 9 | if(ap.ikControler.ikTarget!=null){ 10 | ap.ikControler.ikIndices.forEach(function(index){ 11 | BoneUtils.resetBone(ap.skinnedMesh,index); 12 | }); 13 | } 14 | ap.ikControler.boneAttachControler.update(); 15 | 16 | ap.signals.solveIkCalled.dispatch(); 17 | ap.signals.solveIkCalled.dispatch(); 18 | ap.signals.solveIkCalled.dispatch(); 19 | ap.signals.solveIkCalled.dispatch(); 20 | ap.signals.solveIkCalled.dispatch(); 21 | }); 22 | 23 | solveIkRow.add(resetAndSolve); 24 | 25 | var reset=new UI.Button("Reset"); 26 | reset.onClick(function(){ 27 | if(ap.ikControler.ikTarget!=null){ 28 | ap.ikControler.ikIndices.forEach(function(index){ 29 | BoneUtils.resetBone(ap.skinnedMesh,index); 30 | }); 31 | } 32 | ap.ikControler.boneAttachControler.update(); 33 | }); 34 | 35 | solveIkRow.add(reset); 36 | return solveIkRow; 37 | } -------------------------------------------------------------------------------- /WebContent/js/ui/LoadClipRow.js: -------------------------------------------------------------------------------- 1 | var LoadClipRow=function(onLoad,onReset,accepts){ 2 | if(accepts==undefined){ 3 | accepts=".json"; 4 | } 5 | if(onReset==undefined){ 6 | onReset=onLoad; 7 | } 8 | var clipRow=new UI.Row(); 9 | var fileInput=new UI.TextFile(accepts); 10 | clipRow.add(fileInput); 11 | 12 | fileInput.onChange(function(fileName,text){ 13 | if(text==null){//just Reset 14 | if(onReset!==undefined){ 15 | clipRow.clip=null; 16 | onReset(null); 17 | }else{ 18 | console.error("LoadPosePanel:onReset is undefined") 19 | } 20 | return; 21 | } 22 | 23 | var json = JSON.parse( text ); 24 | var clip=THREE.AnimationClip.parse(json); 25 | if(json.boneNames!==undefined){ 26 | clip.boneNames=json.boneNames; 27 | } 28 | 29 | clipRow.clip=clip; 30 | if(onLoad!==undefined){ 31 | onLoad(clip); 32 | }else{ 33 | console.error("LoadPosePanel:onLoad is undefined") 34 | } 35 | 36 | }); 37 | 38 | return clipRow; 39 | } -------------------------------------------------------------------------------- /WebContent/js/ui/LoadJsonRow.js: -------------------------------------------------------------------------------- 1 | var LoadJsonRow=function(onLoad,onReset,accepts){ 2 | if(onLoad==undefined){ 3 | console.error("LoadJsonRow need onLoad"); 4 | return; 5 | } 6 | if(accepts==undefined){ 7 | accepts=".json"; 8 | } 9 | if(onReset==undefined){ 10 | onReset=onLoad; 11 | } 12 | var row=new UI.Row(); 13 | row.json=null; 14 | var fileInput=new UI.TextFile(accepts); 15 | row.add(fileInput); 16 | 17 | fileInput.onChange(function(fileName,text){ 18 | if(text==null){//just Reset 19 | if(onReset!==undefined){ 20 | row.json=null; 21 | onReset(null); 22 | }else{ 23 | console.error("LoadJsonRow:onReset is undefined") 24 | } 25 | return; 26 | } 27 | 28 | var json = JSON.parse( text ); 29 | row.json=json; 30 | 31 | onLoad(json); 32 | 33 | }); 34 | row.fileInput=fileInput; 35 | 36 | return row; 37 | } -------------------------------------------------------------------------------- /WebContent/libs/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright © 2010-2019 three.js authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /WebContent/libs/draco/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/libs/draco/draco_decoder.wasm -------------------------------------------------------------------------------- /WebContent/libs/draco/gltf/draco_decoder.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akjava/ThreeCharacterExamples/80c1d38d135b48877e86c34ed455a5a260233145/WebContent/libs/draco/gltf/draco_decoder.wasm -------------------------------------------------------------------------------- /WebContent/libs102/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright © 2010-2019 three.js authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /WebContent/tools/bone/boneanimation/js/Example.js: -------------------------------------------------------------------------------- 1 | Example=function(application){ 2 | var ap=application; 3 | var scope=this; 4 | 5 | ap.objects=[];//for click object TODO 6 | 7 | //default camera 8 | ap.camera.position.set( 0, 100, 250 ); 9 | ap.controls.target.set(0,100,0); 10 | ap.controls.update(); 11 | 12 | //default model 13 | var url="../../../dataset/mbl3d/models/anime2_female_modifybreast.fbx"; 14 | ap.modelUrl=ap.defaultModelUrl==undefined?url:ap.defaultModelUrl; //defaultModelUrl set by sidebar 15 | 16 | 17 | ap.signals.loadingModelFinished.add(function(){ 18 | //timeliner create when model loaded 19 | ap.getSignal("timelinerVisible").dispatch(true,true); 20 | },undefined,-100); 21 | 22 | ap.signals.loadingModelStarted.dispatch(ap.modelUrl); 23 | } -------------------------------------------------------------------------------- /WebContent/tools/bone/boneanimation/js/Info.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var Info = function ( application ) { 6 | var ap=application; 7 | var signals = application.signals; 8 | 9 | var container = new UI.Panel(); 10 | container.setId( 'info' ); 11 | container.setPosition( 'absolute' ); 12 | container.setRight( '300px' ); 13 | container.setTop( '10px' ); 14 | container.setFontSize( '12px' ); 15 | container.setColor( '#fff' ); 16 | container.setWidth('120px'); 17 | 18 | signals.rendered.add( update ); 19 | 20 | function update() { 21 | 22 | } 23 | 24 | return container; 25 | 26 | }; 27 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | --------------------------------------------------------------------------------