Thay đổi hệ tọa độ từ Z-up sang Y-up


8

Hệ tọa độ của Blender khác với hệ thống tọa độ của tôi, trong đó Z chỉ lên trên thay vì Y. Cách đơn giản nhất để chuyển đổi tất cả dữ liệu thế giới (để tất cả hoạt ảnh, tọa độ kết cấu, v.v. vẫn hoạt động) chỉ lên trên?

Làm rõ:

Vị trí đối tượng được định nghĩa là ma trận, vì vậy chỉ cần chuyển đổi thông tin dịch / xoay / tỷ lệ trong ma trận không phải là một nhiệm vụ tầm thường. (ít nhất nó dường như không phải là một nhiệm vụ tầm thường đối với tôi)


Tôi có thiếu thứ gì không, hay bạn chỉ có thể chuyển đổi các hợp âm Z và các hợp đồng Y?
Vịt Cộng sản

Đã thêm làm rõ cho câu hỏi.
Jari Komppa

Không phải là một ma trận vị trí đối tượng chỉ là một ma trận cột 1x4? Vì vậy, nó sẽ không dễ dàng để chuyển đổi các yếu tố? Tôi đã bao gồm các ma trận, nhưng không phải trong các điều khoản cụ thể của gamedev. : p
Vịt Cộng sản

Đây là các ma trận 4x4 phẳng với dịch, xoay và tỷ lệ được áp dụng.
Jari Komppa

1
Nếu bạn đang witing script python của riêng bạn, bạn có thể sử dụng bpy_extras.io_utils.axis_conversion (xem: blender.org/documentation/blender_python_api_2_66a_release/... ). Afaik, hỗ trợ cho các hệ thống tọa độ 'non Z up' trong máy xay sinh tố đã được lên kế hoạch, nhưng đến nay (2.66a) vẫn chưa được triển khai.
Exilyth

Câu trả lời:


2

Tại sao bạn không thể tạo ma trận xoay để định hướng chính xác phần đầu tiên của ma trận Thế giới?

Nếu bạn muốn sửa nó khi tải, hãy tạo ma trận xoay để định hướng chính xác (tức là 90 độ quanh trục X). Áp dụng điều này cho tất cả các đỉnh, sau đó thay đổi tất cả các ma trận hiện có thành (xoay * hiện có).


Điều này có thể hoạt động - áp dụng ma trận xoay 90 'cho mọi thứ tại thời điểm xuất.
Jari Komppa

Chà, tôi đã hỏi cách đơn giản nhất ..
Jari Komppa

7

Hãy từ chối tôi nếu tôi sai, nhưng tôi không hiểu tại sao mọi người lại khuyên bạn nên đổi y và z. Điều đó sẽ làm cho hệ thống tọa độ của bạn từ tay phải sang tay trái. Hãy tự thử, hoán đổi y và z và định hướng lại trục sao cho x đúng và y chỉ lên. Bạn sẽ thấy z chỉ hướng ngược lại so với ban đầu (cách xa màn hình). Cách thích hợp là xoay quanh trục x, hoán đổi y và z, sau đó đảo ngược dấu của z cuối cùng.

Tôi nghĩ rằng giải pháp dễ dàng hơn là xây dựng các mô hình của bạn với giá trị y được tăng lên.


1
Bây giờ, làm thế nào để sửa các ma trận sao cho "dấu của z cuối cùng" bị đảo ngược ..
Jari Komppa

1
Bạn không muốn sửa ma trận của mình, bạn muốn sửa dữ liệu của mình, đó là áp dụng phép chuyển đổi khi bạn đọc dữ liệu mô hình.
5 giờ

1
Nhưng dữ liệu hoạt hình được lưu trữ dưới dạng ma trận, vì vậy chúng sẽ di chuyển sai hướng. Vì vậy, các đối tượng chỉ đúng hướng, nhưng hình ảnh động sẽ không.
Jari Komppa

5

Như đồng chí Duck gợi ý, bạn chỉ có thể trao đổi Y và Z. Nếu bạn cần một ma trận để làm điều đó, hãy sử dụng cái này:

| 1 0 0 |
| 0 0 1 |
| 0 1 0 |

hoặc trong tọa độ đồng nhất

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |

1

Nếu ma trận của bạn là:

x
y
z
w

Vậy thì tại sao không:

temp = y
y = z
z = temp

Hoặc bất cứ phương pháp trao đổi nào bạn muốn.


0

Khi bạn tải các mắt lưới của mình với bất kỳ mã trình tải lưới nào bạn đang sử dụng, chỉ cần chuyển đổi các giá trị Z và Y. Lưới sau đó sẽ được tải trong trò chơi của bạn trong không gian tọa độ thích hợp và bạn có thể làm bất cứ điều gì bạn muốn với nó (áp dụng xoay, dịch, v.v.). Đó là một tình huống tương tự tôi đã có với 3DS Max.


1
Giống như tôi đã nhận xét, hình ảnh động bị vặn lên.
Jari Komppa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.