Tôi đang làm việc trên một vấn đề về thị lực máy tính đòi hỏi phải vẽ một mô hình 3D bằng cách sử dụng máy ảnh được hiệu chỉnh. Tôi đang viết một chức năng phá vỡ ma trận máy ảnh đã hiệu chuẩn thành ma trận modelview và ma trận chiếu, nhưng tôi đã chạy vào một hiện tượng thú vị trong opengl mà bất chấp sự giải thích (ít nhất là bởi tôi).Tại sao ký hiệu trong ma trận chiếu opengl
Mô tả ngắn gọn là phủ nhận ma trận chiếu dẫn đến kết quả không có gì được hiển thị (ít nhất là theo kinh nghiệm của tôi). Tôi hy vọng rằng nhân ma trận chiếu bằng bất kỳ vô hướng nào sẽ không có hiệu lực, bởi vì nó biến đổi các tọa độ thuần nhất, không bị ảnh hưởng bởi việc nhân rộng.
Dưới đây là lý do tại sao tôi thấy điều này là bất ngờ; có lẽ ai đó có thể chỉ ra nơi mà lý luận của tôi là thiếu sót.
Hãy tưởng tượng ma trận chiếu quan điểm sau đây, mà sẽ cho kết quả chính xác:
[ a b c 0 ]
P = [ 0 d e 0 ]
[ 0 0 f g ]
[ 0 0 h 0 ]
Nhân này bằng camera phối cho đoạn đồng nhất phối:
[x_c] [ a b c 0 ] [X_e]
[y_c] = [ 0 d e 0 ] * [Y_e]
[z_c] [ 0 0 f g ] [Z_e]
[w_c] [ 0 0 h 0 ] [W_e]
Cuối cùng, để có được tọa độ thiết bị bình thường, chúng tôi chia x_c, y_c và z_c theo w_c:
[x_n] [x_c/w_c]
[y_n] = [y_c/w_c]
[z_n] [z_c/w_c]
Bây giờ, nếu chúng ta phủ định P, tọa độ clip kết quả sẽ bị loại bỏ, nhưng vì chúng là các tọa độ đồng nhất, nhân với bất kỳ vô hướng nào (ví dụ: -1) sẽ không ảnh hưởng đến tọa độ thiết bị chuẩn hóa. Tuy nhiên, trong openGl, phủ nhận kết quả P không có gì được hiển thị. Tôi có thể nhân P với bất kỳ vô hướng âm nào và nhận được kết quả tương tự chính xác, nhưng ngay sau khi nhân với một vô hướng âm, không có gì ám. Chuyện gì đang xảy ra ở đây??
Cảm ơn!
Câu trả lời hay! Tôi cho rằng thử nghiệm cắt sẽ là: -1