Nhận độ dài vectơ với GLM


14

Tôi khá bối rối về cách thư viện GLM hoạt động hoặc tôi đang sử dụng nó không đúng cách.

glm::vec2 testVec(6,-4);

float len = testVec.length();

Tôi nhận được giá trị 2với đoạn mã trên. Tôi tin rằng tôi đang cố gắng để có được độ dài của vectơ được xác định bởi testVec. Bạn biết rất rõ rằng nó không phải là độ dài chính xác của vectơ. Tôi đang thiếu gì ở đây?

Câu trả lời:


14

Xin lỗi mọi người vì đã đăng một vấn đề tầm thường như vậy! Vấn đề được giải quyết. Tôi đã sử dụng chức năng sai. Đây là một trong những chính xác:

glm::vec2 testVec(6,-4);
float len  = glm::length(testVec);

Hàm thành viên cùng tên trả về số lượng thành phần thay vào đó (nghĩa là vec2::lengthsẽ luôn mang lại 2, vec3::lengthsẽ luôn luôn mang lại 3, v.v.).


7
Đừng xin lỗi, tôi nghĩ đó là một câu hỏi công bằng, vì việc đặt tên chức năng của GLM khá sai lệch ở đây. Tôi hy vọng điều này có thể là một tài liệu tham khảo hữu ích (và súc tích) trong tương lai.
Martin Ender

2
@MartinEnder không phải GLM là người có tội: thông số GLSL quy định sự nhầm lẫn này tồn tại: có length(vecN)chức năng miễn phí trả về định mức vecNvecN.length()phương thức, trả về thứ nguyên của vecN. Xem §5.5 Thành phần vectơ và vô hướng và chiều dài của thông số GLSL 4.60.
Ruslan
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.