【发布时间】:2013-06-28 09:00:11
【问题描述】:
我正在开发一款移植到 Android 上的 3D 游戏,我想在游戏的 3D 过程中处理触摸事件。我需要 3D 空间中的点,就在剪裁平面附近,但我能得到的只是来自 Android 显示器的 2D 坐标。那么,有没有办法将这些(x,y)坐标映射到3D空间中的(x,y,z)坐标?
编辑
嗯,我正在开发一款赛车游戏,我想在课程中插入一些项目,具体取决于我单击的位置。我有这个功能:
void racing_mouse_cb(int button, int state, int x, int y) { //parameters (x,y) are coords of a display
set_ill_fish(get_player_data( local_player())->view);
}
但现在我将物品插入玩家面前一段距离:
void set_ill_fish(view_t view) {
item_locs[num_items].ray.pt.x = view.plyr_pos.x;
item_locs[num_items].ray.pt.z = view.plyr_pos.z - 5;
item_locs[num_items].ray.pt.y = find_y_coord(view.plyr_pos.x,
view.plyr_pos.z - 5) + 0.2;
item_locs[num_items].ray.vec = make_vector(0, 1, 0);
.
.
.
}
,但是如何将其转换为显示表面,我一无所知。
【问题讨论】:
-
你已经尝试了什么?发布该代码,然后我们可以看看我们可以在哪里为您提供帮助。
-
在 x-y-touch 上向 Z-pane 发送一条射线,看看你击中了什么物体。
-
要将一个点从 2D 屏幕转换到 3D 世界,可以使用
gluUnproject,参见http://nehe.gamedev.net/article/using_gluunproject/16013/ -
Wikibooks 上有一篇关于这些东西的文章 en.wikibooks.org/wiki/OpenGL_Programming/Object_selection
标签: android c opengl-es 3d coordinate-transformation