게임에서 3D 스켈 레탈 애니메이션을 만드는 데 며칠 동안 노력했습니다. 나는 LWJGL과 함께 Java를 사용하고있다.스켈 레탈 애니메이션 : 바인드 포즈
애니메이션을 시도하기도 전에 프로그램에서 바인드 포즈를 얻으려고합니다. 블렌더에서 내보내는 콜라다 파일의 정보를로드합니다. 내 골격의 각 관절 : 나는 현재이 모든 내 게임에로드 한
- 지역 매트릭스 (또한 공동 매트릭스 내 생각)
- 역 바인드 모양 매트릭스
- 부모 공동
- 그 자식
골격이 aswell 루트 공동 모든 관절의 목록이 포함 된 계층 구조입니다 목록입니다. 또한 바인드 모양 행렬과 다른 행렬을 사용하고 있습니다.
각 스키닝 정보를 각 모델 (boneID 및 해당 가중치)에 대한 VBO로로드합니다.
인터넷에서 물건을 스키닝하는 것에 대해 많이 읽었지만 완전히 잃어 버렸습니다. 나는이 모든 매트릭스와 물건들로 무엇을해야하는지 잘 모른다. 여기
, 나는 그것이 괜찮아 확신 내가 내 현재의 정점 셰이더가 있습니다 : 여기
const int MAX_BONES = 32;
in ivec4 boneIDs;
in vec4 boneWeights;
uniform mat4 boneTransforms[MAX_BONES];
void main(void) {
mat4 boneTransform = boneTransforms[boneIDs[0]] * boneWeights[0];
boneTransform += boneTransforms[boneIDs[1]] * boneWeights[1];
boneTransform += boneTransforms[boneIDs[2]] * boneWeights[2];
boneTransform += boneTransforms[boneIDs[3]] * boneWeights[3];
vec4 worldPosition = transformationMatrix * boneTransform * vec4(position, 1.0);
…
내 문제는 내가 행렬의 배열해야 모르는 것입니다. 나는 콜라다 파일에서 얻은 스키닝 정보에서로드 된 많은 수의 행렬을 가지고 있지만 그 관계가 무엇인지 함께 알지 못합니다.
나는 성공하지 않고 몇 가지 시도했다. 내 모델이 어떻게 보이는지, 그리고 현재 오른쪽에 보이는 것과 같은 그림이 있습니다. 쉐이더에 boneTransforms 배열에 포함
행렬들은 (I 스키닝 매트릭스 호출 것)은 다음과 같다 : 조인트
skinningMatrix = parentJoint.localMatrix * localMatrix * inverseBindShapeMatrix
인터넷에서이 작은 수식을 발견 했으므로 괜찮은지 모르지만 실제로는 잘 작동하지 않습니다.