使用 OpenGL ES,我创建了一个带有纹理的立方体。我现在希望让每个带纹理的侧面都可以点击,这样我就可以创建一个立方体,在触摸特定侧面时导航到不同的视图。
我该如何实施?
此外,我如何知道立方体的哪些面当前是可见的?
有不同的技术可以执行对象的选择,或者像您的情况一样,在 OpenGL 中选择对象的面。
尽管正如 cthutu 所说,我发现光线相交技术对您的情况来说有点过头了,这是一个可行的解决方案。
无论如何,我建议您的解决方案是颜色选择技术。
它包括当用户在屏幕上“点击”时以预先确定的颜色渲染后缓冲区中的对象或对象的面。渲染是在纹理中完成的,工作是读取用户单击的像素的颜色。
获得像素颜色后,您可以轻松确定单击了哪个对象或面。
例如,假设您有一个有 6 个面的立方体,您为每个面指定一种颜色(即红色、蓝色、黄色、橙色、绿色、白色),并将指定的颜色存储在程序逻辑的某个位置。当用户单击时,您使用这些假颜色渲染立方体,读取颜色,然后使用实际颜色/纹理在屏幕上再次渲染。在该过程结束时,您检查像素的颜色,例如黄色,然后从那里确定选择。
我希望这在某种程度上有所帮助。
一种常见的 3d 图形任务,用于使用鼠标的游戏。您需要计算您触摸的屏幕上的 X 和 Y 位置,从该位置开始创建一条射线(Z = 0)并到达 Z = 无穷大,然后将该射线转换为世界空间(从相机空间)。然后使用该射线计算它首先与哪个三角形相交。
谷歌搜索“射线三角形相交”以获取数学和算法。对于一个简单的立方体,您可以遍历所有三角形。对于更复杂的场景,您需要对三角形进行空间散列(使用八叉树、bsps 等)以提高性能。