Này, chúng ta hãy chậm lại một chút ở đây :) Vâng, đó là sự thật mà bạn nhận được ma trận bởi glGetFloatv(GL_MODELVIEW_MATRIX, ptr)
. .. Nhưng đó chắc chắn không phải là điều bạn nên làm ở đây!
Hãy để tôi giải thích:
Trong GLSL, được xây dựng trong các biến như gl_ModelViewProjectionMatrix
hoặc các chức năng như ftransform()
đang bị phản đối - đó là đúng, nhưng đó là chỉ vì toàn bộ ma trận chồng bị phản đối ở GL 3.x và bạn có nghĩa vụ phải sử dụng ngăn xếp ma trận của riêng bạn (hoặc sử dụng bất kỳ giải pháp nào khác, ngăn xếp ma trận hữu ích nhưng không bắt buộc!).
Nếu bạn vẫn đang sử dụng ngăn xếp ma trận, thì bạn đang dựa vào chức năng từ OpenGL 2.x hoặc 1.x. Đó là okay vì tất cả điều này vẫn được hỗ trợ trên card đồ họa hiện đại vì hồ sơ tương thích GL - nó là tốt để chuyển sang một phiên bản GL mới, nhưng bạn có thể ở lại với điều này cho bây giờ.
Nhưng nếu bạn đang sử dụng phiên bản OpenGL cũ hơn (với ngăn xếp ma trận), cũng sử dụng phiên bản GLSL cũ hơn. Hãy thử 1,2, vì các phiên bản cao hơn (bao gồm 1,5) được thiết kế tương thích với OpenGL3, nơi những thứ như ma trận chiếu hoặc ma trận modelview không còn tồn tại trong OpenGL và được mong đợi được chuyển một cách rõ ràng như các biến số tùy chỉnh, do người dùng định nghĩa uniform
.
Sự tương ứng giữa OpenGL và GLSL phiên bản đã từng là một chút khôn lanh (trước khi họ dọn dẹp các phiên bản đánh số để phù hợp), nhưng nó phải là nhiều hay ít tương tự như:
GL GLSL
4.1 - 4.1
4.0 - 4.0
3.3 - 3.3
3.2 - 1.5
3.1 - 1.4
3.0 - 1.3
2.x and lower - 1.2 and lower
Vì vậy, câu chuyện dài ngắn - đồng phục được tạo sẵn của trình đổ bóng không được chấp nhận vì chức năng tương ứng trong OpenGL cũng không còn được dùng nữa; hoặc sử dụng phiên bản OpenGL cao hơn hoặc phiên bản GLSL thấp hơn.
+1 Đó là một điểm tuyệt vời mà bạn đã nêu ra! – Stringer
Vì vậy, với ngăn xếp ma trận khấu hao, tôi không chắc chắn phương pháp tiếp cận mới nên là gì. Trong mã cũ của chúng tôi, chúng tôi đã áp dụng các phép biến đổi cho các đối tượng được lập trình và hiển thị từng đối tượng từ một hàm chung. Vì vậy, có vẻ như bây giờ để có được điều đó để làm việc tôi cần phải cập nhật ma trận modelView theo cách thủ công sau mỗi lần biến đổi. Mô hình mới để làm điều này là gì? – Nigel
Nếu bạn muốn một ngăn xếp ma trận trong GL3 +, hãy tạo một 'std :: vector' và truyền đối tượng ma trận trên cùng với 'glUniformMatrix4fv'. Bạn có thể có một vài trong số đó, và bạn có thể quyết định cách sử dụng từng cái trong các trình đổ bóng của mình. –
Kos