Tôi tìm thấy một tấn công thức và những gì không, nhưng 3D không phải là sở trường của tôi vì vậy tôi đang mất đi những gì cụ thể để sử dụng. Mục tiêu của tôi là chuyển đổi dữ liệu trong tệp .obj 3D (đỉnh, tiêu chuẩn, khuôn mặt) thành CSS3D (chiều rộng, chiều cao, xoayX, Y, Z và/hoặc biến đổi tương tự).Chuyển đổi dữ liệu OBJ sang CSS3D
Ví dụ 2 máy bay đơn giản
g plane1
# simple along along Z axis
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 1.0
v 0.0 1.0 0.0
g plane2
# plane rotated 90 degrees along Y-axis
v 0.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
v 1.0 0.0 0.0
f 1 2 3 4
f 5 6 7 8
dữ liệu này có thể được chuyển đổi sang:
#plane1 {
width: X;
height: Y;
transform: rotateX(Xdeg) rotateY(Ydeg) rotateZ(Zdeg) translateZ(Zpx)
}
#plane2 {
width: X;
height: Y;
transform: rotateX(Xdeg) rotateY(Ydeg) rotateZ(Zdeg) translateZ(Zpx)
}
/* Or something equivalent such as transform: matrix3d() */
Câu hỏi cốt lõi là làm thế nào để có được X/Y/Z-quay của một chiếc máy bay 4 điểm từ ma trận của x, y, z tọa độ?
CẬP NHẬT # 1 - 11/12/12 Vì vậy, dựa trên các câu trả lời cung cấp, tôi đã đi qua các chức năng được tối ưu hóa từ http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToEuler/index.htm dưới đây:
/*
-v 0.940148 -0.847439 -1.052535
-v 0.940148 -0.847439 0.947465
-v -1.059852 -0.847439 0.947465
-v -1.059852 -0.847439 -1.052535
-v 0.940148 1.152561 -1.052534
-v 0.940147 1.152561 0.947466
-v -1.059852 1.152561 0.947465
v -1.059852 1.152561 -1.052535
f 1 2 3 4
f 5 8 7 6
f 1 5 6 2
f 2 6 7 3
f 3 7 8 4
f 5 1 4 8
*/
var f = {
'm00' : 0.940148,
'm01' : -0.847439,
'm02' : -1.052535,
'm10' : 0.940148,
'm11' : -0.847439,
'm12' : 0.947465,
'm20' : -1.059852,
'm21' : -0.847439,
'm22' : 0.947465
}
// Assuming the angles are in radians.
if (f.m10 > 0.998) { // singularity at north pole
heading = Math.atan2(f.m02, f.m22);
attitude = Math.PI/2;
bank = 0;
} else if (f.m10 < -0.998) { // singularity at south pole
heading = Math.atan2(f.m02,f.m22);
attitude = -Math.PI/2;
bank = 0;
} else {
heading = Math.atan2(-f.m20, f.m00);
bank = Math.atan2(-f.m12, f.m11);
attitude = Math.asin(f.m10);
}
tôi nhận được kết quả, nhưng tôi 'không chắc chắn nếu tính toán của tôi là chính xác và tôi cũng nhận được phản ứng hỗn hợp về những gì tương ứng với trục nào. Có phải là tiêu đề = y, ngân hàng = x và thái độ = z không? Tôi cũng chuyển đổi từng độ nếu điều đó quan trọng.
thể trùng lặp của Matrix để Góc Euler: http://stackoverflow.com/ câu hỏi/11137591/ma trận-to-eulerangles – FlavorScape
Bạn có đo lường hiệu suất không? Tạo điểm chuẩn với số lượng biến đổi css3d mong muốn dựa trên giá trị đầu vào ngẫu nhiên.Nếu nó sẽ tụt hậu trên máy đích thì công việc của bạn sẽ lãng phí thời gian. Tệp obj trung bình chứa số lượng khuôn mặt khổng lồ. – JAre
Đó không phải là vấn đề về hiệu suất. Nó đi xuống để trống không chính xác toán học về phía tôi. Các tệp OBJ đang được sử dụng đang được tạo đặc biệt với CSS3D trong tâm trí để chúng sẽ có một số lượng tối đa các đa giác. –