Làm cách nào để chuyển đổi chuyển động 2D (từ chuột) sang chuyển vị dọc theo trục 3d?


8

Tôi đang tạo một trình chỉnh sửa cảnh 3D nhỏ (chỉ cho phép sửa đổi vị trí của các đối tượng).

Mỗi đối tượng được vẽ với trục 3d X / Y / Z:

nhập mô tả hình ảnh ở đây

Cách thức hoạt động: người dùng chọn một trục (X, Y hoặc Z) bằng cách nhấp chuột trái vào nó, sau đó, trong khi giữ nhấp chuột trái, anh ta di chuyển chuột (để di chuyển đối tượng theo hướng trục). chọn đã ổn, nhưng tôi muốn biết how muchđối tượng nên được dịch cho trục đã chọn, tùy thuộc vào chuyển động của chuột 2D.

Ví dụ, trên hình ảnh này, việc chọn trục X và di chuyển chuột trái sang phải sẽ tạo ra sự dịch chuyển lớn hơn so với việc di chuyển nó xuống (gần như bằng không đối với cái này)

Nó phải thực sự đơn giản nhưng tôi không thể tìm ra nó.

Đầu vào phải là: dịch chuyển chuột kể từ lần nhấp chuột trái đầu tiên (vectơ 2D), vectơ trục được chọn (vectơ 3d), mô hình chiếu / ma trận chiếu.

Đầu ra: số lượng (float hoặc double)


Bạn có thể so sánh hướng người dùng đang di chuyển chuột so với đối tượng bằng cách so sánh hướng đối tượng với hướng camera.
MichaelHouse

Câu trả lời:


5

Bạn muốn điều này hành xử như thế nào? Có nhiều cách khác nhau để làm điều này.

Một tùy chọn đơn giản là chỉ di chuyển đối tượng theo một số đơn vị không gian thế giới cố định cho mỗi đơn vị không gian màn hình (pixel, giả sử) mà chuột di chuyển.

Một lựa chọn khác là lấy vectơ chuyển động của chuột và chiếu nó lên trục chuyển động thông qua ma trận chiếu / camera thông thường. Chiếu vectơ chuyển động của chuột thông qua chế độ xem ngược, hình chiếu và ma trận camera (cung cấp cho nó một Z ban đầu của khoảng cách mặt phẳng nhìn gần, bạn sẽ kết thúc bằng một phần bù trên mặt phẳng gần). Điều này cung cấp cho bạn các vector di chuyển chuột trong không gian thế giới. Chiếu vectơ lên ​​trục mong muốn. Điều này cung cấp cho bạn sự chuyển động trong không gian thế giới. Đối tượng sẽ di chuyển đến nơi người dùng chỉ, không phụ thuộc vào hướng của đối tượng. Nếu trục chủ yếu là dọc, cần phải di chuyển dọc để di chuyển nó.

Bạn cũng có thể chỉ lấy điểm bắt đầu và điểm kết thúc của chuột trong không gian màn hình, chiếu cả hai và từ đó tính toán vectơ chuyển động không gian thế giới. Tôi không, nhưng bạn có thể thấy rằng dễ dàng hơn.

Một lựa chọn khác là lấy sức mạnh của chuyển động chuột, do đó các chuyển động nhanh hơn gây ra độ lệch lớn hơn.

Sử dụng một biến thể của tùy chọn đầu tiên, bạn cũng có thể lấy con trỏ để người dùng có thể liên tục di chuyển chuột (nhặt nó lên và xuống). Điều đó đặc biệt phổ biến đối với điều khiển xoay và tỷ lệ.


Kỹ thuật thú vị. Dù sao, thật tuyệt nếu biết kỹ thuật RobCurr cũng hợp lệ (có vẻ như đối với tôi nhưng không có sự hạ thấp hay nâng cấp nào ...)
tigrou

Khi tôi đọc nó, anh ấy nói điều tương tự như một lựa chọn tôi liệt kê. Tính toán các điểm cuối được chiếu và tạo thành một vectơ trong không gian thế giới, chiếu nó lên trục mong muốn. Ông chỉ liệt kê một số toán khó hiểu cho phép chiếu vector.
Sean Middleditch

0

Tôi có thể sẽ chiếu các điểm cuối trục đã chọn vào không gian 2d, trừ chúng để tạo ra một vectơ 2d. Sau đó lấy sản phẩm chấm của vectơ chuẩn hóa của chuyển động chuột 2d với vectơ đầu tiên được chuẩn hóa để xác định phần chuyển động nên được áp dụng.

Về cơ bản, tính 2 vectơ:

Va = sự khác biệt chuẩn hóa của các điểm cuối trục được chiếu

Vb = vector chuẩn hóa được tạo từ chuyển động chuột delta x và y

Va.Vb = | Va | | Vb | cos @

Va.Vb / (| Va | Vb |) = cos @ - là thành phần của chuyển động chuột nên được áp dụng dọc theo trục.

Chỉ là một lựa chọn khác.

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.