Sử dụng định dạng .x để xuất mô hình từ Blender, tôi có thể tải lưới, phần ứng và hình động. Tôi không có vấn đề gì khi tạo lưới và xem các mô hình trong trò chơi. Ngoài ra, tôi có hình ảnh động và phần ứng được tải đúng vào cấu trúc dữ liệu phù hợp.
Vấn đề của tôi là áp dụng đúng các hình ảnh động cho các mô hình. Tôi có khung để áp dụng các mô hình và mã để chọn hình động và bước qua các khung.
Theo những gì tôi hiểu, các AnimationKey
s bên trong AnimationSet
cung cấp các phép biến đổi để biến đổi tư thế liên kết thành tư thế trong khung hình động. Ví dụ nhỏ:
Animation {
{Armature_001_Bone}
AnimationKey {
2; //Position
121; //number of frames
0;3; 0.000000, 0.000000, 0.000000;;,
1;3; 0.000000, 0.000000, 0.005524;;,
2;3; 0.000000, 0.000000, 0.022217;;,
...
}
AnimationKey {
0; //Quaternion Rotation
121;
0;4; -0.707107, 0.707107, 0.000000, 0.000000;;,
1;4; -0.697332, 0.697332, 0.015710, 0.015710;;,
2;4; -0.684805, 0.684805, 0.035442, 0.035442;;,
...
}
AnimationKey {
1; //Scale
121;
0;3; 1.000000, 1.000000, 1.000000;;,
1;3; 1.000000, 1.000000, 1.000000;;,
2;3; 1.000000, 1.000000, 1.000000;;,
...
}
}
Vì vậy, để áp dụng khung 2, tôi sẽ lấy vị trí, góc quay và tỷ lệ từ khung 2, tạo ma trận biến đổi (gọi nó Transform_A
) từ chúng và áp dụng ma trận đó các đỉnh được điều khiển bởi Armature_001_Bone
trọng số của chúng. Vì vậy, tôi sẽ nhét TransformA
vào shader của mình và biến đổi đỉnh. Cái gì đó như:
vertexPos = vertexPos * bones[ int(bfs_BoneIndices.x) ] * bfs_BoneWeights.x;
Trong đó bfs_BoneIndices
và bfs_BoneWeights
là các giá trị cụ thể cho đỉnh hiện tại.
Khi tải trong các đỉnh lưới, tôi biến đổi chúng theo rootTransform
và meshTransform
. Điều này đảm bảo chúng được định hướng và thu nhỏ chính xác để xem tư thế liên kết.
Vấn đề là khi tôi tạo ma trận biến đổi đó (sử dụng vị trí, góc quay và tỷ lệ từ hình ảnh động), nó không biến đổi đúng đỉnh. Có nhiều khả năng hơn là chỉ sử dụng dữ liệu hoạt hình. Tôi cũng đã thử áp dụng hệ thống phân cấp biến đổi xương, vẫn không có xúc xắc. Về cơ bản tôi kết thúc với một số mô hình xoắn. Cũng cần lưu ý rằng tôi đang làm việc trong openGL, do đó, bất kỳ ma trận chuyển vị nào có thể cần được áp dụng đều phải được xem xét.
Tôi cần dữ liệu gì và làm cách nào để kết hợp nó để áp dụng hoạt hình .x cho các mô hình?
Tôi đã thực hiện một số mô phỏng về việc này trông như thế nào, trong trường hợp điều đó hữu ích.
Đầu tiên tôi muốn thử nghiệm bản dịch, đây là một cái đầu bồng bềnh, trông giống như trong Blender:
http://i.stack.imgur.com/NAc4B.gif
Và nó trông như thế nào trong trò chơi (đừng bận tâm đến màu sắc):
http://i.stack.imgur.com/nj2du.gif
Sau đó, chỉ để xoay, hình ảnh động là đầu xoay 360 độ quanh trục thẳng đứng. Đây là những gì trông giống như trong trò chơi:
http://i.stack.imgur.com/gVyUW.gif
Lưu ý, không nên có độ nghiêng, chỉ xoay như vòng xoay vui vẻ.
Cập nhật
Tôi có một phần dịch của hoạt hình. Nhưng nó cảm thấy khó chịu và tôi không thấy làm thế nào để áp dụng nó vào vòng quay.
Bản dịch hoạt động bằng cách thực hiện các bước sau:
- Lấy vị trí từ khung hình động và trao đổi
y
vàz
các giá trị - Dịch ma trận biến đổi theo vị trí thay đổi
- Chuyển đổi ma trận biến đổi
- Áp dụng ma trận biến đổi cho các đỉnh
Vì vậy, đó là cách nó có thể hoạt động, nhưng làm thế nào để nó hoạt động chung cho vị trí, quy mô và luân chuyển?