{
    "componentChunkName": "component---src-pages-projects-mdx-slug-js",
    "path": "/projects/fk-ik-solver/",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"FK/IK Solver\",\n  \"author\": \"Sanketh Hegde\",\n  \"type\": \"graphics project\",\n  \"skillTags\": [\"code\", \"computer graphics\"],\n  \"toolTags\": [\"C++\", \"OpenGL\"],\n  \"showToolsInThumbnail\": true,\n  \"thumbnailVideo\": \"./fk-ik-solver_thumbnail.mp4\",\n  \"priority\": 0\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Block, {\n    caption: \"Forward kinematics implementation, written in C++, rendered using OpenGL. World-space positions and orientations of each joint in the skeleton are computed given local joint transformations sourced from BVH animation files.\",\n    mdxType: \"Block\"\n  }, mdx(Video, {\n    source: \"https://sanketh-hegde.s3.us-west-1.amazonaws.com/projects_compressed/fk-ik-solver/fk-samba.mp4\",\n    width: \"512px\",\n    mdxType: \"Video\"\n  })), mdx(Spacer, {\n    mdxType: \"Spacer\"\n  }), mdx(Block, {\n    caption: \"Limb-based inverse kinematics implementation. Given a desired end effector position, rotation angles for the start and middle joints are computed and applied.\",\n    mdxType: \"Block\"\n  }, mdx(Video, {\n    source: \"https://sanketh-hegde.s3.us-west-1.amazonaws.com/projects_compressed/fk-ik-solver/ik-limbbased.mp4\",\n    width: \"512px\",\n    mdxType: \"Video\"\n  })), mdx(Spacer, {\n    mdxType: \"Spacer\"\n  }), mdx(Block, {\n    caption: \"Cyclic Coordinate Descent (CCD) inverse kinematics implementation. Given a desired end effector position, joint rotations are iteratively adjusted along the joint chain to move the end effector toward the target. Max 5 iterations, with joint weights 0.15.\",\n    mdxType: \"Block\"\n  }, mdx(Video, {\n    source: \"https://sanketh-hegde.s3.us-west-1.amazonaws.com/projects_compressed/fk-ik-solver/ik-ccd.mp4\",\n    width: \"512px\",\n    mdxType: \"Video\"\n  })));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"FK/IK Solver","author":"Sanketh Hegde","type":"graphics project"},"slug":"fk-ik-solver/"}},"pageContext":{"id":"cfcd7e70-4d2b-5639-82b1-8a5e777b079c","slug":"fk-ik-solver/","__params":{"slug":"fk-ik-solver"}}},
    "staticQueryHashes": []}