+ glUniform1ui(glGetUniformLocation(pbrProg->progId, "numLights"), numLights);
+ glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightPositions"), numLights, glm::value_ptr(lightPositions[0]));
+ glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightColors"), numLights, glm::value_ptr(lightColors[0]));
+
+ glm::vec3 targetPos(sin(d) * 2 - 2, 2, 0);
+ Light targetLight = { glm::translate(glm::mat4(1), targetPos), {0.5, 1, 1} };
+ drawLight(targetLight);
+ inverseKinematic(*sceneModel->find("Bottom Bone"), *sceneModel->find("Toppest Bone"), targetPos);
+
+ /* std::array<glm::vec3, 3> jointPositions; std::array<float, 2> jointDistances; */
+
+ /* std::array<std::string, 3> jointNames = { "Bottom Bone", "Middle Bone", "Top Bone" }; */
+ /* for (int i = 0; i < 3; i++) { */
+ /* glm::mat4 trans; */
+ /* findNodeTrans(&sceneModel->getRoot()->ai, aiString(jointNames[i]), &trans); */
+ /* jointPositions[i] = glm::vec3(trans[3]); */
+
+ /* if (i > 0) */
+ /* jointDistances[i - 1] = glm::distance(jointPositions[i], jointPositions[i - 1]); */
+ /* } */
+
+ /* glm::vec3 targetPos(sin(d * 10.f), cos(d * 10.f), 0); */
+ /* auto newPositions = fabrik(targetPos, jointPositions, jointDistances); */
+
+ /* for (int i = 0; i < 3; i++) { */
+ /* glm::mat4 absTrans(1); */
+ /* findNodeTrans(&sceneModel->getRoot()->ai, aiString(jointNames[i]), */
+ /* &absTrans); */
+ /* glm::mat4 newAbsTrans = absTrans; */
+ /* newAbsTrans[3] = glm::vec4(newPositions[i], newAbsTrans[3][3]); */
+
+ /* auto node = sceneModel->getRoot()->ai.FindNode(jointNames[i].c_str()); */
+
+ /* auto newTrans = worldSpaceToModelSpace(node->mParent, newAbsTrans); */
+
+ /* node->mTransformation = mat4ToaiMatrix(newTrans); */
+ /* } */
+ /* sceneModel->find("Top Bone")->transform = glm::rotate(glm::mat4(1), d / 5.f, { 1, 0, 0}); */
+ /* sceneModel->find("Bottom Bone")->transform = glm::rotate(glm::mat4(1), d / 3.f, { 1, 0, 0}); */