Copyright (C) 2011-2017 mailto:[email protected]
dexvt-lite is a 3D inverse kinematics and GPU ray tracing tech demonstrator. It features rovolute joint constraints, prismatic joint constraints, end-effector orientation constraints, and... GPU ray tracing!
See sister project demonstrating other engine features: dexvt-test
3D Inverse Kinematics
Supports rovolute joint constraints, prismatic joint constraints, and end-effector orientation constraints. The way each constraint type is handled is described below:
-
Revolute Joint Constraints
- "Non-hinge" joints
- In each joint's rotation step, rotate on a pivot that aligns the end-effector with the target.
- Enforce joint constraints in euler space by capping the post-rotation orientation of the adjacent segment to be within the joint's maximal deviation from neutral orientation. Do this for each axis.
- "Hinge" joints
- In each joint's rotation step, rotate on a pivot that minimizes the distance between the end-effector and the target, all the while staying within the joint's plane of free rotation. Setting non-constraint-violating goals early on avoids most problems described here.
- Enforce joint constraints perpendicular to the joint's pivot by squeezing the post-rotation orientation of the adjacent segment to be within the joint's plane of free rotation. This adds numerical stability to the pivot so it doesn't "drift".
- Enforce joint constraints within the joint's plane of free rotation by capping the post-rotation orientation of the adjacent segment to be within the joint's maximal deviation from neutral orientation.
- "Non-hinge" joints
-
Prismatic Joint Constraints
- In each joint's translation step, slide the adjacent segment by the maximal extent it can slide within the joint's range of free translation to align the end-effector with the target.
-
End-effector Orientation Constraints
- In each joint's rotation/translation step, extend the end-effector position by the end-effector orientation offset.
GPU Ray Tracing
-
Supports 4 material types:
- Reflective
- Transparent
- Diffuse
- Glowing
-
Supports 3 primitive types:
- Spheres
- Planes
- Boxes
Unix tools and 3rd party components (accessible from $PATH):
gcc mesa-common-dev freeglut3-dev libglew-dev libglm-dev libpng-dev curl imagemagick
Resource files not included:
resource files | purpose |
---|---|
data/SaintPetersSquare2/posx.png data/SaintPetersSquare2/negx.png data/SaintPetersSquare2/posy.png data/SaintPetersSquare2/negy.png data/SaintPetersSquare2/posz.png data/SaintPetersSquare2/negz.png |
Cube map texture (6 faces) |
data/chesterfield_color.png | Color map texture |
data/chesterfield_normal.png | Normal map texture |
target | action |
---|---|
all | make binaries |
test | all + run tests |
clean | remove all intermediate files |
lint | perform cppcheck |
docs | make doxygen documentation |
resources | download resource files |
clean_lint | remove cppcheck results |
clean_docs | remove doxygen documentation |
clean_resources | remove resource files |
Keyboard:
key | purpose |
---|---|
b | toggle bounding-box |
f | toggle frame rate |
g | toggle guide wires |
h | toggle HUD |
l | toggle lights |
n | toggle normals |
p | toggle ortho-projection |
t | toggle texture |
w | toggle wireframe |
x | toggle axis |
z | toggle labels |
up/down | pitch |
left/right | yaw |
pg-up/pg-dn | roll |
home | toggle target |
space | toggle animation |
esc | exit |
Mouse:
mouse-button + drag | purpose |
---|---|
left | orbit |
right | zoom |
- "Setting up an OpenGL development environment in Ubuntu Linux"
- https://www.codeproject.com/Articles/182109/Setting-up-an-OpenGL-development-environment-in-Ub
- "OpenGL Programming"
- https://en.wikibooks.org/wiki/OpenGL_Programming
- "Tutorial - Getting Started with the OpenGL Shading Language (GLSL)"
- https://joshbeam.com/articles/getting_started_with_glsl/
- "Cube Maps: Sky Boxes and Environment Mapping"
- https://antongerdelan.net/opengl/cubemaps.html
- "3D C/C++ tutorials - OpenGL - GLSL cube mapping"
- https://www.belanecbn.sk/3dtutorials/index.php?id=24
- "Skyboxes using glsl Version 330"
- https://gamedev.stackexchange.com/questions/60313/skyboxes-using-glsl-version-330
- "Rioki's Corner - GLSL Skybox"
- https://www.rioki.org/2013/03/07/glsl-skybox.html
- "How would you implement chromatic aberration?"
- https://gamedev.stackexchange.com/questions/58408/how-would-you-implement-chromatic-aberration
- "How do you calculate the angle between two normals in glsl?"
- https://stackoverflow.com/questions/338762/how-do-you-calculate-the-angle-between-two-normals-in-glsl
- "Chapter 7. Environment Mapping Techniques"
- https://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter07.html
- "Humus Cube Map Textures - Colosseum"
- https://www.humus.name/index.php?page=Textures
- "Kay's Blog Texture and game development freebies! - Well Preserved Chesterfield"
- https://kay-vriend.blogspot.tw/2012/11/well-preserved-chesterfield.html
- "Philip Rideout's OpenGL Bloom Tutorial"
- https://prideout.net/archive/bloom/
- "An investigation of fast real-time GPU-based image blur algorithms"
- https://software.intel.com/en-us/blogs/2014/07/15/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms
- "mattdesl/lwjgl-basics - ShaderLesson5"
- https://github.com/mattdesl/lwjgl-basics/wiki/ShaderLesson5
- "Jam3/glsl-fast-gaussian-blur - glsl-fast-gaussian-blur"
- https://github.com/Jam3/glsl-fast-gaussian-blur
- "john-chapman-graphics SSAO Tutorial"
- https://john-chapman-graphics.blogspot.tw/2013/01/ssao-tutorial.html
- "Know your SSAO artifacts"
- https://mtnphil.wordpress.com/2013/06/26/know-your-ssao-artifacts/
- "songho.ca OpenGL Projection Matrix"
- https://www.songho.ca/opengl/gl_projectionmatrix.html
- "3D MeshWorks"
- https://www.jrbassett.com
- "Missing gtc/constants.hpp #12"
- g-truc/glm#12
- "Kinematics (Advanced Methods in Computer Graphics) Part 4"
- https://what-when-how.com/advanced-methods-in-computer-graphics/kinematics-advanced-methods-in-computer-graphics-part-4/
- "alfanick's inverse-kinematics repo (ccd.cpp)"
- https://github.com/alfanick/inverse-kinematics/blob/master/ccd.cpp
- "Best Inverse kinematics algorithm with constraints on joint angles"
- https://stackoverflow.com/questions/21373012/best-inverse-kinematics-algorithm-with-constraints-on-joint-angles
- "Real-Time 3d Robotics UI (Python)"
- https://coreykruger.wordpress.com/programming-and-scripting/462-2/
- "Anand's blog - GPGPU In Android: Load a texture with floats and read it back"
- https://www.anandmuralidhar.com/blog/tag/gpgpu/
- "Ray-Plane and Ray-Disk Intersection"
- https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-plane-and-ray-disk-intersection
- "Ray-Sphere Intersection"
- https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-sphere-intersection
3D inverse kinematics (cyclic coordinate descent), forward kinematics, rovolute joint constraints, prismatic joint constraints, end-effector orientation constraints, GPU ray tracing