Tôi đang tạo ứng dụng Android sử dụng OpenGL ES 2.0 và tôi đã chạy vào tường. Tôi đang cố gắng chuyển đổi tọa độ màn hình (nơi người dùng chạm) vào tọa độ thế giới. Tôi đã cố gắng đọc và chơi xung quanh với GLU.gluUnProject nhưng tôi hoặc là làm điều đó sai hoặc chỉ không hiểu nó.Màn hình Android OpenGL ES 2.0 tọa độ theo tọa độ thế giới
Đây là nỗ lực của tôi ....
public void getWorldFromScreen(float x, float y) {
int viewport[] = { 0, 0, width , height};
float startY = ((float) (height) - y);
float[] near = { 0.0f, 0.0f, 0.0f, 0.0f };
float[] far = { 0.0f, 0.0f, 0.0f, 0.0f };
float[] mv = new float[16];
Matrix.multiplyMM(mv, 0, mViewMatrix, 0, mModelMatrix, 0);
GLU.gluUnProject(x, startY, 0, mv, 0, mProjectionMatrix, 0, viewport, 0, near, 0);
GLU.gluUnProject(x, startY, 1, mv, 0, mProjectionMatrix, 0, viewport, 0, far, 0);
float nearX = near[0]/near[3];
float nearY = near[1]/near[3];
float nearZ = near[2]/near[3];
float farX = far[0]/far[3];
float farY = far[1]/far[3];
float farZ = far[2]/far[3];
}
Số Tôi nhận được dường như không đúng, đây là cách đúng đắn để sử dụng phương pháp này? Nó có hoạt động với OpenGL ES 2.0 không? Tôi có nên làm cho ma trận mô hình một ma trận nhận dạng trước khi tính toán này (Matrix.setIdentityM (mModelMatix, 0))?
Theo dõi, nếu điều này đúng, làm cách nào để chọn đầu ra Z? Về cơ bản, tôi luôn biết khoảng cách mà tôi muốn thế giới tọa độ, nhưng tham số Z trong GLU.gluUnProject dường như là một dạng nội suy nào đó giữa mặt phẳng gần và xa. Nó chỉ là một nội suy tuyến tính?
Cảm ơn trước
giải pháp của tôi là tất cả trong C++. Chỉ cần quét qua câu trả lời này, có vẻ đúng với tôi. Vì vậy, tôi sẽ không đăng câu trả lời. :] – TheBuzzSaw