void Decompressor::viewFrame() { skinningProg.bind(); skinningProg.uniform("worldProxyJoints", frames.first[currentFrame], MaxProxyJoints); skinningProg.uniform("worldProxyJointsT", frames.second[currentFrame], MaxProxyJoints); skinningProg.unbind(); #ifdef GPUDEBUG std::vector<Vec3f> debugPosBuffer; for (int i=0; i<debugPoints.size(); i++) { if (currentFrame == 0) { debugPosBuffer.push_back(debugPoints[i]); } else { Vec3f pos = debugPoints[i] * (1-debugpjws[i][0]-debugpjws[i][1]-debugpjws[i][2]-debugpjws[i][3]); for (int j=0; j<4; j++) { Matrix33f& pjm = frames.first[currentFrame][(int)(debugpjis[i][j])]; Vec3f& pjv = frames.second[currentFrame][(int)(debugpjis[i][j])]; Matrix44f mat; mat.setColumn(0, Vec4f(pjm.at(0, 0), pjm.at(1, 0), pjm.at(2, 0), 0)); mat.setColumn(1, Vec4f(pjm.at(0, 1), pjm.at(1, 1), pjm.at(2, 1), 0)); mat.setColumn(2, Vec4f(pjm.at(0, 2), pjm.at(1, 2), pjm.at(2, 2), 0)); mat.setColumn(3, Vec4f(pjv.x, pjv.y, pjv.z, 0)); Vec3f temp = mat.transformVec(debugPoints[i]); pos += temp * debugpjws[i][j]; } debugPosBuffer.push_back(pos); } } debugMesh->bufferPositions(debugPosBuffer); #endif }