Cố gắng trả lời nhận xét thích hợp của Natan, tôi đã xem xét một số điều có thể hữu ích để hiểu điều gì thực sự xảy ra khi bạn sử dụng các vectơ trong Không gian affine để biểu diễn các vectơ 3D trong Không gian Euclide tiêu chuẩn.
Đầu tiên tôi sẽ gọi vectơ bất cứ thứ gì có tọa độ, vì vậy một điểm và vectơ là cùng một thực thể; bạn có thể thấy một vectơ là điểm khác biệt của hai điểm: V = B - A ; V di chuyển
Một trong B vì A + V = A + B - A = B . Đặt A = 0 (gốc) và bạn sẽ nhận được V = B - 0 = B : điểm B và vectơ di chuyển 0đến B là điều tương tự.
Tôi sẽ gọi "vectơ" - theo nghĩa được sử dụng trong phần lớn các thư viện 3D - khi một vectơ của không gian affine có w = 0.
Ma trận được sử dụng vì chúng cho phép bạn biểu diễn một hàm tuyến tính ở dạng nhỏ gọn / thanh lịch / hiệu quả, nhưng các hàm tuyến tính có nhược điểm lớn là không thể chuyển đổi gốc: F ( 0 ) = 0 nếu F muốn là tuyến tính ( amog điều khác như F (λ X ) = F ( X ) và F ( A + B ) = F ( A ) + F ( B ))
Điều này có nghĩa là bạn không thể xây dựng một ma trận thực hiện dịch thuật vì bạn sẽ không bao giờ di chuyển vectơ 0 . Ở đây đi vào chơi không gian affine . Không gian affine thêm một chiều cho không gian euclide để có thể thực hiện traslantions với tỷ lệ và xoay.
Không gian Affine là một không gian chiếu theo nghĩa là bạn có thể xây dựng mối quan hệ tương đương giữa các vectơ Affine và Euclide để bạn có thể nhầm lẫn chúng (như chúng ta đã làm với các poin và vectơ). Tất cả các vectơ affine chiếu tới gốc tọa độ có cùng hướng có thể được xem là vectơ euclid giống nhau.
Điều này có nghĩa là tất cả các vectơ có cùng tỷ lệ trong tọa độ có thể được coi là tương đương:
Về mặt toán học:
tức là mọi vectơ affine có thể được giảm xuống thành phiên bản canon trong đó w = 1 (chúng tôi chọn trong số mọi vectơ tương đương mà vectơ chúng tôi thích nhất).
Trực quan (2D euclidean - 3D affine):
do đó, ý nghĩa của không gian "phóng chiếu" ; Bạn nên chú ý rằng ở đây không gian euclide là 2D (vùng màu lục lam)
Có một tập các vectơ affine cụ thể không thể đặt trong phiên bản chính tắc của chúng (một cách dễ dàng) một vectơ nằm trên mặt phẳng (hyper) w = 0.
Chúng tôi có thể hiển thị nó một cách trực quan:
những gì bạn (nên) nhìn thấy là trong khi w -> 0 thì vectơ chiếu vào không gian Euclide đi đến vô hạn nhưng đến vô hạn theo một hướng cụ thể .
Bây giờ rõ ràng rằng việc thêm hai vectơ trong không gian chiếu có thể dẫn đến các vấn đề khi bạn coi vectơ tổng là một vectơ được chiếu trong không gian euclide, điều này sẽ xuất hiện bởi vì bạn sẽ tổng hợp các thành phần W trong không gian affine và sau đó chiếu chúng vào mặt phẳng euclide (siêu).
Đây là lý do tại sao bạn chỉ có thể tính tổng "điểm" thành "vectơ" vì "vectơ" sẽ không thay đổi tọa độ w của "điểm", điều này chỉ đúng với "điểm" trong đó w = 1:
Như bạn thấy điểm màu xanh lá cây là điểm thu được khi thêm hai vectơ affine đại diện cho "điểm" màu lục lam và vectơ V " , nhưng nếu bạn áp dụng V cho mọi vectơ affine ở dạng khác nhau bởi canon, bạn sẽ thu được một kết quả sai ("điểm" "màu đỏ).
Bạn thấy rằng Không gian Affine không thể được sử dụng một cách minh bạch để mô tả hoạt động trên các Không gian Euclide và việc sử dụng sai thuật ngữ "vectơ" có ý nghĩa dưới sự ràng buộc (nghiêm ngặt) của các phép tính chỉ trên các vectơ chiếu chính .
Nói rằng, khá hợp lý khi nghĩ rằng GPU giả định rằng Vector4 phải có w = 0 hoặc w = 1, trừ khi bạn thực sự biết bạn đang làm gì.