Cách dễ nhất để triển khai Camera người thứ 3 trong C ++ / DirectX9 là gì


8

Tôi khá mới với C ++ và DirectX9 và tôi muốn triển khai Máy ảnh Người thứ ba. Sau khi đọc một số máy ảnh dựa trên Quancyion, tôi quyết định thử triển khai nó. Nhưng nó thực sự làm tôi suy nghĩ, vì vậy tôi hỏi ở đây cách dễ nhất để triển khai TP-Camera là gì?

Dưới đây là những điều mà Camera nên làm:

  • Theo dõi tọa độ được lưu trữ trong 3DVector (x, y, z)

  • Xoay quanh đối tượng (Mịn)

  • Có thể một số loại 'lò xo' = Di chuyển chậm về Pos bình thường phía sau Vật thể sau khi Xoay

Xin lỗi vì tiếng Anh không tốt của tôi: Tôi là người Đức và vẫn còn đi học!

Cảm ơn trước!

BIÊN TẬP:

Sau khi thử, tôi đã hiểu.

Vấn đề lớn nhất mà tôi đã xem xét là việc trích xuất đúng "Vector" hướng từ Ma trận Thế giới.

Trong quá trình nghiên cứu của tôi, tôi đã tìm thấy hầu hết những thứ như thế này:

D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);

Điều đó KHÔNG làm việc cho tôi! Thay vào đó tôi đã làm điều này:

D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);

Để nhân rộng:

// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);

Đặt vị trí:

cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;

Đối với Xoay, bạn nên tạo Ma trận thế giới tạm thời (từ vị trí của mục tiêu) và xoay theo cách bạn muốn và trích xuất hướng.

The Smoothing of the Rotation thực sự phụ thuộc vào trò chơi CỦA BẠN!

Loại máy ảnh người thứ 3 này thực sự dễ làm và nó hoạt động được!

Thực sự TUYỆT VỜI nhờ "jheriko", người đã cho tôi câu trả lời đúng!


+1 để thực sự mô tả những gì bạn cần, điều đó rất hiếm (mặc dù nó có thể chi tiết hơn, ví dụ như điểm thứ 3 gây nhầm lẫn - không phải bạn đang ám chỉ rằng nó đang quay tự do sao?).
wonderra

Vâng, nó sẽ xoay tự do nhưng tôi muốn nó quay chậm trở lại Điểm ở phía sau của người chơi sau khi Xoay xong!
Ẩn danh nặc danh

Câu trả lời:


1

Điều gì sẽ giúp bạn có ma trận biến đổi cho đối tượng bạn muốn theo dõi. Bạn có thể trích xuất vectơ foward từ ma trận này - tùy thuộc vào hệ tọa độ và độ truyền ma trận của bạn, đây sẽ là một trong các hàng hoặc cột có thành phần thứ 4 bị xóa (giả sử bạn sử dụng ma trận biến đổi 4 x 4, không có yếu tố tỷ lệ - các yếu tố tỷ lệ là khủng khiếp đối với nhiều lý do ... nhưng nếu bạn có các yếu tố tỷ lệ, bạn có thể bình thường hóa hàng / cột sau khi xóa thành phần thứ 4.)

Một khi bạn có điều này, bạn có thể định vị máy ảnh ngay phía sau đối tượng bằng cách trừ điều này khỏi vị trí đối tượng. Để di chuyển máy ảnh vào và ra, bạn có thể chia tỷ lệ vectơ và để xoay quanh đối tượng, bạn có thể thực hiện xoay x và y (hoặc xz / zy, v.v. tùy thuộc vào độ thuận tay, v.v.) mà bạn áp dụng cho một bản sao của ma trận đối tượng trước khi trích xuất hướng chuyển tiếp.

Cuối cùng, để làm mượt chuyển động, giải pháp đơn giản nhất là theo dõi phần bù và góc trước đó và lerp về phía chúng bằng một số lượng phụ thuộc khung hình được mô tả bởi a ^ (b.dt) trong đó dt là thời gian delta và a, b là các tham số bạn chọn. a = 0,9 và b = 30 mang lại cho bạn hiệu ứng di chuyển 90% về phía vị trí như thể bạn đang thực hiện mọi khung hình ở 30 khung hình / giây. đây được gọi là bộ lọc 'đáp ứng xung vô hạn' và là một cách hack cổ điển cho kiểu làm mịn này.

điều này có thể không lý tưởng, bạn có thể muốn chọn một khoảng cách tối thiểu và hạn chế các góc quá, nếu không máy ảnh có thể đi qua đối tượng. nếu bạn ở trong một thế giới dày đặc, việc chống lại hoặc làm mờ dần các vật thể can thiệp cũng sẽ trở nên quan trọng.

xin lỗi điều này là lâu, nhưng nó không phải là một vấn đề nhỏ, như bạn dường như đã phát hiện ra.

hi vọng điêu nay co ich. tôi có thể cung cấp thêm độ sâu của chi tiết nếu cần thiết.

(ps không có quan điểm cần thiết - họ thực sự không giúp đỡ cho vấn đề này)


Cảm ơn rât nhiều! Bạn đã cho tôi một số ý tưởng làm thế nào để làm điều này. Nhưng tôi sẽ đánh giá cao một số ví dụ về Mã, nếu bạn không phiền. Và tại sao không sử dụng tứ phương? Tôi đọc rằng chúng thường được sử dụng để làm loại công cụ này ( en.wikipedia.org/wiki/Qu Parention ).
Ẩn danh nặc danh

Đã thử làm nó như bạn mô tả, nhưng vẫn có một số vấn đề. Máy ảnh không ở phía sau của Người chơi một cách ngớ ngẩn, nhưng ít nhất là ở đâu đó bên cạnh anh ta! Tôi không hiểu phần quay của X và Y: Nên xoay cái gì? Ma trận thế giới, vectơ chỉ đường hay bản sao của vectơ vị trí người chơi? Và xoay như thế nào? Hy vọng bạn có thể giúp tôi!
Ẩn danh nặc danh

bạn xoay vectơ chỉ hướng hoặc ma trận bạn trích xuất từ ​​(ma trận biến đổi của đối tượng, không phải ma trận thế giới hoặc ma trận) để xoay bạn xây dựng ma trận xoay góc trục và nhân chúng, hoặc sử dụng lượng giác ...
jheriko
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.