2012-03-25 31 views
7

Có lẽ tôi chỉ thiếu một cái gì đó trong tài liệu, nhưng có vẻ như nó không thể với GLM để chuyển đổi của một vector. Tôi cũng không thấy các loại mat3x1 hoặc mat1x3. Ngoài ra glm :: transpose không hoạt động cho vectơ. Tôi có thiếu cái gì đó hay đây chỉ là một tính năng thiếu GLM?GLM: Làm thế nào để chuyển đổi một vector?

Trả lời

8

GLM dựa trên GLSL, nơi đơn giản là không cần phải chuyển đổi vectơ. Nếu bạn thực hiện phép nhân vectơ/ma trận, nó sẽ nhân vectơ theo cách hoạt động với kích thước của ma trận (trừ khi nó sẽ phải thay đổi thứ tự của phép nhân). Vì vậy, nếu bạn có mat4 và làm mat4*vec4, vec4 của bạn được coi là một vectơ cột. Nếu bạn làm vec4*mat4, nó được coi là một vectơ hàng. Nếu bạn làm mat2x4*vec4, bạn gặp lỗi, trong khi vec4*mat2x4 hoạt động (dưới dạng vectơ hàng).

Vì vậy, nói chung, không có lý do gì để cần "chuyển vị" một vectơ. Hệ thống chỉ đơn giản làm bất cứ điều gì hoạt động.

+0

tôi thấy đấy, tôi nghĩ đó là điều tôi không hiểu. Cảm ơn bạn. – aeskreis

+0

Nếu bạn muốn tính toán một cái gì đó như v * transpose (v) trong đó v là vec4. Những gì tôi muốn là một mat4 như là một kết quả. I E. nhân một 4x1 và 1x4 để có được một 4x4. Tôi không thấy làm thế nào để làm điều đó trong GLM. Có thể bạn không thể? – Chuck

+0

@Chuck: Vâng, đó có thể là vì nó không phải là một hoạt động rất hữu ích. Bên cạnh đó, bạn có thể tự mình làm toán cho mình một cách dễ dàng; nó chỉ nhân đôi theo từng nhân tố của vectơ. –

3

Là một tài liệu tham khảo cho những người tìm kiếm làm thế nào để transpose một vector (chủ yếu để tính sản phẩm bên ngoài - u vT) trong GLSL/GLM; của nó:

glm::core::function::matrix::outerProduct(u, v) 

liên kết GLM Nicol bây giờ 404s là các liên kết API của họ đã thay đổi định dạng từ:

Các vấn đề liên quan