如何在iphone GLKit 3d对象上检测触摸位置?
如果它在物体上? 在哪里?
我有从三角形构建的立方体,我需要知道触摸,即使它是在对象上,如果是这样的话
我的立方体:
const Vertex Vertices[] = {
// Front - red
{{1, -1, 1}, {0.89, 0, 0, 1}, {1, 0}},
{{1, 1, 1}, {0.89, 0, 0, 1}, {1, 1}},
{{-1, 1, 1}, {0.89, 0, 0, 1}, {0, 1}},
{{-1, -1, 1}, {0.89, 0, 0, 1}, {0, 0}},
// Back - green
{{1, 1, -1}, {0, 0.92, 0, 1}, {0, 1}},
{{-1, -1, -1}, {0, 0.92, 0, 1}, {1, 0}},
{{1, -1, -1}, {0, 0.92, 0, 1}, {0, 0}},
{{-1, 1, -1}, {0, 0.92, 0, 1}, {1, 1}},
// Left - yellow
{{-1, -1, 1}, {1, 0.92, 0, 1}, {1, 0}},
{{-1, 1, 1}, {1, 0.92, 0, 1}, {1, 1}},
{{-1, 1, -1}, {1, 0.92, 0, 1}, {0, 1}},
{{-1, -1, -1}, {1, 0.92, 0, 1}, {0, 0}},
// Right - blue
{{1, -1, -1}, {0, 0, 0.89, 1}, {1, 0}},
{{1, 1, -1}, {0, 0, 0.89, 1}, {1, 1}},
{{1, 1, 1}, {0, 0, 0.89, 1}, {0, 1}},
{{1, -1, 1}, {0, 0, 0.89, 1}, {0, 0}},
// Top
{{1, 1, 1}, {0.35, 0.35, 0.35, 1}, {1, 0}},
{{1, 1, -1}, {0.35, 0.35, 0.35, 1}, {1, 1}},
{{-1, 1, -1},{0.35, 0.35, 0.35, 1}, {0, 1}},
{{-1, 1, 1}, {0.35, 0.35, 0.35, 1}, {0, 0}},
// Bottom
{{1, -1, -1}, {0.35, 0.35, 0.35, 1}, {1, 0}},
{{1, -1, 1}, {0.35, 0.35, 0.35, 1}, {1, 1}},
{{-1, -1, 1}, {0.35, 0.35, 0.35, 1}, {0, 1}},
{{-1, -1, -1}, {0.35, 0.35, 0.35, 1}, {0, 0}}
};
const GLubyte Indices [] = { // 面前 0,1,2, 2,3,0, // 背部 4,6,5, 4,5,7, // 剩下 8,9,10, 10,11,8, // 对 12,13,14, 14,15,12, // 最佳 16,17,18, 18,19,16, //底部 20,21,22, 22,23,20 };
答案 0 :(得分:0)
将触摸的坐标转换为眼睛空间中的光线,从近平面到远平面。
将立方体的顶点转换为眼睛空间(与渲染时使用的转换相同)。
对变换后的立方体进行光线框交叉测试。