Tôi đang cố gắng tạo ra một hệ thống hạt trong OpenGL và do đó tôi cần sử dụng biển quảng cáo.
Tôi cần những biển quảng cáo này để đối mặt với máy ảnh mọi lúc.
Các hướng dẫn mà tôi đã theo dõi chỉ xoay bảng quảng cáo trên 1 trục, chẳng hạn như biển quảng cáo được sử dụng làm cỏ hoặc cây, nhưng tôi cần một phương pháp xoay hình tứ giác để luôn đối diện với máy ảnh, ngay cả khi nhìn xuống.
Trong khi tìm kiếm câu trả lời, tôi chỉ thực sự tìm thấy kỹ thuật biến thành phần mat3 của ma trận chế độ xem / mô hình của máy ảnh thành ma trận nhận dạng. Đây không phải là thứ tôi cần, vì vị trí của điểm trong không gian không bao giờ thay đổi.
Làm cách nào tôi có thể tính toán một ma trận xoay mới sẽ xoay thành công một hình tứ giác về phía máy ảnh hoặc sửa đổi một ma trận hiện có?
Trong trình tạo bóng hình học, tôi có quyền truy cập vào vị trí của máy ảnh, ma trận phối cảnh và ma trận chế độ xem / mô hình.
Tôi đã không bao gồm bất kỳ mã shader nào vì nó thực sự tầm thường; Tôi tạo các đỉnh là phần bù của vị trí của điểm mong muốn dựa trên kích thước mong muốn. Vì vậy, nếu hình tứ giác phải là 50 x 50, thì đỉnh là vị trí bù 25 trên X và Y, nhân với ma trận Phối cảnh x của máy ảnh.
Giải pháp:
mat4 VP = pMatrix * vMatrix;
vec3 CameraRight = vec3(vMatrix[0][0], vMatrix[1][0], vMatrix[2][0]);
vec3 CameraUp = vec3(vMatrix[0][1], vMatrix[1][1], vMatrix[2][1]);
vec3 Pos = gl_in[0].gl_Position.xyz; // The desired point for the billboard
vec4 v1 = VP * vec4(Pos + CameraRight * 0.5 * Size + CameraUp * -0.5 * Size, 1.0);
vec4 v2 = VP * vec4(Pos + CameraRight * 0.5 * Size + CameraUp * 0.5 * Size, 1.0);
vec4 v3 = VP * vec4(Pos + CameraRight * -0.5 * Size + CameraUp * -0.5 * Size, 1.0);
vec4 v4 = VP * vec4(Pos + CameraRight * -0.5 * Size + CameraUp * 0.5 * Size, 1.0);