Tôi có một đối tượng mà trước tiên tôi muốn xoay (về trung tâm riêng của nó) sau đó dịch nó sang một số điểm. Tôi có một glm :: quat giữ quay và một glm :: vec3 giữ điểm mà nó cần phải được dịch.glm kết hợp xoay và dịch
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Sau đó, tại chức năng tôi làm làm cho tôi ..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
..và làm ...
Thật không may là đối tượng chỉ quỹ đạo xung quanh nguồn gốc khi tôi áp dụng một vòng quay (càng xa "vị trí" từ gốc, quỹ đạo càng lớn).
Khi tôi chỉ áp dụng vị trí nó dịch tốt. Khi tôi chỉ áp dụng vòng quay nó vẫn ở gốc và quay về trung tâm của nó (như mong đợi). Vì vậy, tại sao nó đi lạ khi tôi áp dụng cả hai? Tôi thiếu một cái gì đó cơ bản?
Tôi đã ấn tượng rằng glm :: dịch áp dụng bản dịch cho đối số thứ nhất của hàm. Cảm ơn bạn. – Jubei
@Jubei: Nó * * áp dụng bản dịch cho ma trận. Nó phải nhân nó. Điều đó có nghĩa là bản dịch xảy ra * đầu tiên *, khi bạn muốn xoay vòng xảy ra trước tiên. –
Cảm ơn câu trả lời này, tôi đã bị mắc kẹt trong một thời gian hôm nay, nhưng mặc dù tôi đã tìm ra những gì tôi đã làm sai Tôi chỉ đơn giản là không thể tìm thấy bất kỳ xác nhận rằng đây là cách các chức năng được cho là làm việc. –