GLKit检测触摸位置

时间:2012-09-11 13:56:23

标签: iphone touch glkit

如何在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 };

1 个答案:

答案 0 :(得分:0)

  1. 将触摸的坐标转换为眼睛空间中的光线,从近平面到远平面。

  2. 将立方体的顶点转换为眼睛空间(与渲染时使用的转换相同)。

  3. 对变换后的立方体进行光线框交叉测试。